mod_perl ignoring changed to $ENV{{PATH}?

B

bwooster47

I've narrowed down to a simple script a problem where it looks like
when running under mod_perl, it does not support changes to the
$ENV{PATH} variable - it does require the assignment to avoid the
tainting, but then any assignment itself does not take effect - I
added /usr/local/bin to PATH, but am unable to execute commands in
that folder when running under mod_perl.

Could not find anything about this in the mod_perl web pages, but a
Usenet search seems to suggest that mod_perl only honors PerlSetEnv
PATH in config, and does not honor PATH changes in the script? That
does not sound right, what about the cases where a PATH change is
needed for some scripts only, so a global PerlSetEnv would be too
much.

Example - for testing, I copied /bin/echo to /usr/local/bin/echo, and
then ran this script - it runs fine when run under the shell, but when
run under Apache + mod_perl, it fails.

Script:
#!/usr/bin/perl -Tw

print "Content-type: text/plain\n\n";

$ENV{PATH} = "/bin:/usr/bin:/usr/local/bin:";
foreach ( "echo", "myecho", "/usr/local/bin/myecho") {
print "------ Testing command '$_'\n";
my $string = `$_ testing execution of '$_'`;
print " failed to execute '$_', \$? is $?/" . ($? >> 8) . " : $!
\n"
if ($? != 0);
print " \$string is: $string\n";
}

Shell output (perl -Tw script)
Content-type: text/plain

------ Testing command 'echo'
$string is: testing execution of echo

------ Testing command 'myecho'
$string is: testing execution of myecho

------ Testing command '/usr/local/bin/myecho'
$string is: testing execution of /usr/local/bin/myecho

Web page output - this fails to execute myecho without the path:
------ Testing command 'echo'
$string is: testing execution of echo

------ Testing command 'myecho'
failed to execute 'myecho', $? is 32512/127 :
$string is:
------ Testing command '/usr/local/bin/myecho'
$string is: testing execution of /usr/local/bin/myecho
 
I

ian.sillitoe

I've narrowed down to a simple script a problem where it looks like
when running undermod_perl, it does not support changes to the
$ENV{PATH} variable - it does require the assignment to avoid the
tainting, but then any assignment itself does not take effect - I
added /usr/local/bin to PATH, but am unable to execute commands in
that folder when running undermod_perl.

Could not find anything about this in themod_perlweb pages, but a
Usenet search seems to suggest thatmod_perlonly honors PerlSetEnv
PATH in config, and does not honor PATH changes in the script? That
does not sound right, what about the cases where a PATH change is
needed for some scripts only, so a global PerlSetEnv would be too
much.

Example - for testing, I copied /bin/echo to /usr/local/bin/echo, and
then ran this script - it runs fine when run under the shell, but when
run under Apache +mod_perl, it fails.

Script:
#!/usr/bin/perl -Tw

print "Content-type: text/plain\n\n";

$ENV{PATH} = "/bin:/usr/bin:/usr/local/bin:";
foreach ( "echo", "myecho", "/usr/local/bin/myecho") {
print "------ Testing command '$_'\n";
my $string = `$_ testing execution of '$_'`;
print " failed to execute '$_', \$? is $?/" . ($? >> 8) . " : $!
\n"
if ($? != 0);
print " \$string is: $string\n";

}

Shell output (perl -Tw script)
Content-type: text/plain

------ Testing command 'echo'
$string is: testing execution of echo

------ Testing command 'myecho'
$string is: testing execution of myecho

------ Testing command '/usr/local/bin/myecho'
$string is: testing execution of /usr/local/bin/myecho

Web page output - this fails to execute myecho without the path:
------ Testing command 'echo'
$string is: testing execution of echo

------ Testing command 'myecho'
failed to execute 'myecho', $? is 32512/127 :
$string is:
------ Testing command '/usr/local/bin/myecho'
$string is: testing execution of /usr/local/bin/myecho

This looks like a 'Taint' issue - I would check by running it without
the 'T' switch. If you want to use Taint (which you will) then you
could look at the perl5lib CPAN package which is Taint-safe

http://search.cpan.org/~nobull/perl5lib-1.02/lib/perl5lib.pm
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top