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 <[email protected]> > 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 > [email protected]http://mail.pm.org/mailman/listinfo/madrid-pm > > > _______________________________________________ > Madrid-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/madrid-pm >
_______________________________________________ Madrid-pm mailing list [email protected] http://mail.pm.org/mailman/listinfo/madrid-pm
