On Feb 12, 12:09 pm, Malcolm Tredinnick <malc...@pointy-stick.com>
wrote:
> On Tue, 2009-02-10 at 10:56 +0000, Alan wrote:
> >  Hi list,
>
> > My problem is that: since when using apache + mod_wsgi I got a neutral
> > env for my server (e.g. PATH=/usr/bin:/bin) but in the end what I need
> > is all the envs that is in a particular $HOME/.bashrc file in order to
> > when server spawns a program (that may not be in the neutral PATH and
> > besides need some extra env parameters) it can run.
>
> > So what I was trying is to find a python module or code that would do
> > something like ". $HOME/basrc" inside my python code and before
> > executing my binary program in order to pass to it the particular
> > user's environment.
>
> The concept of $HOME or "user" doesn't really make sense for Apache.
> Well, it does, but the user running the Apache process will typically
> not have a home directory (or even be a login-enabled account). That's
> one clue that this probably isn't a neat solution.

For Apache when using mod_python or embedded mode of mod_wsgi, very
true, $HOME can be various things, as can variables such as $USER,
$USERNAME and $LOGNAME.

When Apache is started as part of operating system startup scripts at
boot time, then they would normally reflect the environment of the
'root' user.

If Apache is started using 'sudo' then what they are will depend upon
whether or not the -H option is supplied to 'sudo'. If -H option is
used, then they will again be that for 'root' user. If -H option is
not used, then they would normally correspond to that of the user who
ran 'sudo'.

In other words, quite unpredictable and not something to be relied up.

It is this reason why Python egg cache location will not always work
properly under Apache embedded mode, as it could be calculated to be
under 'root' account, in which case directory not creatable or
writable as Apache user, or it could be that of the user who ran
'sudo'. In the latter everything may appear to work because they have
done stuff by hand to populate the cache, but when they reboot and it
decides to use root Python egg cache instead, everything breaks.

For Apache when using mod_wsgi daemon mode, $HOME ill be correct as
mod_wsgi forces it to be so. This isn't done for embedded mode as it
is a shared environment with other Apache modules and bad practice to
make decision that can set it right.

In mod_wsgi 2.X, $USER, $USERNAME or $LOGNAME will be still be wrong.
This has been fixed for mod_wsgi 3.0 though. Consequence of it being
wrong is that some Python packages can screw up because they believe
this value rather than determine what effective uid of process it.
Luckily only seen it causing a problem is logged error messages. For
example, if Trac has permissions problem it uses these variables to
say who it thinks the process runs as, which will not actually be true
and is quite confusing when looking at messages.

Anyway, I would agree with Malcolm as far as not trying to rely on
user shell environment. Too easy for a slight change in user
environment to inadvertantly break your web application.

Graham


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to