Thanks. Using the pop-entry line does in fact return all the DN's from the
input file. Unfortunately, once I try to print the next two lines and insert
more code to iteratively lookup and print a dn, everything breaks. The goal is
to print to a file in the following order:
search dn result from input1
changetype: modify
replace: manager
manager: "search dn result from input 2" ;i've commented
this code till i get the first 3 lines working
Here's the code I have. Using your recommendation failed with the below errors
(tried dn and $dn). Thanks for looking, again.
#! perl
use strict;
use warnings;
use diagnostics;
use Net::LDAP;
use Net::LDAP::Entry;
use Net::LDAP::Search;
use Net::LDAP::LDIF;
open PERSON, "<", "ou3" or die "Cannot open 'ou3': $!";
open MGR, "<", "ou8" or die "Cannot open 'ou8': $!";
open OUT, ">", "ldif3.ldif" or die "Cannot open 'ldif3.ldif': $!";
my $HOST = "1";
my $ADMIN = "cn=admin,DC=corp";
my $PWD = "0";
my $BASEDN = "DC=corp";
my $ldap = Net::LDAP->new("$HOST", port=>389) or die "$@";
my $dn = $ldap->bind("$ADMIN", password=>"$PWD");
my $mgrdn = $ldap->bind("$ADMIN", password=>"$PWD");
my @attr = "1.1";
my $result = Net::LDAP::LDIF->new( "ldif3.ldif", "a", wrap=>40 );
my $entry;
my $entry2;
while (<PERSON>){
chomp;
$dn = $ldap->search( #return only the employeeID DN
base => "$BASEDN",
filter => "(&(objectClass=user)(employeeID=$_))",
scope => "sub",
attrs => ['1.1']
);
$dn->code && die $dn->error;
# $entry = $dn->pop_entry;
$entry->dn;
print $result->write_entry($entry);
print OUT "changetype: modify", "\n";
print OUT "replace: manager", "\n";
}
#continue;
#while ($mgr){
#while (<MGR>){
#chomp;
#$mgrdn = $ldap->search( #return only the manager DN
# base => "$BASEDN",
# filter => "(&(objectClass=user)(employeeID=$_))",
# scope => "sub",
# attrs => [...@attr],
# );
# $mgrdn->code && die $mgrdn->error;
# foreach $entry2 ($mgrdn->entries) { $entry2->dump; }
# #$entry2 = $mgrdn->pop_entry();
# #$result->write_entry($entry2);
# #print OUT $entry2;
# #print OUT "manager: $entry2", "\n";
#}
#}
$dn = $ldap->unbind; #session ends
close OUT or die "Cannot close in-memory file: $!";
close MGR or die "Cannot close in-memory file: $!";
close PERSON or die "Cannot close in-memory file: $!";
Here's the errors:
C:\Temp10>c:\perl\bin\perl ldif3a.pl
Can't call method "dn" on an undefined value at ldif3a.pl line 56, <PERSON>
line 1 (#1)
(F) You used the syntax of a method call, but the slot filled by the
object reference or package name contains an undefined value. Something
like this will reproduce the error:
$BADREF = undef;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);
Uncaught exception from user code:
Can't call method "dn" on an undefined value at ldif3a.pl line 56,
<PERS
at ldif3a.pl line 56
C:\Temp10>edit ldif3a.pl
C:\Temp10>c:\perl\bin\perl ldif3a.pl
Can't call method "Net::LDAP::Search=HASH(0x1874a24)" on an undefined value at
ldif3a.pl line 56, <PERSON> line 1 (#1)
(F) You used the syntax of a method call, but the slot filled by the
object reference or package name contains an undefined value. Something
like this will reproduce the error:
$BADREF = undef;
process $BADREF 1,2,3;
$BADREF->process(1,2,3);
Uncaught exception from user code:
Can't call method "Net::LDAP::Search=HASH(0x1874a24)" on an undefined
va
at ldif3a.pl line 56