You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Stas Bekman <st...@stason.org> on 2003/03/01 02:31:07 UTC

Re: mp2 runs scripts as root?

Mark James wrote:
> Some of my scripts break when running under mp2 (cvs) because the UID
> is set as root rather than the Apache user (which for me is "web").
> The problem manifests with RCS file locking. Is there some switch
> to set so that I can run scripts as "web"?

Eh? Are you talking about 'make test' or installed mod_perl? If the former, 
use the latest cvs where this should work if the latter, modify httpd.conf.

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


Re: mp2 runs scripts as root?

Posted by Mark James <mr...@bigpond.net.au>.
Stas Bekman wrote:

> ...
> Well, actually this is not the case. It behaves exactly the same as in 
> modperl 1.0. You can use Env::C module (available from CPAN) to easily 
> debug this:
> ...
> In any case you probably want to rely on getpwuid($<), rather than 
> $ENV{USER} if applicable.

Unfortunately ci (RCS) uses the USER variable to determine lock
permissions for edits.

But using your Env::C::setenv to set USER instead of assigning to
$ENV{'USER'} allowed me to remove the ENV assigments from start-up.pl.
This'll make my package more turn-key.

Thanks again -- Mark



Re: mp2 runs scripts as root?

Posted by Stas Bekman <st...@stason.org>.
Mark James wrote:
> Stas Bekman wrote:
> 
>> Mark James wrote:
>>
>>> Some of my scripts break when running under mp2 (cvs) because the UID
>>> is set as root rather than the Apache user (which for me is "web").
>>> The problem manifests with RCS file locking. Is there some switch
>>> to set so that I can run scripts as "web"?
>>
>>
>> Eh? Are you talking about 'make test' or installed mod_perl? If the 
>> former, use the latest cvs where this should work if the latter, 
>> modify httpd.conf.
> 
> 
> The latter.  Turned out to be a caused by the perl ENV not being
> propogated to forked programs:
> http://perl.apache.org/docs/2.0/user/troubleshooting/troubleshooting.html#C_Libraries_Don_t_See_C__ENV__Entries_Set_by_Perl_Code 

Well, actually this is not the case. It behaves exactly the same as in modperl 
1.0. You can use Env::C module (available from CPAN) to easily debug this:

The following snippet prints the same under mp1 and mp2 (assuming that they 
are started under the same username)
print map { "Perl: $ENV{$_} C: " . Env::C::getenv($_) . "\n"}  qw(USER);
print "$< ", scalar getpwuid($<), "\n";

> Fixed by adding:
> 
> $ENV{'USER'} = 'web';
> $ENV{'LOGNAME'} = 'web';
> 
> to the start-up script.

Indeed. The point is that ENV is not passed from shell, you have to explicitly 
do that and this is an Apache thing. So you can do:

SetEnv USER web

or as you did, in perl.

In any case you probably want to rely on getpwuid($<), rather than $ENV{USER} 
if applicable.

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


Re: mp2 runs scripts as root?

Posted by Mark James <mr...@bigpond.net.au>.
Stas Bekman wrote:
> Mark James wrote:
> 
>> Some of my scripts break when running under mp2 (cvs) because the UID
>> is set as root rather than the Apache user (which for me is "web").
>> The problem manifests with RCS file locking. Is there some switch
>> to set so that I can run scripts as "web"?
> 
> Eh? Are you talking about 'make test' or installed mod_perl? If the 
> former, use the latest cvs where this should work if the latter, modify 
> httpd.conf.

The latter.  Turned out to be a caused by the perl ENV not being
propogated to forked programs:
http://perl.apache.org/docs/2.0/user/troubleshooting/troubleshooting.html#C_Libraries_Don_t_See_C__ENV__Entries_Set_by_Perl_Code

Fixed by adding:

$ENV{'USER'} = 'web';
$ENV{'LOGNAME'} = 'web';

to the start-up script.

Thanks for the reply -- Mark