Dicho rápido y fácil, esto equivale a ejecutar con ldapsearch desde consola
$ ldapsearch -Y EXTERNAL -H ldapi:///
Será necesarios que las ACL permiten al usuario root para que tenga permisos de lectura donde el administrador tiene permisos de escritura:
olcAccess: {0}to attrs=userPassword,shadowLastChange,sambaLMPassword,sambaNTPassword
by self write
by anonymous auth
by dn="cn=admin,dc=sv" write
by dn="cn=admin,dc=hacienda,dc=gob,dc=sv" write
by dn.regex="^cn=admin,(dc=\w+(,)?){1,3}$" read
by dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
...
Y claro, no debe tener límites alguno en el uso de recursos:
olcLimits: {1}dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" time.soft=unlimited time.hard=unlimited size.soft=unlimited size.hard=unlimited
Con Servidor Samba con LDAP NSS – PAM en Debian Wheezy no debería preocuparse por estos detalles
En la mayoría de casos, sería necesario instalar Authen::SASL. En Debian:
$ aptitude install libauthen-sasl-perl
Y por fin, el tan ansiado código se reduce a esto:
my $ldap = Net::LDAP->new("ldapi://%2fvar%2frun%2fslapd%2fldapi") or die "$@";
my $sasl = Authen::SASL->new(mechanism => 'EXTERNAL');
my $sasl_client = $sasl->client_new('ldap', 'localhost');
$ldap->bind(undef, sasl => $sasl_client);
my $msg = $ldap->search(
...