Hi again,

I've run into a problem that I can't quite understand.

I've created an HTML form that invokes a CGI script as form-action,
that works well.  I have a collection of LDAP related functions in a
package that I use from the CGI script - this works to.  ldapconnect()
works, parseldapoutput() works ...

One of the functions in the package outputs another form (the list of allowed
attributes to search for) whose form-action is yet another script that
then uses more of the first scripts functions to (or so I thought)
do an LDAP search on the fields selected from the form.  When I
invoke search_it from script2 I get the following error in my apache log:

Can't call method "search" on an undefined value at ldap2csv.pl line
118, <DATA> line 225.

I can't for the life of me figure out which value it's complaining about as
uninitialised ... I've verified with a print that the parameter passed is valid
and has the list of attributes in it;  everything else is constant.

from script2:
&ldapcsv::print_header();

read( STDIN, $data, $ENV{"CONTENT_LENGTH"});
@pairs = split( "&", $data);
#print "Anything here at all? $data <BR>\n";
foreach $pair (@pairs) {
 $name=""; $value="";
#  print "<BR>SPACER<BR> $#pairs <BR>\n";
 $pair =~ tr/+/ /;
 $pair =~ s/%(..)/pack("C", hex($1))/eg;
 $pair =~ m/(\w+)(?:=)?(.+)/    ;
 if( defined $2 && $2 ne "=" ) {
   $name=$1;
   $value=$2;
   chomp $name;
   chomp $value;
   if ( $name =~ /Attributes/ && defined $query ){
     $query .= ", '".$value."'"
   } else {
     $query = "'".$value."'"
   }
 }
}
print "<BR>Final: $query <BR>\n";

&ldapcsv::search_it( $query );


script1:
package ldapcsv;
use strict;
use Net::LDAP;
use Net::LDAP::Entry;
use Net::LDAP::Schema;
.
.
.
sub search_it {
 my ( $param ) = @_ ;
 print "<BR>In search_it: $param  <BR>\n";
 $mesg = $ldap->search(
   base      => 'ou=people,ou=users,o=ORG',
   filter    => '(cn=*)',
   scope     => 'sub',
   attrs     => [ "$param" ],
   timelimit => 90
 );
 if ( $mesg->code == 0 ) {
   my @entry = $mesg->entries;
   if (@entry) {
     foreach my $entr (@entry) {
       my $attr;
       foreach $attr ( sort $entr->attributes ) {
         print "  $attr : ", $entr->get_value($attr), "\n";
       }
     }
   }
 }
}


Where to look, what (else) to try?


Cheers,
Andrej

Reply via email to