From bass.bj en gmail.com Tue Sep 20 03:43:22 2011 From: bass.bj en gmail.com (David Barrientos J) Date: Tue, 20 Sep 2011 12:43:22 +0200 Subject: [Madrid-pm] consulta masiva a directorio activo Message-ID: 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=){ chomp($linea); if($siguiente eq '1'){ $passwd = $linea; &busca($user,$passwd); exit(0); } $user = $linea; $siguiente = '1'; } ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From jorge.gonzalez en daikon.es Tue Sep 20 04:18:18 2011 From: jorge.gonzalez en daikon.es (Jorge Gonzalez) Date: Tue, 20 Sep 2011 13:18:18 +0200 Subject: [Madrid-pm] consulta masiva a directorio activo In-Reply-To: References: Message-ID: <4E78767A.1050208@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=){ > chomp($linea); > if($siguiente eq '1'){ > $passwd = $linea; > &busca($user,$passwd); > exit(0); > } > $user = $linea; > $siguiente = '1'; > } > > > _______________________________________________ > 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: From bass.bj en gmail.com Tue Sep 20 05:18:28 2011 From: bass.bj en gmail.com (David Barrientos J) Date: Tue, 20 Sep 2011 14:18:28 +0200 Subject: [Madrid-pm] =?iso-8859-1?q?Resumen_de_Madrid-pm=2C_Vol_57=2C_Env?= =?iso-8859-1?q?=EDo_1?= In-Reply-To: References: Message-ID: Estoy un poco perdido con todo esto. He intentado ponerle strict ( aunque no seria la solución, tal vez podría darme una idea de donde estoy fallando ), pero no puedo ponerlo, me da el siguiente error: Bareword "LDAP_CONTROL_PAGED" not allowed while "strict subs" in use En cuanto a lo que me comentas de volcar los argumentos de la llamada $mesg = $ldap->search ( @args ) or die $!;, no se si te estoy entendiendo bien: @args tiene el contenido que debe tener, lo he comprobado sobre la ejecución, ¿Te refieres a esto? No soy un guru con perl(aún :) ),no sé si podría mirar de alguna forma los contenidos de $mesg y $ldap, son referencias y no sé cómo acceder a los datos en si, claro, al hacer un print $mesg o print $ldap, obtengo esto: Net::LDAP::Search=HASH(0xdbe064) Net::LDAP=HASH(0xd391bc) El 20 de septiembre de 2011 13:18, escribió: > Envíe los mensajes para la lista Madrid-pm a > madrid-pm en pm.org > > Para subscribirse o anular su subscripción a través de la WEB > http://mail.pm.org/mailman/listinfo/madrid-pm > > O por correo electrónico, enviando un mensaje con el texto "help" en > el asunto (subject) o en el cuerpo a: > madrid-pm-request en pm.org > > Puede contactar con el responsable de la lista escribiendo a: > madrid-pm-owner en pm.org > > Si responde a algún contenido de este mensaje, por favor, edite la > linea del asunto (subject) para que el texto sea mas especifico que: > "Re: Contents of Madrid-pm digest...". Además, por favor, incluya en > la respuesta sólo aquellas partes del mensaje a las que está > respondiendo. > > > Asuntos del día: > > 1. consulta masiva a directorio activo (David Barrientos J) > 2. Re: consulta masiva a directorio activo (Jorge Gonzalez) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Tue, 20 Sep 2011 12:43:22 +0200 > From: David Barrientos J > To: madrid-pm en pm.org > Subject: [Madrid-pm] consulta masiva a directorio activo > Message-ID: > > > Content-Type: text/plain; charset="iso-8859-1" > > 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=){ > chomp($linea); > if($siguiente eq '1'){ > $passwd = $linea; > &busca($user,$passwd); > exit(0); > } > $user = $linea; > $siguiente = '1'; > } > ------------ próxima parte ------------ > Se ha borrado un adjunto en formato HTML... > URL: < > http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/636be65f/attachment-0001.html > > > > ------------------------------ > > Message: 2 > Date: Tue, 20 Sep 2011 13:18:18 +0200 > From: Jorge Gonzalez > To: madrid-pm en pm.org > Subject: Re: [Madrid-pm] consulta masiva a directorio activo > Message-ID: <4E78767A.1050208 en daikon.es> > Content-Type: text/plain; charset="utf-8"; Format="flowed" > > 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=){ > > chomp($linea); > > if($siguiente eq '1'){ > > $passwd = $linea; > > &busca($user,$passwd); > > exit(0); > > } > > $user = $linea; > > $siguiente = '1'; > > } > > > > > > _______________________________________________ > > 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/e77ad5fb/attachment.html > > > > ------------------------------ > > _______________________________________________ > Madrid-pm mailing list > Madrid-pm en pm.org > http://mail.pm.org/mailman/listinfo/madrid-pm > > Fin de Resumen de Madrid-pm, Vol 57, Envío 1 > ******************************************** > ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From jorge.gonzalez en daikon.es Tue Sep 20 05:37:05 2011 From: jorge.gonzalez en daikon.es (Jorge Gonzalez) Date: Tue, 20 Sep 2011 14:37:05 +0200 Subject: [Madrid-pm] =?utf-8?q?Resumen_de_Madrid-pm=2C_Vol_57=2C_Env=C3=AD?= =?utf-8?q?o_1?= In-Reply-To: References: Message-ID: <4E7888F1.6040005@daikon.es> Vale, aqui va con un poco mas de detalle: Lo del strict: poner al principio del script la linea "use strict;". Si quieres, justo antes de la linea donde usas el LDAP_CONTROL_PAGED puedes poner una linea "no strict subs;" para evitar que dé ese error ahí. Para hacer un volcado del array de configuracion: Pon al principio del script la linea "use Data::Dumper;". Despues, justo antes de la llamada a $ldap->search pon una linea "print Dumper(\@args);" Para volcar $mesg y $ldap puedes hacerlo de la misma forma: print Dumper($mesg); print Dumper($ldap); Data::Dumper entiende los formatos de las referencias y te dará la informacion que buscas. Slds Jorge El 20/09/11 14:18, David Barrientos J escribió: > Estoy un poco perdido con todo esto. He intentado ponerle strict ( > aunque no seria la solución, tal vez podría darme una idea de donde > estoy fallando ), pero no puedo ponerlo, me da el siguiente error: > > Bareword "LDAP_CONTROL_PAGED" not allowed while "strict subs" in use > > En cuanto a lo que me comentas de volcar los argumentos de la llamada > $mesg = $ldap->search ( @args ) or die $!;, no se si te estoy > entendiendo bien: > > @args tiene el contenido que debe tener, lo he comprobado sobre la > ejecución, ¿Te refieres a esto? > No soy un guru con perl(aún :) ),no sé si podría mirar de alguna forma > los contenidos de $mesg y $ldap, son referencias y no sé cómo acceder > a los datos en si, claro, al hacer un print $mesg o print $ldap, > obtengo esto: > > Net::LDAP::Search=HASH(0xdbe064) > Net::LDAP=HASH(0xd391bc) > > > El 20 de septiembre de 2011 13:18, > escribió: > > Envíe los mensajes para la lista Madrid-pm a > madrid-pm en pm.org > > Para subscribirse o anular su subscripción a través de la WEB > http://mail.pm.org/mailman/listinfo/madrid-pm > > O por correo electrónico, enviando un mensaje con el texto "help" en > el asunto (subject) o en el cuerpo a: > madrid-pm-request en pm.org > > Puede contactar con el responsable de la lista escribiendo a: > madrid-pm-owner en pm.org > > Si responde a algún contenido de este mensaje, por favor, edite la > linea del asunto (subject) para que el texto sea mas especifico que: > "Re: Contents of Madrid-pm digest...". Además, por favor, incluya en > la respuesta sólo aquellas partes del mensaje a las que está > respondiendo. > > > Asuntos del día: > > 1. consulta masiva a directorio activo (David Barrientos J) > 2. Re: consulta masiva a directorio activo (Jorge Gonzalez) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Tue, 20 Sep 2011 12:43:22 +0200 > From: David Barrientos J > > To: madrid-pm en pm.org > Subject: [Madrid-pm] consulta masiva a directorio activo > Message-ID: > > > Content-Type: text/plain; charset="iso-8859-1" > > 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=){ > chomp($linea); > if($siguiente eq '1'){ > $passwd = $linea; > &busca($user,$passwd); > exit(0); > } > $user = $linea; > $siguiente = '1'; > } > ------------ próxima parte ------------ > Se ha borrado un adjunto en formato HTML... > URL: > > > ------------------------------ > > Message: 2 > Date: Tue, 20 Sep 2011 13:18:18 +0200 > From: Jorge Gonzalez > > To: madrid-pm en pm.org > Subject: Re: [Madrid-pm] consulta masiva a directorio activo > Message-ID: <4E78767A.1050208 en daikon.es > > > Content-Type: text/plain; charset="utf-8"; Format="flowed" > > 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=){ > > chomp($linea); > > if($siguiente eq '1'){ > > $passwd = $linea; > > &busca($user,$passwd); > > exit(0); > > } > > $user = $linea; > > $siguiente = '1'; > > } > > > > > > _______________________________________________ > > 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: > > > ------------------------------ > > _______________________________________________ > Madrid-pm mailing list > Madrid-pm en pm.org > http://mail.pm.org/mailman/listinfo/madrid-pm > > Fin de Resumen de Madrid-pm, Vol 57, Envío 1 > ******************************************** > > > > > _______________________________________________ > 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: From roberto en freekeylabs.com Tue Sep 20 09:01:13 2011 From: roberto en freekeylabs.com (Roberto Henriquez) Date: Tue, 20 Sep 2011 18:01:13 +0200 Subject: [Madrid-pm] =?utf-8?q?Resumen_de_Madrid-pm=2C_Vol_57=2C_Env=C3=AD?= =?utf-8?q?o_1?= In-Reply-To: <4E7888F1.6040005@daikon.es> References: <4E7888F1.6040005@daikon.es> Message-ID: <4E78B8C9.3020807@freekeylabs.com> On 09/20/11 14:37, Jorge Gonzalez wrote: > Vale, aqui va con un poco mas de detalle: > > Lo del strict: poner al principio del script la linea "use strict;". > Si quieres, justo antes de la linea donde usas el LDAP_CONTROL_PAGED > puedes poner una linea "no strict subs;" para evitar que dé ese error ahí. > > Para hacer un volcado del array de configuracion: > > Pon al principio del script la linea "use Data::Dumper;". Despues, > justo antes de la llamada a $ldap->search pon una linea "print > Dumper(\@args);" > > Para volcar $mesg y $ldap puedes hacerlo de la misma forma: > > print Dumper($mesg); > print Dumper($ldap); > > Data::Dumper entiende los formatos de las referencias y te dará la > informacion que buscas. > > Slds > Jorge > Hola! aprovecho la ocasión para recomendar el módulo Data::Printer como alternativa a Data::Dumper por estar orientado exclusivamente a la depuración (Data::Dumper se pensó originalmente para serializar estructuras de datos). Algunas características de Data::Printer: - muestra información sobre objetos (métodos, herencia). - no requiere que se le pasen referencias - presenta información en color - es configurable - la sintaxis es más compacta ( p $variable; ) Saludos, -- Roberto Henríquez roberto en freekeylabs.com ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From deibyz en gmail.com Tue Sep 20 09:10:15 2011 From: deibyz en gmail.com (deibyz) Date: Tue, 20 Sep 2011 18:10:15 +0200 Subject: [Madrid-pm] consulta masiva a directorio activo In-Reply-To: <4E78767A.1050208@daikon.es> References: <4E78767A.1050208@daikon.es> Message-ID: 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 > 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=){ > 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: From deibyz en gmail.com Tue Sep 20 09:12:43 2011 From: deibyz en gmail.com (deibyz) Date: Tue, 20 Sep 2011 18:12:43 +0200 Subject: [Madrid-pm] =?iso-8859-1?q?Resumen_de_Madrid-pm=2C_Vol_57=2C_Env?= =?iso-8859-1?q?=EDo_1?= In-Reply-To: References: Message-ID: Creo que para poder utilizar la constante LDAP_CONTROL_PAGED (cualquier constante LDAP en general) tienes que poner un "use Net::LDAP::Constant" al principio también... Salu2, D. 2011/9/20 David Barrientos J > Estoy un poco perdido con todo esto. He intentado ponerle strict ( aunque > no seria la solución, tal vez podría darme una idea de donde estoy fallando > ), pero no puedo ponerlo, me da el siguiente error: > > Bareword "LDAP_CONTROL_PAGED" not allowed while "strict subs" in use > > En cuanto a lo que me comentas de volcar los argumentos de la llamada $mesg > = $ldap->search ( @args ) or die $!;, no se si te estoy entendiendo bien: > > @args tiene el contenido que debe tener, lo he comprobado sobre la > ejecución, ¿Te refieres a esto? > No soy un guru con perl(aún :) ),no sé si podría mirar de alguna forma los > contenidos de $mesg y $ldap, son referencias y no sé cómo acceder a los > datos en si, claro, al hacer un print $mesg o print $ldap, obtengo esto: > > Net::LDAP::Search=HASH(0xdbe064) > Net::LDAP=HASH(0xd391bc) > > > El 20 de septiembre de 2011 13:18, escribió: > >> Envíe los mensajes para la lista Madrid-pm a >> madrid-pm en pm.org >> >> Para subscribirse o anular su subscripción a través de la WEB >> http://mail.pm.org/mailman/listinfo/madrid-pm >> >> O por correo electrónico, enviando un mensaje con el texto "help" en >> el asunto (subject) o en el cuerpo a: >> madrid-pm-request en pm.org >> >> Puede contactar con el responsable de la lista escribiendo a: >> madrid-pm-owner en pm.org >> >> Si responde a algún contenido de este mensaje, por favor, edite la >> linea del asunto (subject) para que el texto sea mas especifico que: >> "Re: Contents of Madrid-pm digest...". Además, por favor, incluya en >> la respuesta sólo aquellas partes del mensaje a las que está >> respondiendo. >> >> >> Asuntos del día: >> >> 1. consulta masiva a directorio activo (David Barrientos J) >> 2. Re: consulta masiva a directorio activo (Jorge Gonzalez) >> >> >> ---------------------------------------------------------------------- >> >> Message: 1 >> Date: Tue, 20 Sep 2011 12:43:22 +0200 >> From: David Barrientos J >> To: madrid-pm en pm.org >> Subject: [Madrid-pm] consulta masiva a directorio activo >> Message-ID: >> > cmdS1nLJFsO9g8Lw1hYf2w en mail.gmail.com> >> Content-Type: text/plain; charset="iso-8859-1" >> >> 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=){ >> chomp($linea); >> if($siguiente eq '1'){ >> $passwd = $linea; >> &busca($user,$passwd); >> exit(0); >> } >> $user = $linea; >> $siguiente = '1'; >> } >> ------------ próxima parte ------------ >> Se ha borrado un adjunto en formato HTML... >> URL: < >> http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/636be65f/attachment-0001.html >> > >> >> ------------------------------ >> >> Message: 2 >> Date: Tue, 20 Sep 2011 13:18:18 +0200 >> From: Jorge Gonzalez >> To: madrid-pm en pm.org >> Subject: Re: [Madrid-pm] consulta masiva a directorio activo >> Message-ID: <4E78767A.1050208 en daikon.es> >> Content-Type: text/plain; charset="utf-8"; Format="flowed" >> >> 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=){ >> > chomp($linea); >> > if($siguiente eq '1'){ >> > $passwd = $linea; >> > &busca($user,$passwd); >> > exit(0); >> > } >> > $user = $linea; >> > $siguiente = '1'; >> > } >> > >> > >> > _______________________________________________ >> > 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/e77ad5fb/attachment.html >> > >> >> ------------------------------ >> >> _______________________________________________ >> Madrid-pm mailing list >> Madrid-pm en pm.org >> http://mail.pm.org/mailman/listinfo/madrid-pm >> >> Fin de Resumen de Madrid-pm, Vol 57, Envío 1 >> ******************************************** >> > > > _______________________________________________ > 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: From estenole en gmail.com Tue Sep 27 15:03:55 2011 From: estenole en gmail.com (estenole estesile) Date: Wed, 28 Sep 2011 00:03:55 +0200 Subject: [Madrid-pm] Ayuda con mojolicoius Message-ID: Hola lista ! en su dia estuve preguntandoos sobre perl dancer, y ya me hablasteis de mojolicious. La cosa qes que estoy probandolo para hacerme una app pequeñita en ::Lite, pero estoy atascado con la conexion a la bbdd. He mirado en la web, documentacion, google, cpan, pero no me que da claro. Tengo un ej de codigo en el que comentan que para usarla habria que usar esto dentro del codigo. plugin database => { dsn => 'dbi:Pg:dbname=foo', username => 'myusername', password => 'mypassword', options => { 'pg_enable_utf8' => 1, AutoCommit => 0 }, helper => 'db', }; Pero entonces donde doy de alta la ip del server ? En cualquier caso, lo he probado y al arrancar la app casca diciendome que no puede encontar el metodo prepare para db .-O my $sth = db->prepare('SELECT * FROM hosts'); Can't locate object method "prepare" via package "db" Estoy un poco perdido verdad ? .-( Alguna web o enlace que lo expliquen como en los webcasts, o en las guias de la web, algo asi para torpes .-) Propicias noches Javi ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From tovar.nelo en gmail.com Tue Sep 27 15:21:56 2011 From: tovar.nelo en gmail.com (Nelo R. Tovar) Date: Tue, 27 Sep 2011 17:51:56 -0430 Subject: [Madrid-pm] Ayuda con mojolicoius In-Reply-To: References: Message-ID: Saludos. El 27 de septiembre de 2011 17:33, estenole estesile escribió: > > > Hola lista ! > > en su dia estuve preguntandoos sobre perl dancer, y ya me hablasteis de > mojolicious. La cosa qes que estoy probandolo para hacerme una app > pequeñita > en ::Lite, pero estoy atascado con la conexion a la bbdd. He mirado en la > web, documentacion, google, cpan, pero no me que da claro. > > Tengo un ej de codigo en el que comentan que para usarla habria que usar > esto dentro del codigo. > > plugin database => > { dsn => 'dbi:Pg:dbname=foo', > username => 'myusername', > password => 'mypassword', > options => { 'pg_enable_utf8' => 1, AutoCommit => 0 }, > helper => 'db', > }; > > Pero entonces donde doy de alta la ip del server ? En cualquier caso, lo > El host de la base de datos lo colocas en el dns: dsn => 'dbi:Pg:dbname=foo;host=ip_del_servidor_de_base_de_datos', > he probado y al arrancar la app casca diciendome que no puede encontar > el metodo prepare para db .-O > > my $sth = db->prepare('SELECT * FROM hosts'); > Can't locate object method "prepare" via package "db" > > Estoy un poco perdido verdad ? .-( Alguna web o enlace que lo expliquen > como en los webcasts, o en las guias de la web, algo asi para torpes .-) > > Propicias noches > Javi > > _______________________________________________ > Madrid-pm mailing list > Madrid-pm en pm.org > http://mail.pm.org/mailman/listinfo/madrid-pm > -- Nelo R. Tovar ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From estenole en gmail.com Tue Sep 27 15:49:19 2011 From: estenole en gmail.com (estenole estesile) Date: Wed, 28 Sep 2011 00:49:19 +0200 Subject: [Madrid-pm] Ayuda con mojolicoius In-Reply-To: References: Message-ID: Genial, gracias ! Lo he probado y de refilon he encontrado esta pagina con algunos ejemplos utiles .-) https://github.com/kraih/mojo/wiki/Hypnotoad-prefork-web-server Javi El 28 de septiembre de 2011 00:21, Nelo R. Tovar escribió: > Saludos. > > El 27 de septiembre de 2011 17:33, estenole estesile escribió: > > >> >> Hola lista ! >> >> en su dia estuve preguntandoos sobre perl dancer, y ya me hablasteis de >> mojolicious. La cosa qes que estoy probandolo para hacerme una app >> pequeñita >> en ::Lite, pero estoy atascado con la conexion a la bbdd. He mirado en la >> web, documentacion, google, cpan, pero no me que da claro. >> >> Tengo un ej de codigo en el que comentan que para usarla habria que usar >> esto dentro del codigo. >> >> plugin database => >> { dsn => 'dbi:Pg:dbname=foo', >> username => 'myusername', >> password => 'mypassword', >> options => { 'pg_enable_utf8' => 1, AutoCommit => 0 }, >> helper => 'db', >> }; >> >> Pero entonces donde doy de alta la ip del server ? En cualquier caso, lo >> > > El host de la base de datos lo colocas en el dns: > dsn => 'dbi:Pg:dbname=foo;host=ip_del_servidor_de_base_de_datos', > > >> he probado y al arrancar la app casca diciendome que no puede encontar >> el metodo prepare para db .-O >> >> my $sth = db->prepare('SELECT * FROM hosts'); >> Can't locate object method "prepare" via package "db" >> >> Estoy un poco perdido verdad ? .-( Alguna web o enlace que lo expliquen >> como en los webcasts, o en las guias de la web, algo asi para torpes .-) >> >> Propicias noches >> Javi >> >> _______________________________________________ >> Madrid-pm mailing list >> Madrid-pm en pm.org >> http://mail.pm.org/mailman/listinfo/madrid-pm >> > > > > -- > Nelo R. Tovar > > _______________________________________________ > 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: