<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Vale, aqui va con un poco mas de detalle:<br>
<br>
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Ã.<br>
<br>
Para hacer un volcado del array de configuracion:<br>
<br>
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);"<br>
<br>
Para volcar $mesg y $ldap puedes hacerlo de la misma forma:<br>
<br>
print Dumper($mesg);<br>
print Dumper($ldap);<br>
<br>
Data::Dumper entiende los formatos de las referencias y te dará la
informacion que buscas.<br>
<br>
Slds<br>
Jorge<br>
<br>
El 20/09/11 14:18, David Barrientos J escribió:
<blockquote
cite="mid:CADC4WV7yU2Dwq4RyZh=iyGKG-+fkOzQqsYtqnf7VG3d+8CDKeA@mail.gmail.com"
type="cite">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:<br>
<br>
Bareword "LDAP_CONTROL_PAGED" not allowed while "strict subs" in
use<br>
<br>
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:<br>
<br>
 @args tiene el contenido que debe tener, lo he comprobado sobre
la ejecución, ¿Te refieres a esto?<br>
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:<br>
<br>
Net::LDAP::Search=HASH(0xdbe064)<br>
Net::LDAP=HASH(0xd391bc)<br>
<br>
<br>
<div class="gmail_quote">El 20 de septiembre de 2011 13:18, <span
dir="ltr"><<a moz-do-not-send="true"
href="mailto:madrid-pm-request@pm.org">madrid-pm-request@pm.org</a>></span>
escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex;">EnvÃe los
mensajes para la lista Madrid-pm a<br>
    <a moz-do-not-send="true"
href="mailto:madrid-pm@pm.org">madrid-pm@pm.org</a><br>
<br>
Para subscribirse o anular su subscripción a través de la WEB<br>
    <a moz-do-not-send="true"
href="http://mail.pm.org/mailman/listinfo/madrid-pm"
target="_blank">http://mail.pm.org/mailman/listinfo/madrid-pm</a><br>
<br>
O por correo electrónico, enviando un mensaje con el texto
"help" en<br>
el asunto (subject) o en el cuerpo a:<br>
    <a moz-do-not-send="true"
href="mailto:madrid-pm-request@pm.org">madrid-pm-request@pm.org</a><br>
<br>
Puede contactar con el responsable de la lista escribiendo a:<br>
    <a moz-do-not-send="true"
href="mailto:madrid-pm-owner@pm.org">madrid-pm-owner@pm.org</a><br>
<br>
Si responde a algún contenido de este mensaje, por favor,
edite la<br>
linea del asunto (subject) para que el texto sea mas
especifico que:<br>
"Re: Contents of Madrid-pm digest...". Además, por favor,
incluya en<br>
la respuesta sólo aquellas partes del mensaje a las que está<br>
respondiendo.<br>
<br>
<br>
Asuntos del dÃa:<br>
<br>
 1. consulta masiva a directorio activo (David Barrientos J)<br>
 2. Re: consulta masiva a directorio activo (Jorge Gonzalez)<br>
<br>
<br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Tue, 20 Sep 2011 12:43:22 +0200<br>
From: David Barrientos J <<a moz-do-not-send="true"
href="mailto:bass.bj@gmail.com">bass.bj@gmail.com</a>><br>
To: <a moz-do-not-send="true" href="mailto:madrid-pm@pm.org">madrid-pm@pm.org</a><br>
Subject: [Madrid-pm] consulta masiva a directorio activo<br>
Message-ID:<br>
    <CADC4WV70DHVrY70J=ABfvp4+oeM=<a
moz-do-not-send="true"
href="mailto:cmdS1nLJFsO9g8Lw1hYf2w@mail.gmail.com">cmdS1nLJFsO9g8Lw1hYf2w@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="iso-8859-1"<br>
<br>
Hola! Os escribo para ver si alguien me puede echar una mano:
Necesito hacer<br>
un script que descargue de forma masiva ciertos datos de todos
los usuarios<br>
de un directorio activo de microsoft. Mi script se ejecuta
asi:<br>
<br>
./<a moz-do-not-send="true" href="http://script.pl"
target="_blank">script.pl</a> [fichero_configuracion]
[dominio]<br>
<br>
Primero, lee del fichero de configuracion sus dos lineas:
Usuario, y<br>
contraseña. Despues es donde viene el problema. En la parte de
la<br>
autenticación ( la linea que pongo en negrita ) no entra en el
bucle, no<br>
consulta ningun dato.<br>
Esto es muy raro, el código de la función busca() , si lo pego
en otro<br>
script nuevo, sin funciones, y con la password y usuario en el
fichero,<br>
funciona todo perfecto. Tal y como esta.<br>
Pero, al leer usuario y pass de un fichero y usar funciones,
falla en la<br>
consulta. Y he comprobado haciendo un print las variables
usuario, password,<br>
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<br>
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<br>
configuracion $!";<br>
open REPORTE, q[>], "reporteee.txt" or die "No puedo
escribir el fichero<br>
$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>
   * while(my $entry = $mesg->shift_entry()){* ## Aqui
no entra<br>
    say "Entre en while";<br>
      my $lastLogonTimestamp =<br>
$entry->get_value('lastLogonTimestamp');<br>
      $lastLogonTimestamp =
&conviertefecha($lastLogonTimestamp);<br>
      my $msdsuaccountctrl =<br>
$entry->get_value('msds-user-account-control-computed');<br>
      my $departmento =
$entry->get_value('department');<br>
      say REPORTE<br>
"$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>
------------ próxima parte ------------<br>
Se ha borrado un adjunto en formato HTML...<br>
URL: <<a moz-do-not-send="true"
href="http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/636be65f/attachment-0001.html"
target="_blank">http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/636be65f/attachment-0001.html</a>><br>
<br>
------------------------------<br>
<br>
Message: 2<br>
Date: Tue, 20 Sep 2011 13:18:18 +0200<br>
From: Jorge Gonzalez <<a moz-do-not-send="true"
href="mailto:jorge.gonzalez@daikon.es">jorge.gonzalez@daikon.es</a>><br>
To: <a moz-do-not-send="true" href="mailto:madrid-pm@pm.org">madrid-pm@pm.org</a><br>
Subject: Re: [Madrid-pm] consulta masiva a directorio activo<br>
Message-ID: <<a moz-do-not-send="true"
href="mailto:4E78767A.1050208@daikon.es">4E78767A.1050208@daikon.es</a>><br>
Content-Type: text/plain; charset="utf-8"; Format="flowed"<br>
<br>
En la linea previa a esa en la que no entras, hay una llamada
a<br>
$ldap->search. Yo volcarÃa los argumentos de esa llamada
para asegurarme<br>
de que realmente la llamada a $ldap->search devuelve algo.
Quiza no<br>
entras porque la busqueda no devuelve resultados.<br>
<br>
También te recomiendo que uses strict al principio del script,
me ha<br>
parecido ver alguna variable no inicializada por ahi...<br>
<br>
Slds<br>
J.<br>
<br>
El 20/09/11 12:43, David Barrientos J escribió:<br>
> Hola! Os escribo para ver si alguien me puede echar una
mano: Necesito<br>
> hacer un script que descargue de forma masiva ciertos
datos de todos<br>
> los usuarios de un directorio activo de microsoft. Mi
script se<br>
> ejecuta asi:<br>
><br>
> ./<a moz-do-not-send="true" href="http://script.pl"
target="_blank">script.pl</a> <<a moz-do-not-send="true"
href="http://script.pl" target="_blank">http://script.pl</a>>
[fichero_configuracion] [dominio]<br>
><br>
> Primero, lee del fichero de configuracion sus dos lineas:
Usuario, y<br>
> contraseña. Despues es donde viene el problema. En la
parte de la<br>
> autenticación ( la linea que pongo en negrita ) no entra
en el bucle,<br>
> no consulta ningun dato.<br>
> Esto es muy raro, el código de la función busca() , si lo
pego en otro<br>
> script nuevo, sin funciones, y con la password y usuario
en el<br>
> fichero, funciona todo perfecto. Tal y como esta.<br>
> Pero, al leer usuario y pass de un fichero y usar
funciones, falla en<br>
> la consulta. Y he comprobado haciendo un print las
variables usuario,<br>
> 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<br>
> 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<br>
> de configuracion $!";<br>
> open REPORTE, q[>], "reporteee.txt" or die "No puedo
escribir el<br>
> 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>
> *while(my $entry = $mesg->shift_entry()){* ## Aqui no
entra<br>
> Â Â Â Â say "Entre en while";<br>
> Â Â Â Â Â Â my $lastLogonTimestamp =<br>
> $entry->get_value('lastLogonTimestamp');<br>
> Â Â Â Â Â Â $lastLogonTimestamp =
&conviertefecha($lastLogonTimestamp);<br>
> Â Â Â Â Â Â my $msdsuaccountctrl =<br>
>
$entry->get_value('msds-user-account-control-computed');<br>
> Â Â Â Â Â Â my $departmento =
$entry->get_value('department');<br>
> Â Â Â Â Â Â say REPORTE<br>
> "$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>
><br>
><br>
> _______________________________________________<br>
> Madrid-pm mailing list<br>
> <a moz-do-not-send="true" href="mailto:Madrid-pm@pm.org">Madrid-pm@pm.org</a><br>
> <a moz-do-not-send="true"
href="http://mail.pm.org/mailman/listinfo/madrid-pm"
target="_blank">http://mail.pm.org/mailman/listinfo/madrid-pm</a><br>
------------ próxima parte ------------<br>
Se ha borrado un adjunto en formato HTML...<br>
URL: <<a moz-do-not-send="true"
href="http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/e77ad5fb/attachment.html"
target="_blank">http://mail.pm.org/pipermail/madrid-pm/attachments/20110920/e77ad5fb/attachment.html</a>><br>
<br>
------------------------------<br>
<br>
_______________________________________________<br>
Madrid-pm mailing list<br>
<a moz-do-not-send="true" href="mailto:Madrid-pm@pm.org">Madrid-pm@pm.org</a><br>
<a moz-do-not-send="true"
href="http://mail.pm.org/mailman/listinfo/madrid-pm"
target="_blank">http://mail.pm.org/mailman/listinfo/madrid-pm</a><br>
<br>
Fin de Resumen de Madrid-pm, Vol 57, EnvÃo 1<br>
********************************************<br>
</blockquote>
</div>
<br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Madrid-pm mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Madrid-pm@pm.org">Madrid-pm@pm.org</a>
<a class="moz-txt-link-freetext" href="http://mail.pm.org/mailman/listinfo/madrid-pm">http://mail.pm.org/mailman/listinfo/madrid-pm</a></pre>
</blockquote>
</body>
</html>