I have searched through all the web docs and Usenet, but not found
anything that suggests anything special has to be done in mod_perl
scripts that need to set $ENV{PATH}

My specific example is that I need to add /usr/local/bin to PATH, but
I''ve been unable to find a way to do this, looks like mod_perl
scripts execute the line that changes $ENV{PATH}, but when a qx()
back-tick command is executed, that command is executed under the
value of the original path. One lone posting on Usenet wondered
whether PerlSetEnv in Apache Config is the only way to fix this, but that
seems like a too big a hammer.

In case it helps, here's a simple test on Fedora FC7 system (more
version info at end):
#!/usr/bin/perl -Tw
print "Content-type: text/plain\n\n";

my $command = "basename";
foreach ( "/bin:", "/invalid/dir:" ) {
   $ENV{PATH} = $_;
   print "------ Testing command '$command', path $ENV{PATH}\n";
   my $string = `$command testing` || '';
   print "    failed to execute '$command', \$? is $?/" . ($? >> 8) . " : $!\n"
       if ($? != 0);
   print "    output \$string is: $string\n";
}

exit(0);
------------------------------------------------
When run from the command line, I get the correct output:
Content-type: text/plain

------ Testing command 'basename', path /bin:
   output $string is: testing

------ Testing command 'basename', path /invalid/dir:
[Wed Jan 16 17:13:39 2008] script.pl: Can't exec "basename": No such
file or directory at /home/cgi/script.pl line 12.
   failed to execute 'basename', $? is -1/16777215 : No such file or directory
   output $string is:
-------------------------------------------------------
But when I run this under Apache and mod_perl, I get this output -
/bin is still in the PATH even after removal:
------ Testing command 'basename', path /bin:
   output $string is: testing

------ Testing command 'basename', path /invalid/dir:
   output $string is: testing

-------------------------------------------------------
/perl-status output snippet:
Embedded Perl version v5.8.8 for Apache/2.2.6
Under the "perl-script" handler, the environment is:
   MOD_PERL = mod_perl/2.0.3
   MOD_PERL_API_VERSION = 2
   PATH = /sbin:/usr/sbin:/bin:/usr/bin

Any help appreciated!
[Please ignore one duplicate email if it shows up - sent before subscribed]

Reply via email to