Fixed #6994 -- For fastcgi, set a more sensible default umask.

Also allow the umask value to be customised. Thanks, Antonis Christofides.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@7800 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2008-06-30 11:22:41 +00:00
parent abcf1cb36d
commit ca5918e8ff
3 changed files with 10 additions and 4 deletions

View File

@ -94,6 +94,7 @@ answer newbie questions, and generally made Django that much better:
Sengtha Chay <sengtha@e-khmer.com> Sengtha Chay <sengtha@e-khmer.com>
ivan.chelubeev@gmail.com ivan.chelubeev@gmail.com
Bryan Chow <bryan at verdjn dot com> Bryan Chow <bryan at verdjn dot com>
Antonis Christofides <anthony@itia.ntua.gr>
Michal Chruszcz <troll@pld-linux.org> Michal Chruszcz <troll@pld-linux.org>
Can Burak Çilingir <canburak@cs.bilgi.edu.tr> Can Burak Çilingir <canburak@cs.bilgi.edu.tr>
Ian Clelland <clelland@gmail.com> Ian Clelland <clelland@gmail.com>

View File

@ -40,6 +40,7 @@ Optional Fcgi settings: (setting=value)
workdir=DIRECTORY change to this directory when daemonizing. workdir=DIRECTORY change to this directory when daemonizing.
outlog=FILE write stdout to this file. outlog=FILE write stdout to this file.
errlog=FILE write stderr to this file. errlog=FILE write stderr to this file.
umask=UMASK umask to use when daemonizing (default 022).
Examples: Examples:
Run a "standard" fastcgi process on a file-descriptor Run a "standard" fastcgi process on a file-descriptor
@ -73,6 +74,7 @@ FASTCGI_OPTIONS = {
'maxrequests': 0, 'maxrequests': 0,
'outlog': None, 'outlog': None,
'errlog': None, 'errlog': None,
'umask': None,
} }
def fastcgi_help(message=None): def fastcgi_help(message=None):
@ -159,6 +161,8 @@ def runfastcgi(argset=[], **kwargs):
daemon_kwargs['out_log'] = options['outlog'] daemon_kwargs['out_log'] = options['outlog']
if options['errlog']: if options['errlog']:
daemon_kwargs['err_log'] = options['errlog'] daemon_kwargs['err_log'] = options['errlog']
if options['umask']:
daemon_kwargs['umask'] = int(options['umask'])
if daemonize: if daemonize:
from django.utils.daemonize import become_daemon from django.utils.daemonize import become_daemon

View File

@ -2,7 +2,8 @@ import os
import sys import sys
if os.name == 'posix': if os.name == 'posix':
def become_daemon(our_home_dir='.', out_log='/dev/null', err_log='/dev/null'): def become_daemon(our_home_dir='.', out_log='/dev/null',
err_log='/dev/null', umask=022):
"Robustly turn into a UNIX daemon, running in our_home_dir." "Robustly turn into a UNIX daemon, running in our_home_dir."
# First fork # First fork
try: try:
@ -13,7 +14,7 @@ if os.name == 'posix':
sys.exit(1) sys.exit(1)
os.setsid() os.setsid()
os.chdir(our_home_dir) os.chdir(our_home_dir)
os.umask(0) os.umask(umask)
# Second fork # Second fork
try: try:
@ -32,13 +33,13 @@ if os.name == 'posix':
# Set custom file descriptors so that they get proper buffering. # Set custom file descriptors so that they get proper buffering.
sys.stdout, sys.stderr = so, se sys.stdout, sys.stderr = so, se
else: else:
def become_daemon(our_home_dir='.', out_log=None, err_log=None): def become_daemon(our_home_dir='.', out_log=None, err_log=None, umask=022):
""" """
If we're not running under a POSIX system, just simulate the daemon If we're not running under a POSIX system, just simulate the daemon
mode by doing redirections and directory changing. mode by doing redirections and directory changing.
""" """
os.chdir(our_home_dir) os.chdir(our_home_dir)
os.umask(0) os.umask(umask)
sys.stdin.close() sys.stdin.close()
sys.stdout.close() sys.stdout.close()
sys.stderr.close() sys.stderr.close()