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:[EMAIL PROTECTED] 
Sent: Monday, December 17, 2007 6:12 AM
To: perl-ldap@perl.org; 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: [EMAIL PROTECTED]
Phone (Work) : +41 22 7679376
Skype : ribalba

Reply via email to