#!/usr/bin/perl # # $Id: searchPaged.pl,v 1.2 2007/09/16 14:48:33 dieter Exp dieter $ # Dieter Kluenter # 12.09.2007 # # usage ./searchPaged.pl # # wobei durch den Wert des Attributes sn # definiert wird # # Pragma # use Net::LDAP; use Net::LDAP::LDIF; use Net::LDAP::Control::Paged; use Net::LDAP::Constant qw( LDAP_CONTROL_PAGED ); ###################################################### # Zuerst einmal die Variablen definieren! ################################################### $mylocalhost = "ldap://localhost"; # $myhost = "ldap://marin.avci.de"; $binddn = "cn=benchmark,o=avci,c=de"; $passwd = "bench"; $mysearchbase = "ou=benchmark,o=avci,c=de"; $pagedsize = "10"; # $myattrs = "["mail, telephonenumber"]"; #$myfile = "/tmp/testergebnis.ldif"; ############################################################# # Nun eine Verbindung zum LDAP Server herstellen, hier soll ein # asynchroner Prozess gestartet werden und wir sprechen natürlich # LDAPv3 ############################################################# $ldap = Net::LDAP->new ( $mylocalhost, async => 1, version => 3 ) or die $!; ############################################################## # Die Erweiterung 'Paged Results' der Suchoperation wird # hier definiert, es sind nur zwei Werte erlaubt,Size und # Criticallity ############################################################### $ctrl = Net::LDAP::Control::Paged->new(size => "$pagedsize", critical => "1" ); ############################################################### # Nach einem erolgreichen Connect wird nun die Bind-Operation # eingeleitet. ################################################################ $result = $ldap->bind("$binddn", password => "$passwd" ); die $result->error() if $result->code(); ################################################################# # Die Argumente der Suchoperation werden hier gesammelt definiert ################################################################# @args = ( base => "$mysearchbase", scope => "one", deref => "search", filter => "(sn=$ARGV[0])", attrs => [ "*","+" ], callback =>\&ProcessSearch, control=> [ $ctrl ], ); ################################################################### # Der Subprozess des callback wird hier definiert, diese Routine # wird nach jedem Resultcode erneut aufgerufen #################################################################### sub ProcessSearch { my ( $ldap, $result ) = @_; return if ( ! defined($result) ); } ##################################################################### # Da der Suchprozess mit einem Cookie des DSA operiert, wird jetzt # die Verwendung des Cookie sowie die Suchroutine definiert. #################################################################### my $cookie; while(1) { $msg = $ldap->search( @args ); $msg->code and last; my($resp) =$msg->control( LDAP_CONTROL_PAGED ) or last; $cookie = $resp->cookie or last; $ctrl->cookie($cookie); #################################################################### # Jetzt wird definiert, wie die Suchergebnisse zu behandeln sind. # In diesem Falle werden die Ergebnisse im LDIF Format nach STDOUT # gsschrieben. #################################################################### if ( $msg->count() > 0 ) { print $msg->count(), " Einträge gefunden,\n"; $ldif = Net::LDAP::LDIF->new(\*STDOUT,"w", sort => 1, version => '1' ) or die $!; $ldif->write_entry($msg->all_entries() ); $ldif->done(); } } #################################################################### # Zum Schluss verabschieden wir uns vom DSA höflich mit einem # unbind und beenden den Prozess. #################################################################### $msg = $ldap->unbind(); exit (0); #################################################################### # Und so sieht dann das Suchergebnis aus, die Attribute alphabetisch # sortiert, da sortieren vorgegeben wurde. Hier natürlich nur das # Ergebnis eines einzeln Eintrages. #################################################################### # 10 Einträge gefunden, # version: 1 # # dn: cn=test0300,ou=benchmark,o=avci,c=de # objectClass: evolutionPerson # cn: test0300 # createTimestamp: 20051128122940Z # creatorsName: cn=admin,o=avci,c=de # entryCSN: 20051128122940.000000Z#000003#000#000000 # entryDN: cn=test0300,ou=benchmark,o=avci,c=de # entryUUID: 640a09b4-f456-1029-8034-95170a5cd808 # fileAs: test0300 test0300lname # givenName: test0300 # hasSubordinates: FALSE # modifiersName: cn=admin,o=avci,c=de # modifyTimestamp: 20051128122940Z # sn: test0300lname # structuralObjectClass: evolutionPerson # subschemaSubentry: cn=Subschema # telephoneNumber: +49.40.4450300 # uid: test0300 # userPassword: geheim # #############################################################