mod_perl ignoring changed to $ENV{{PATH}?

Discussion in 'Perl Misc' started by bwooster47, Jan 15, 2008.

  1. bwooster47

    bwooster47 Guest

    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
     
    bwooster47, Jan 15, 2008
    #1
    1. Advertising

  2. bwooster47

    Guest

    On Jan 15, 3:30 pm, bwooster47 <> wrote:
    > 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
     
    , Jan 29, 2008
    #2
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    1
    Views:
    713
    Rosanne
    Oct 11, 2005
  2. Ankit Mehta
    Replies:
    1
    Views:
    1,478
    Simon Brooke
    Sep 29, 2006
  3. TDR
    Replies:
    3
    Views:
    183
    Daniel Berger
    Aug 31, 2007
  4. R. Sherwin Kartick

    embedded perl path $ENV{PATH} problem

    R. Sherwin Kartick, Sep 22, 2004, in forum: Perl Misc
    Replies:
    0
    Views:
    193
    R. Sherwin Kartick
    Sep 22, 2004
  5. Replies:
    2
    Views:
    463
    Big and Blue
    Jan 25, 2006
Loading...

Share This Page