In slapd back_perl backend if I "use" a module I get "unresolved symbol" errors

Asked by Roberto Maurizzi

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 and options.

Am I missing something obvious, or there's been a misalignment in the releases of slapd and perl packages?

Thanks in advance,
   Roberto Maurizzi

Question information

Language:
English Edit question
Status:
Expired
For:
openldap Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Roberto Maurizzi (r-maurizzi) said :
#1

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
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 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

Revision history for this message
Launchpad Janitor (janitor) said :
#2

This question was expired because it remained in the 'Open' state without activity for the last 15 days.