Didi, by default the search will return all attributes '*'. Depending
on the ldap server you can increase the efficiency by returning only the
attributes required.
$ldap->search(
filter=>"(&(objectClass=posixAccount)(uid=*))",
base=>"ou=People,dc=example,dc=edu",
attrs => [ 'userPassword', 'uidNumber', 'gidNumber', 'gecos',
'homeDirectory', 'loginShell']
);
Don
-----Original Message-----
From: Didi [mailto:ribalba@xxxxxxxxx]
Sent: Monday, December 17, 2007 6:12 AM
To: perl-ldap@xxxxxxxx; Jan van Eldik
Subject: Problem with big entries
Hi
I am trying to generate my /etc/passwd from my ldap as a backup
solution. For this I wrote a little script. Unfortunately with having
20530 users in my LDAP (expected to increase) the script takes
real 0m21.471s
to execute and uses up to 370 MB of Memory. (While using 100 % Percent
of one Core (AMD Athlon(tm) 64 X2 Dual Core Processor 4600+))
Has someone got an idea how I can make this a little more efficient. I
tried both
- foreach my $entry ($mesg->entries) {
- while (my $entry=$mesg->pop_entry ( )){
It seams like the search first fills it's buffer and then proceeds.
Thank you in advance.
Cheers for the great work
Didi
>> -------Code-----
#!/usr/bin/perl
# A little program that creates a /etc/passwd from ldap
use strict;
use Net::LDAP;
# Please modify appropriate
my $ldap = Net::LDAP->new("lxb5479.cern.ch") or die "Error in creating
new Connection: $@";;
$ldap->bind("cn=Manager,dc=example,dc=edu", password=>"no_you_dont");
my $mesg = $ldap->search(filter=>"(&(objectClass=posixAccount)(uid=*))",
base=>"ou=People,dc=example,dc=edu");
$mesg->code && die $mesg->error;
#########!!!DO NOT TOUCH!!!##########
#foreach my $entry ($mesg->entries) {
while (my $entry=$mesg->pop_entry ( )){
# Get rid of {crypt}
my $a = $entry->get_value("userPassword");
$a =~ s/\{crypt\}//g;
my $line = join (":", $entry->get_value("uid"),
$a ,
$entry->get_value("uidNumber") ,
$entry->get_value("gidNumber") ,
$entry->get_value("gecos") ,
$entry->get_value("homeDirectory") ,
$entry->get_value("loginShell") );
print $line . "\n";
}
$ldap->unbind;
#end
----
www.ribalba.de
Email / Jabber: ribalba@xxxxxxxxx
Phone (Work) : +41 22 7679376
Skype : ribalba
|