in reply to Re: adding libs in a setuid-perl script
in thread adding libs in a setuid-perl script

I've tried that without success

. When I look at the error messages, the error comes from executing /usr/local/test/lib/perl5/5.12.1/sun4-solaris/ at line 200 :

my $libref = dl_load_file($file, $module->dl_load_flags) or croak("Can't load '$file' for module $module: ".dl_error());

where it tries to load /usr/local/test/lib/perl5/site_perl/5.12.1/Sybase/ This files starts with the following code where the last line is on line 19 (the line mentioned in the error).

package Sybase::Simple; use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); require Exporter; require AutoLoader; use Carp; use Sybase::CTlib qw(:DEFAULT !ct_callback);

This code generates error :

Can't load '/usr/local/test/lib/perl5/site_perl/5.12.1/sun4-solaris/auto/Sybase/CTlib/' for module Sybase::CTlib: perl: fatal: open failed is the first library tries to open :

$ ldd /usr/local/test/lib/perl5/site_perl/5.12.1/sun4-solaris/auto/Syb +ase/CTlib/ => /local/sybase/sdk1251/OCS-12_5/lib// => /local/sybase/sdk1251/OCS-12_5/lib// => /local/sybase/sdk1251/OCS-12_5/lib// => /local/sybase/sdk1251/OCS-12_5/lib//libcomn.s +o => /local/sybase/sdk1251/OCS-12_5/lib//libintl.s +o => /local/sybase/sdk1251/OCS-12_5/lib// => /lib/ => /lib/ => /lib/ => /lib/ => /lib/ => /lib/ => /lib/ => /lib/ => /lib/ => /lib/ /platform/SUNW,Sun-Fire-V490/lib/ /platform/SUNW,Sun-Fire-V490/lib/

I've added 'use lib' statements for the directories mentioned in the error messages. My script now looks like :

#!/usr/local/test/bin/perl use lib "/usr/local/test/lib/perl5/site_perl/5.12.1"; use lib "/usr/local/test/lib/perl5/site_perl/5.12.1/Sybase"; use lib "/usr/local/test/lib/perl5/5.12.1/sun4-solaris"; use lib '/local/sybase/sdk1251/OCS-12_5/lib'; use lib "/usr/local/test/lib/perl5/site_perl/5.12.1/sun4-solaris/auto/ +Sybase/CTlib"; $ENV{'LD_LIBRARY_PATH'} = '/local/sybase/sdk1251/OCS-12_5/lib:/lib:/us +r/openwin/lib:/usr/ccs/l\ ib:/usr/local/lib/perl5/site_perl/5.12.1/sun4-solaris/auto/Sybase/CTli +b'; use Sybase::Simple; exit;

I don't know what else to do, I can try to statically link, but would prefer a more general solution. many thanks, Luc.

Replies are listed 'Best First'.
Re^3: adding libs in a setuid-perl script
by JavaFan (Canon) on Aug 30, 2010 at 15:11 UTC
    If you need that setting of LD_LIBRARY_PATH, it won't have any effect, as you set it at run time, while the use happens at compile time. Try this instead:
    BEGIN { $ENV{LD_LIBRARY_PATH} = "...your path goes here..."; }