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:<br><br>
./<a href="http://script.pl">script.pl</a> [fichero_configuracion] [dominio]<br><br>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. <br>
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. <br>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.<br>
<br>Y es que ya no se ni que mirar, no entiendo que me puede estar pasando, si el codigo está bien!<br>¿Alguien me puede echar una mano?No sé , ¿Estoy haciendo algo mal?<br><br>Gracias, saludos!<br><br>#!c:\perl\bin\perl.exe -w<br>
<br>use 5.010;<br>use Net::LDAP;<br>use Net::LDAP::Control;<br>use Net::LDAP::Control::Paged;<br>use MIME::Base64;<br>use open qw(:utf8 :std); <br><br>my $siguiente = '0';<br>my $ldaps = "$ARGV[1]";<br>
my $configuracion = "$ARGV[0]";<br>
open CONFIG, q[<], "$configuracion" or die "No puedo leer el fichero de configuracion $!";<br>open REPORTE, q[>], "reporteee.txt" or die "No puedo escribir el fichero $ARGV[1].txt $!";<br>
my $base = 'DC=espana5,DC=bankia,DC=corp';<br><br>sub conviertefecha{<br> my $fecha_desordenada = shift;<br> my @empieza = qw(0 4 6 8 10 12);<br> foreach my $comienzo(@empieza){ <br> if ($cont == '1'){<br>
$despiezando = substr($fecha_desordenada,$comienzo,4);<br> push(@array,$despiezando);<br> ++$cont;next;<br> }<br> $despiezando = substr($fecha_desordenada,$comienzo,2);<br>
$cont++;<br>
push(@array,$despiezando);<br> }<br> $fecha_ordenada = "$f[2]/$f[1]/$f[0] $f[3]:$f[4]:$f[5]";<br> return $fecha_ordenada;<br> undef @array; <br>}<br>sub busca{<br> my ($us,$pass) = @_;<br>
my $query = "cn=x0*";<br> say "$query";<br> my @attrs = qw(cn sAMAccountName memberof department);<br> say "defini arr";<br> my @args = ( base => $base,<br> #scope => 'sub',<br>
filter => $query,<br> attrs => \@attrs,<br> control => [ $page ],<br> ); <br> my $ldap = Net::LDAP->new($ldaps) or die "$!";<br> say "Conectando a $ldaps";<br>
my $mesg = $ldap->bind($us, password =>$pass);<br> my $page = Net::LDAP::Control::Paged->new( size => 5000 ) or die "$!";<br> my $cookie; <br> say "$base-----$query------$page------$ldaps----$us----$pass--";<br>
while(1){<br> say "Entre en while1";<br> $mesg = $ldap->search ( @args ) or die $!;<br> <b> while(my $entry = $mesg->shift_entry()){</b> ## Aqui no entra<br> say "Entre en while";<br>
my $lastLogonTimestamp = $entry->get_value('lastLogonTimestamp');<br> $lastLogonTimestamp = &conviertefecha($lastLogonTimestamp);<br> my $msdsuaccountctrl = $entry->get_value('msds-user-account-control-computed');<br>
my $departmento = $entry->get_value('department');<br> say REPORTE "$lastLogonTimestamp,$msdsuaccountctrl,$departmento";<br> } <br> my ($resp) = $mesg->control(LDAP_CONTROL_PAGED) or last;<br>
$cookie = $resp->cookie or last;<br> $page->cookie($cookie);<br> } <br> if ($cookie){<br> $page->cookie($cookie);<br> $page->size(0);<br> $ldap->search( @args );<br>
}<br> $ldap->unbind;<br>}<br>unless ( @ARGV eq '2' ){<br> say "[SYNTAX ERROR]\n[INFO] ./$0 [fichero_configuracion] [dominio]";<br> exit(1);<br>}<br>while(my $linea=<CONFIG>){<br> chomp($linea);<br>
if($siguiente eq '1'){<br> $passwd = $linea;<br> &busca($user,$passwd);<br> exit(0);<br> }<br> $user = $linea;<br> $siguiente = '1';<br>}<br>