Why is this not working?
Im trying to get a list of available entries from ldap by simple filter: attribute cn must be less than 1000 and greater than 500. According to Net::LDAP documentation this could be done like this:
But it produces:#!/usr/bin/env perl use strict; use warnings; use Net::LDAP; my $ldap = Net::LDAP->new('192.168.9.111'); my $mesg = $ldap->bind('cn=root,dc=lomonosov,dc=parallel,dc=ru', passw +ord => 'rootpw'); $|=1; print "Searching for uids less than 1000 and gt 500... "; $mesg = $ldap->search( base => "ou=slurm,dc=lomonosov,dc=parallel,dc=ru", filter => "&(cn<=1000)(cn>=500)" ); $mesg->code && die $mesg->error; print "Ok\nFound: "; print join ", ", map $_->get_value("cn"), $mesg->entries;
I know that there is a two hundred or so entries in ldap for this request,Searching for uids less than 1000 and gt 500... Ok Found:
In fact, the problem experienced on a simple filters with 'less than' or 'greater than' comparisions; complex search filters like '|(cn=527)(cn=528)' works just fine. What am I doing wrong? How can I get a list of entries with said filter?fisher% ldapsearch -h 192.168.9.111 -D "cn=root,dc=lomonosov,dc=parall +el,dc=ru" -w "rootpw" -b "ou=slurm,dc=lomonosov,dc=parallel,dc=ru" "& +(cn>600)(cn<1000)" |tail -3 # numResponses: 145 # numEntries: 144
Answer found, thanks to all. The original request using ldapsearch was wrong (according to rfc4515 there isn't '<' sign but '<='); the server doesn't answer for that type of comparisions becouse of absence of index.
<code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>