Ruby-ldap and paged results on windows

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.

···

On 8/21/07, Dave King <dave / davewking.com> 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.

I can help you debug this. The only thing I can see offhand that is weird is
the Zulu timestring. You can help me by taking each of the individual
branches in your filter, without the &s and the !, and just run them one by
one through Net::LDAP::Filter.construct till you find the one that breaks.

···

On 8/22/07, dave@davewking.com <dave@davewking.com> wrote:

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.

What I really wanted to do was this

(&(samaccounttype=805306368)(|(lastLogonTimestamp<=128231111837280000)(&(!(lastLogonTimestamp=*))(whenCreated<=
20070522000000.0Z))))

and that works.

Thanks

Francis Cianfrocca wrote:

···

On 8/22/07, dave@davewking.com <dave@davewking.com> wrote:
  

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.

I can help you debug this. The only thing I can see offhand that is weird is
the Zulu timestring. You can help me by taking each of the individual
branches in your filter, without the &s and the !, and just run them one by
one through Net::LDAP::Filter.construct till you find the one that breaks.

Actually, you had a syntax error in the first version. The ! operator is
only allowed to take one branch.

···

On 8/26/07, Dave King <dave@davewking.com> wrote:

What I really wanted to do was this

(&(samaccounttype=805306368)(|(lastLogonTimestamp<=128231111837280000)(&(!(lastLogonTimestamp=*))(whenCreated<=
20070522000000.0Z))))

and that works.

Thanks