<bubslg <at> gmail.com> writes: > > > use Win32::OLE; > $user=Win32::OLE->GetObject("<LDAP://cn=someuser,DC=mydomain,DC=org>"); > print "$user->{'displayname'}, \n"; > print "$user->{'description'}, \n"; >
You Could use Net-LDAP for searching the LDAP #!/usr/bin/perl # Search the CalNet Directory Service using a 'uid' attribute # and return selected attributes of the UC Berkeley-affiliated # person, if any, that matches that 'uid' # Prerequisite: Graham Barr's Perl-LDAP, whose home page is located at: # # http://perl-ldap.sourceforge.net/ # # For additional Perl-LDAP documentation and usage examples, see: # # http://www.perlmonth.com/features/ldap/ldap.html?issue=11 # http://theoryx5.uwinnipeg.ca/CPAN/data/perl-ldap/Net/LDAP/Examples.html # Some significant limitations of the code sample below include: # # - It is a simple, procedural script. You'd likely want to break out # several of its functions into individual subroutines. # # - It performs only primitive error handling. (It just dies and displays # an error message when an error occurs.) # # - It doesn't automatically try any alternate directory servers # if the primary server is unavailable. # # - It performs an "anonymous" bind to the directory. # # In some cases, your application might need to bind (authenticate) # to the CalNet directory as a specific user, rather than anonymously. # You'd need to do so, for instance, to access non-public attributes of # campus people, such as their CalNet IDs or student IDs. # # (Note: to access such non public-attributes, you'll first need to # obtain the appropriate permissions from the CalNet System's # administrators and often also from the campus department[s] which # own that data.) # # Here is an example of how you would bind to the directory as a specific # user, from Mark Wilcox's article on www.pearlmonth.com (above): # # my $mesg = $ldap->bind('uid=myuid,ou=people,dc=berkeley,dc=edu', # password => 'password'); # # In addition, when binding as a specific user, your application's # connection to the directory should be made using SSL. This way, # your directory user password and the non-public data you are # receiving will be encrypted when being sent over the network. # # For more information about how to use Perl-LDAP to connect to the # directory using SSL encryption, see the documentation for the # Net::LDAPS module, which is included with the Perl-LDAP distribution: # # http://perl-ldap.sourceforge.net/doc/Net/LDAPS.html # # The additional prerequisites for using Perl-LDAP with SSL appear to be: # # OpenSSL: http://www.openssl.org/ # Net::SSLeay: http://www.bacus.pt/Net_SSLeay/index.html use Net::LDAP; my $ldap; $= = 100000; # setting the page length of STDOUT, so we can have 100000 entries and only 1 ( one ) header # --------------------------------------------------------------- # Accept a single command line parameter, the 'uid' attribute that # uniquely identifies 'people' entries in the CalNet Directory Service # $uid = personeels nummer. # $uid = $ARGV[0]; # instead of using the print statement we create a FORMAT , so all output is on one line format STDOUT_TOP = @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<@<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<< 'DisplayName' , 'mail' ,'telephoneNumber', 'Pers.Number', 'mobile' , 'compa ny' , 'GRIP' @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<@<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<< "-------------------------------------------------------- ","=====================================",'-------------','-----------','------- ------','---------------------------------', '-----------' . format STDOUT = @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<@<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<@<<<<<<<<<<<<<< $displayName ,";;$eMailAddress" ,";;$phoneNumber" ,";;$persNumber",";;$mobile" , ";;$company" , ";;$grip" . # Convenience placeholder if we want to repeatedly test with a specific uid # $uid = "3877"; // Replace this uid with the one you would like to test # Define variables # ---------------- # LDAP directory to contact # $directoryURL = "caldir.berkeley.edu"; my ( $directoryURL) = "VLDDC1.simac.local"; # $directoryURL = "pongo.berkeley.edu"; // alternate server # Portion of the directory we'll be searching my ($searchBase ) = "OU=Users,OU=SIMAC,DC=simac,DC=local"; # The attributes (and their associated values) that we wish to # search for in the directory. # # In this instance, we're searching for the directory entry # which matches a specific 'uid'. # # If we were searching for entries by name, for instance, # we could instead search on the common name (cn) attribute, # such as "(cn=John*Doe)", or the surname (sn) attribute, # such as "(sn=Doe)" ... my $searchFilter = "(extensionAttribute3=*)"; # The attributes we'd like to have returned for each entry # # (Doing this is entirely optional; it simply reduces the # volume of data returned by excluding attributes that we're # not interested in receiving.) my ( $attributesToReturn) = [ 'displayName', 'mail', 'telephoneNumber', 'extensionAttribute3', 'mobile', 'company', 'otherTelephone', ]; # Connect to the directory # ------------------------ print STDERR "Connecting to LDAP server \"$directoryURL\" ...\n"; # Open a connection to the directory $ldap = Net::LDAP->new($directoryURL) # as struct or die "$@"; # Make an anonyous bind to the directory # (See the comments above if you wish to bind to the # directory as a specific user.) my $userToAuthenticate = 'Your_Login' ; my $passwd = 'Your Passwd' ; my $mesg = $ldap->bind ( "$userToAuthenticate", password => "$passwd", version => 3 ); # use for changes/edits print STDERR "Looking up directory data for uid \"$uid\" ...\n"; # Perform a search # ---------------- my $searchResultsObject = $ldap->search ( # Search the 'people' portion of the directory, # as defined above base => $searchBase, # Note the comma here # Search on the uid attribute filter => $searchFilter, # and here # Return only a limited set of attributes from # the search, *if* we've defined such a set above attrs => $attributesToReturn ); # If there is a result code (indicating an error), # display an error message if ($searchResultsObject->code) { print STDERR "An error occurred during the LDAP search attempt:\n"; die $searchResultsObject->error; } # Disconnect from the directory # ----------------------------- $ldap->unbind; # Work with the data returned from the search # ------------------------------------------- my $countOfEntriesReturned = $searchResultsObject->count; print STDERR "Search returned $countOfEntriesReturned entries ...\n\n"; # Cycle through each of the directory entries returned from the # search, and extract and print the values of selected attributes # of each entry for ( my $index = 0 ; $index < $countOfEntriesReturned; $index++) { # Look at each of the 'entry' objects returned from the search my $entry = $searchResultsObject->entry($index); # Initialize each variable each time through the loop $displayName = ""; $eMailAddress = ""; $phoneNumber = ""; $extensionAttribute3 = ""; $mobile = ""; $company = ""; $grip = ""; # Extract the values from selected attributes ( $displayName = $entry->get_value('displayname')) =~ s/\s*$// ; $eMailAddress = $entry->get_value('mail'); $phoneNumber = $entry->get_value('telephoneNumber'); $persNumber = $entry->get_value('extensionAttribute3'); $mobile = $entry->get_value('mobile'); $company = $entry->get_value('company'); $grip = $entry->get_value('otherTelephone'); next if $displayName =~ /^uit diens/i ; =pod This will not be executed Below will write out the data, i've used a STDOUT format print "Name : $displayName\n"; print "Compagny : $company\n"; print "E-mail : $eMailAddress\n"; print "Phone : $phoneNumber\n"; print "Mobile : $mobile\n"; print "Grip : $grip\n"; print "personeelsNummer: $persNumber\n"; print "\n"; =cut # using the STDOUT_FORMAT write; }