Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re: Specifying a shell for use with Backticks

by derby (Abbot)
on Apr 11, 2006 at 19:27 UTC ( #542645=note: print w/replies, xml ) Need Help??

in reply to Specifying a shell for use with Backticks

There's no way of overriding backtick (or qx) that I know of ... and by default it should be using some bourne shell variant not csh (but I guess it all depends on what type of wackiness your system was in when perl was built - I've seen plenty of systems where sh was really csh). I think you're going to be better off with fork and exec -- modified from the code in perlsec:

#!/usr/bin/perl use English '-no_match_vars'; my $content = mysystem( "/bin/ls", "-l" ); print $content; sub mysystem { my @args = @_; my $pid; my $content; die "Can't fork: $!" unless defined($pid = open(KID, "-|")); if( $pid ) { # parent while (<KID>) { $content .= $_; } close KID; $content; } else { my @temp = ($EUID, $EGID); my $orig_uid = $UID; my $orig_gid = $GID; $EUID = $UID; $EGID = $GID; # Drop privileges $UID = $orig_uid; $GID = $orig_gid; # Make sure privs are really gone ($EUID, $EGID) = @temp; die "Can't drop privileges" unless $UID == $EUID && $GID eq $EGID; $ENV{PATH} = "/bin:/usr/bin"; # Minimal PATH. # Consider sanitizing the environment even more. exec @args or die "can't exec: $!"; } }
Since no shell is being used, just ensure you have your environment the way you want before calling the code (and please beef this sample up ... it does no error checking nor return value checking).


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://542645]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (2)
As of 2021-04-12 04:26 GMT
Find Nodes?
    Voting Booth?

    No recent polls found