Hello,
I have a problem with some code I try to run. I have adapted code that run perfectly some time (=years) ago and now it freezes.
I am running perl 5.8.3 on Mandrake with openldap 2.1.30 and perl-ldap 0.32.
The code looks like this :
--------------------------- my $mesg = $e->update($ldap); if ($mesg->is_error) { # manage error } ---------------------------
where $ldap is a correctly bound (with root privileges) ldap handler and $e is an entry searched in the directory and where some attributes have been replaced/deleted by user interaction. The old entry dump is :
--------------------------- dn:dc=example,dc=com
ou: example2 objectClass: dcobject organizationalUnit dc: example ---------------------------
and the new entry dump is :
--------------------------- dn:dc=example,dc=com
objectClass: dnsdomain dc: example.com ---------------------------
The stack trace where the program hangs is :
---------------------------
Convert::ASN1::asn_read(/usr/lib/perl5/vendor_perl/5.8.1/Convert/ASN1/IO.pm:198):
198: READ_ERR:
199: $@ = "I/O Error $! " . CORE::unpack("H*",$_[1]);
DB<1> T
$ = Convert::ASN1::asn_read(ref(IO::Socket::INET), '') called from file `/usr/lib/perl5/site_perl/5.8.3/Net/LDAP.pm' line 758
$ = Net::LDAP::_recvresp(ref(Net::LDAP), 7) called from file `/usr/lib/perl5/site_perl/5.8.3/Net/LDAP.pm' line 695
$ = Net::LDAP::sync(ref(Net::LDAP), 7) called from file `/usr/lib/perl5/site_perl/5.8.3/Net/LDAP.pm' line 739
$ = Net::LDAP::_sendmesg(ref(Net::LDAP), ref(Net::LDAP::Modify)) called from file `/usr/lib/perl5/site_perl/5.8.3/Net/LDAP.pm' line 547
$ = Net::LDAP::modify('dn', ref(Net::LDAP::Entry), 'changes', ref(ARRAY), 'callback', ref(CODE)) called from file `/usr/lib/perl5/site_perl/5.8.3/Net/LDAP/Entry.pm' line 252
$ = Net::LDAP::Entry::update(ref(Net::LDAP::Entry), ref(Net::LDAP)) called from file `./oladm2.pl' line 821
$ = OLAdm::LDAPWindow::on_update(ref(Gtk2::Button), ref(OLAdm::LDAPWindow)) called from file `./oladm2.pl' line 1077
$ = eval {...} called from file `./oladm2.pl' line 1077
---------------------------
and the debug output of openldap is :
---------------------------
Sep 28 22:23:24 geri slapd[4790]: daemon: activity on 1 descriptors
Sep 28 22:23:24 geri slapd[4790]: daemon: activity on:
Sep 28 22:23:24 geri slapd[4790]: 12r
Sep 28 22:23:24 geri slapd[4790]:
Sep 28 22:23:24 geri slapd[4790]: daemon: read activity on 12
Sep 28 22:23:24 geri slapd[4790]: connection_get(12)
Sep 28 22:23:24 geri slapd[4790]: connection_get(12): got connid=0
Sep 28 22:23:24 geri slapd[4790]: connection_read(12): checking for input on id=0
Sep 28 22:23:24 geri slapd[4790]: ber_get_next on fd 12 failed errno=11 (Resource temporarily unavailable)
Sep 28 22:23:24 geri slapd[4790]: daemon: select: listen=6 active_threads=0 tvp=NULL
Sep 28 22:23:24 geri slapd[4790]: daemon: select: listen=7 active_threads=0 tvp=NULL
Sep 28 22:23:24 geri slapd[4790]: daemon: select: listen=8 active_threads=0 tvp=NULL
Sep 28 22:23:24 geri slapd[4790]: daemon: select: listen=9 active_threads=0 tvp=NULL
---------------------------
When I set the debug to 3 just before the update, an error occurs :
--------------------------- Net::LDAP=HASH(0x833fee8) sending:
*** unhandled exception in callback:
*** substr outside of string at /usr/lib/perl5/vendor_perl/5.8.1/Convert/ASN1/Debug.pm line 33, <DATA> line 422.
*** ignoring at ./oladm2.pl line 1079, <DATA> line 422.
---------------------------
and the update is not done. Next time I try to update the program hangs.
I have had some problems of the same kind when I tried to search in the directory with a base string encoded in utf8 (got by reading a value in an entry field of Gtk2 with Gtk2-Perl). Same symptoms, same output in the logs for openldap and same stack trace in perl debugger.
I don't understand what's wrong. Please help...
Thank you.
Regards,
-- \^/ -/ O \---------------------------------------- | |/ \| Alexandre (Midnite) Jousset | -|___|----------------------------------------