#!/usr/bin/perl use strict; use warnings; use Net::LDAP; use MIME::Base64 qw( encode_base64 ); use Carp qw( croak ); # Connects to server my $ldap = new Net::LDAP( 'localhost' ) or croak $@; my $message = $ldap->bind( 'uid=lcampos,ou=People,dc=segula,dc=pt', password => 'secret' ); croak $message->error if $message->is_error; # Locate user $message = $ldap->search( base => 'ou=People, dc=segula, dc=pt', filter => 'uid=lcampos', scope => 'one' ); croak $message->error if $message->is_error; my $entry = $message->entry(0); croak 'Nobody found!?!' unless $entry; # Replace password. $entry->replace( userPassword => '{CRYPT}'. encode_base64( crypt( 'secret', join( '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64] ) ) ) ); $message = $entry->update( $ldap ); croak $message->error if $message->is_error; # Report results. print q{User password changed to: "}.$entry->get_value( 'userPassword' ).qq{".\n};