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

Reply via email to