[Madrid-pm] consulta masiva a directorio activo
deibyz
deibyz en gmail.com
Mar Sep 20 09:10:15 PDT 2011
Yo te recomendaría que no usarás líneas tal que:
my $mesg = $ldap->bind($us, password =>$pass);
Sin comprobar luego si en $mesg tienes un OK o un Uruk-Hai, que nunca se
sabe :-P
$mesg es un Net::LDAP::Message, puedes mirar en la docu como comprobar si te
ha devuelto algún código de error o algo parecido después del bind, que para
mí sería de los principales sospechos. Todo esto además de strict y
similares que ya recomiendan por ahí.
Saludos,
D.
2011/9/20 Jorge Gonzalez <jorge.gonzalez en daikon.es>
> En la linea previa a esa en la que no entras, hay una llamada a
> $ldap->search. Yo volcaría los argumentos de esa llamada para asegurarme de
> que realmente la llamada a $ldap->search devuelve algo. Quiza no entras
> porque la busqueda no devuelve resultados.
>
> También te recomiendo que uses strict al principio del script, me ha
> parecido ver alguna variable no inicializada por ahi...
>
> Slds
> J.
>
> El 20/09/11 12:43, David Barrientos J escribió:
>
> Hola! Os escribo para ver si alguien me puede echar una mano: Necesito
> hacer un script que descargue de forma masiva ciertos datos de todos los
> usuarios de un directorio activo de microsoft. Mi script se ejecuta asi:
>
> ./script.pl [fichero_configuracion] [dominio]
>
> Primero, lee del fichero de configuracion sus dos lineas: Usuario, y
> contraseña. Despues es donde viene el problema. En la parte de la
> autenticación ( la linea que pongo en negrita ) no entra en el bucle, no
> consulta ningun dato.
> Esto es muy raro, el código de la función busca() , si lo pego en otro
> script nuevo, sin funciones, y con la password y usuario en el fichero,
> funciona todo perfecto. Tal y como esta.
> Pero, al leer usuario y pass de un fichero y usar funciones, falla en la
> consulta. Y he comprobado haciendo un print las variables usuario, password,
> ldaps,que todos los valores los toma bien.
>
> Y es que ya no se ni que mirar, no entiendo que me puede estar pasando, si
> el codigo está bien!
> ¿Alguien me puede echar una mano?No sé , ¿Estoy haciendo algo mal?
>
> Gracias, saludos!
>
> #!c:\perl\bin\perl.exe -w
>
> use 5.010;
> use Net::LDAP;
> use Net::LDAP::Control;
> use Net::LDAP::Control::Paged;
> use MIME::Base64;
> use open qw(:utf8 :std);
>
> my $siguiente = '0';
> my $ldaps = "$ARGV[1]";
> my $configuracion = "$ARGV[0]";
> open CONFIG, q[<], "$configuracion" or die "No puedo leer el fichero de
> configuracion $!";
> open REPORTE, q[>], "reporteee.txt" or die "No puedo escribir el fichero
> $ARGV[1].txt $!";
> my $base = 'DC=espana5,DC=bankia,DC=corp';
>
> sub conviertefecha{
> my $fecha_desordenada = shift;
> my @empieza = qw(0 4 6 8 10 12);
> foreach my $comienzo(@empieza){
> if ($cont == '1'){
> $despiezando = substr($fecha_desordenada,$comienzo,4);
> push(@array,$despiezando);
> ++$cont;next;
> }
> $despiezando = substr($fecha_desordenada,$comienzo,2);
> $cont++;
> push(@array,$despiezando);
> }
> $fecha_ordenada = "$f[2]/$f[1]/$f[0] $f[3]:$f[4]:$f[5]";
> return $fecha_ordenada;
> undef @array;
> }
> sub busca{
> my ($us,$pass) = @_;
> my $query = "cn=x0*";
> say "$query";
> my @attrs = qw(cn sAMAccountName memberof department);
> say "defini arr";
> my @args = ( base => $base,
> #scope => 'sub',
> filter => $query,
> attrs => \@attrs,
> control => [ $page ],
> );
> my $ldap = Net::LDAP->new($ldaps) or die "$!";
> say "Conectando a $ldaps";
> my $mesg = $ldap->bind($us, password =>$pass);
> my $page = Net::LDAP::Control::Paged->new( size => 5000 ) or die "$!";
> my $cookie;
> say "$base-----$query------$page------$ldaps----$us----$pass--";
> while(1){
> say "Entre en while1";
> $mesg = $ldap->search ( @args ) or die $!;
> * while(my $entry = $mesg->shift_entry()){* ## Aqui no entra
> say "Entre en while";
> my $lastLogonTimestamp =
> $entry->get_value('lastLogonTimestamp');
> $lastLogonTimestamp = &conviertefecha($lastLogonTimestamp);
> my $msdsuaccountctrl =
> $entry->get_value('msds-user-account-control-computed');
> my $departmento = $entry->get_value('department');
> say REPORTE
> "$lastLogonTimestamp,$msdsuaccountctrl,$departmento";
> }
> my ($resp) = $mesg->control(LDAP_CONTROL_PAGED) or last;
> $cookie = $resp->cookie or last;
> $page->cookie($cookie);
> }
> if ($cookie){
> $page->cookie($cookie);
> $page->size(0);
> $ldap->search( @args );
> }
> $ldap->unbind;
> }
> unless ( @ARGV eq '2' ){
> say "[SYNTAX ERROR]\n[INFO] ./$0 [fichero_configuracion] [dominio]";
> exit(1);
> }
> while(my $linea=<CONFIG>){
> chomp($linea);
> if($siguiente eq '1'){
> $passwd = $linea;
> &busca($user,$passwd);
> exit(0);
> }
> $user = $linea;
> $siguiente = '1';
> }
>
>
> _______________________________________________
> Madrid-pm mailing listMadrid-pm en pm.orghttp://mail.pm.org/mailman/listinfo/madrid-pm
>
>
> _______________________________________________
> Madrid-pm mailing list
> Madrid-pm en pm.org
> http://mail.pm.org/mailman/listinfo/madrid-pm
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/06ae292f/attachment.html>
Más información sobre la lista de distribución Madrid-pm