Hi all,
this is a simple search code :
my $msg = $ad->search(
base => "ou=$base,dc=Univ-R,dc=local"
, filter => '(objectClass=user)'
, attrs => [ qw( description cn ) ]
, callback => sub {
my ( $msg , $r ) = @_;
if ( $msg->code ) {
die 'E:' , $msg->error , "\n";
}
if ( $r->isa('Net::LDAP::Entry') ) {
print 'O:' , $r->dn , "\n";
} else {
print 'W:' , ref($r) , "\n";
}
$msg->pop_entry;
}
);
This will cause :
Deep recursion on subroutine "Net::LDAP::Message::code" at s.pl line 46,
<DATA> line 225.
E:Protocol Error
i've seen that in /Net/LDAP/Message.pm
43 $self->sync unless exists $self->{resultCode};
Message->code calls Message->sync calls LDAP->sync calls LDAP->_recvresp
calls Message->code.
with SimpleTrace :
Net::LDAP::Search::decode(/usr/share/perl5/Net/LDAP/Search.pm:52)
at Net::LDAP::_recvresp(/usr/share/perl5/Net/LDAP.pm:792)
at Net::LDAP::sync(/usr/share/perl5/Net/LDAP.pm:696)
at
Net::LDAP::Message::sync(/usr/share/perl5/Net/LDAP/Message.pm:124)
at
Net::LDAP::Message::code(/usr/share/perl5/Net/LDAP/Message.pm:43)
at main::__ANON__(enseignants.pl:46)
at
Net::LDAP::Search::decode(/usr/share/perl5/Net/LDAP/Search.pm:52)
at Net::LDAP::_recvresp(/usr/share/perl5/Net/LDAP.pm:792)
at Net::LDAP::sync(/usr/share/perl5/Net/LDAP.pm:696)
at
Net::LDAP::Message::sync(/usr/share/perl5/Net/LDAP/Message.pm:124)
at
Net::LDAP::Message::code(/usr/share/perl5/Net/LDAP/Message.pm:43)
When I dump $self, i got :
$VAR1 = bless( {
'parent' => bless( {
'net_ldap_version' => 3,
'net_ldap_debug' => 0,
'net_ldap_socket' => bless(
\*Symbol::GEN0, 'IO::Socket::SSL' ),
'net_ldap_host' => 'another',
'net_ldap_uri' => 'ldaps://another',
'net_ldap_resp' => {},
'net_ldap_mesg' => {
'2' => $VAR1
},
'net_ldap_async' => 0,
'net_ldap_refcnt' => 1
}, 'Net::LDAP' ),
...
so $self->{parent}->{net_ldap_mesg} eq $self ... that can be the problem !
I think that's the bug but i'm not skilled enought to show you a correct
patch. Peraps the bug is in my own script. hope that helps anyway.
regards
mc