<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>