** Description changed: In slapd back_perl backend if I "use" a module I get "unresolved symbol" errors. I'm using slapd-2.2.26-5ubuntu3.1 on Edgy. Everything works if I don't use modules. For example if in my module i "use DBI", running "slapd -d 0" I get: slapd: symbol lookup error: /usr/lib/perl5/auto/DBI/DBI.so: undefined symbol: Perl_Tstack_sp_ptr if I instead "use POSIX" as in the SampleLDAP.pm module given in the openldap sources, i get: Error Can't load '/usr/lib/perl/5.8/auto/POSIX/POSIX.so' for module POSIX: /usr/lib/perl/5.8/auto/POSIX/POSIX.so: undefined symbol: PL_sig_name at /usr/lib/perl/5.8/XSLoader.pm line 70. at /usr/lib/perl/5.8/POSIX.pm line 26 Searching for documentation, I've found this article http://www.samag.com/documents/s=9370/sam0505g/0505g.htm that stresses the importance that both openldap and perl are compiled with the same compiler version and options. Am I missing something obvious, or there's been a misalignment in the releases of slapd and perl packages? To reproduce the error: define a perl backend "db" adding the following lines to the end of /etc/ldap/slapd.conf: - module_load back_perl + moduleload back_perl database perl suffix "dc=perl,dc=example,dc=com" perlModulePath /etc/perl/SampleLDAP.pm perlModule SampleLDAP Create a file with the following lines in /etc/perl/SampleLDAP.pm package SampleLDAP; use POSIX; sub new { my $class = shift; my $this = {}; bless $this, $class; print STDERR "Posix Var " . BUFSIZ . " and " . FILENAME_MAX . "\n"; return $this; } sub init { print STDERR "Here in init\n"; return 0; } 1; Now you should start slapd: sudo slapd You'll get: Error Can't load '/usr/lib/perl/5.8/auto/POSIX/POSIX.so' for module POSIX: /usr/lib/perl/5.8/auto/POSIX/POSIX.so: undefined symbol: PL_sig_name at /usr/lib/perl/5.8/XSLoader.pm line 70. at /usr/lib/perl/5.8/POSIX.pm line 26 Compilation failed in require at /etc/perl/SampleLDAP.pm line 2. BEGIN failed--compilation aborted at /etc/perl/SampleLDAP.pm line 2. Compilation failed in require at (eval 2) line 1. BEGIN failed--compilation aborted at (eval 2) line 1. Using /etc/init.d/slapd start does NOT print the message because the output of start-stop-daemon is put in a $reason variable that's not printed, logged or evaluated (script bug?) but if you add echo $reason to the script you get the same error. Changing the "use"d module changes the situation only slightly, for example substituting "use POSIX" with "use DBI" you get: slapd: symbol lookup error: /usr/lib/perl5/auto/DBI/DBI.so: undefined symbol: Perl_Tstack_sp_ptr I'd more than willing to perform more tests if you can suggest some. Ciao, Roberto Maurizzi
-- perl backend can't use dynamically loaded modules (DBI, POSIX...) https://launchpad.net/bugs/90812 -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
