From Notes
#!/usr/bin/perl
use strict ;
use Net::LDAP ;
my $server = "ldap://ldap.example.org:389" ;
my $userbase = "ou=People,dc=example,dc=org" ;
my $searchbase = "dc=example,dc=org" ;
my $bind_dn= "cn=Manager,dc=example,dc=org" ;
my $bind_pass = "<secret>" ;
my $ldap = Net::LDAP->new("$server") or die "$@";
my $mesg = $ldap->start_tls(
verify => 'require',
cafile => '/usr/share/ssl/certs/cacert.crt',
sslversion => 'tlsv1',
ciphers => 'HIGH:MEDIUM:+SSLv2:RSA'
);
$mesg = $ldap->bind($bind_dn,
password => $bind_pass,
version => 3 );
# Error checking on bind
$mesg->code && warn "bind failed: ", $mesg->error ;
$mesg = $ldap->search(
base => $searchbase,
filter => "(objectclass=posixaccount)"
) ;
# Error checking on search
$mesg->code && warn "search failed: ", $mesg->error ;
# Print number of results
my $count = $mesg->count ;
printf "Results: %d\n", $count ;
# Iterate through results
for ( my $i = 0 ; $i < $count ; $i++ ) {
my $entry = $mesg->entry ( $i );
my $dn = $entry->dn ;
printf "DN: %s\n", $dn ;
my @cn = $entry->get_value('cn', alloptions => 0) ;
printf "CN: %s\n", $cn[0] ;
$entry->changetype('modrdn') ;
$entry->replace (
newrdn => "cn=$cn[0]",
deleteoldrdn => 0
) ;
my $mod_mesg = $entry->update( $ldap ) ;
# Error checking on modify
$mod_mesg->code && warn "modify failed: ", $mesg->error ;
}
$mesg = $ldap->unbind() ;
$mesg->code && warn "failed to un-bind: ", $mesg->error ;
exit(0) ;
#vim ts=2