From: dave@... Date: 2007-08-22T23:58:25+09:00 Subject: Re: ruby-ldap and paged results on windows On 8/21/07, Dave King wrote: >> >> Hi- >> I'm trying to get paged results to work with ruby-ldap against >> Active Directory in Windows. I compiled ruby-ldap 0.9.7 following the >> directions on >> http://www.turnofthecrank.com/2006/09/11/ruby-ldap-and-win32/ >> >> Then I tried to run this code I found. The error I get is that ruby >> can't find the constant LDAP_CONTROL_PAGEDRESULTS and if I put >> LDAP.constants it's not listed. Any ideas? >The literal value of the control is "1.2.840.113556.1.4.319" >You might try defining that in your code and see if it works. (If you have >sharp eyes you'll notice that the enterprise number in the OID belongs to >Microsoft. Paged controls started life as a hack to make Active Directory >performance slightly less horrible.) >If you're still having trouble, try the Net::LDAP library. It supports >paged >results transparently. Thanks for the tip. I tried setting the value of the control, then I got an error that said uninitialized constant LDAP_OPT_SERVER_CONTROLS (NameError) Somewhere I found that this should be 0x12 (which may be wrong) so I set it to that and got this error `set_option': the set_option() function is unimplemented on this machine (NotImplementedError) So it looks like my problems may be bigger than undefined constants. I've also been looking at Net::LDAP as well, the only problem I've found there is that it doesn't parse my ldap filters right so I have to rewrite them in the Net::LDAP way. For example this filter works fine in ruby-ldap (&(samaccounttype=805306368)(|(lastLogonTimestamp<=128231111837280000)(&(!(lastLogonTimestamp=*)(whenCreated<=20070522000000.0Z))))) but in Net::LDAP it gives me this error c:/ruby/lib/ruby/gems/1.8/gems/ruby-net-ldap-0.0.4/lib/net/ldap/filter.rb:302:in `initialize': invalid filter syntax (Net::LDAP::LdapError) when i run it like this filter = Net::LDAP::Filter.construct("(&(samaccounttype=805306368)(|(lastLogonTimestamp<=128231111837280000)(&(!(lastLogonTimestamp=*)(whenCreated<=20070522000000.0Z)))))") I can rewrite my stuff to use the Net::LDAP filters, but it would be nice to just use the ldap filter string.