Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: third_party/twisted_8_1/twisted/scripts/_twistd_unix.py

Issue 12261012: Remove third_party/twisted_8_1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/twisted_8_1/twisted/scripts/_twistd_unix.py
diff --git a/third_party/twisted_8_1/twisted/scripts/_twistd_unix.py b/third_party/twisted_8_1/twisted/scripts/_twistd_unix.py
deleted file mode 100644
index 36f4f78a863af377141a25b9dc7b1a2eed1b9c17..0000000000000000000000000000000000000000
--- a/third_party/twisted_8_1/twisted/scripts/_twistd_unix.py
+++ /dev/null
@@ -1,313 +0,0 @@
-# -*- test-case-name: twisted.test.test_twistd -*-
-# Copyright (c) 2001-2008 Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-import warnings
-import os, errno, sys
-
-from twisted.python import log, syslog, logfile
-from twisted.python.util import switchUID, uidFromString, gidFromString
-from twisted.application import app, service
-from twisted import copyright
-
-
-class ServerOptions(app.ServerOptions):
- synopsis = "Usage: twistd [options]"
-
- optFlags = [['nodaemon','n', "don't daemonize"],
- ['quiet', 'q', "No-op for backwards compatibility."],
- ['originalname', None, "Don't try to change the process name"],
- ['syslog', None, "Log to syslog, not to file"],
- ['euid', '',
- "Set only effective user-id rather than real user-id. "
- "(This option has no effect unless the server is running as "
- "root, in which case it means not to shed all privileges "
- "after binding ports, retaining the option to regain "
- "privileges in cases such as spawning processes. "
- "Use with caution.)"],
- ]
-
- optParameters = [
- ['prefix', None,'twisted',
- "use the given prefix when syslogging"],
- ['pidfile','','twistd.pid',
- "Name of the pidfile"],
- ['chroot', None, None,
- 'Chroot to a supplied directory before running'],
- ['uid', 'u', None, "The uid to run as.", uidFromString],
- ['gid', 'g', None, "The gid to run as.", gidFromString],
- ]
- zsh_altArgDescr = {"prefix":"Use the given prefix when syslogging (default: twisted)",
- "pidfile":"Name of the pidfile (default: twistd.pid)",}
- #zsh_multiUse = ["foo", "bar"]
- #zsh_mutuallyExclusive = [("foo", "bar"), ("bar", "baz")]
- zsh_actions = {"pidfile":'_files -g "*.pid"', "chroot":'_dirs'}
- zsh_actionDescr = {"chroot":"chroot directory"}
-
- def opt_version(self):
- """Print version information and exit.
- """
- print 'twistd (the Twisted daemon) %s' % copyright.version
- print copyright.copyright
- sys.exit()
-
-
- def postOptions(self):
- app.ServerOptions.postOptions(self)
- if self['pidfile']:
- self['pidfile'] = os.path.abspath(self['pidfile'])
-
-
-def checkPID(pidfile):
- if not pidfile:
- return
- if os.path.exists(pidfile):
- try:
- pid = int(open(pidfile).read())
- except ValueError:
- sys.exit('Pidfile %s contains non-numeric value' % pidfile)
- try:
- os.kill(pid, 0)
- except OSError, why:
- if why[0] == errno.ESRCH:
- # The pid doesnt exists.
- log.msg('Removing stale pidfile %s' % pidfile, isError=True)
- os.remove(pidfile)
- else:
- sys.exit("Can't check status of PID %s from pidfile %s: %s" %
- (pid, pidfile, why[1]))
- else:
- sys.exit("""\
-Another twistd server is running, PID %s\n
-This could either be a previously started instance of your application or a
-different application entirely. To start a new one, either run it in some other
-directory, or use the --pidfile and --logfile parameters to avoid clashes.
-""" % pid)
-
-def _getLogObserver(logfilename, sysLog, prefix, nodaemon):
- """
- Create and return a suitable log observer for the given configuration.
-
- The observer will go to syslog using the prefix C{prefix} if C{sysLog} is
- true. Otherwise, it will go to the file named C{logfilename} or, if
- C{nodaemon} is true and C{logfilename} is C{"-"}, to stdout.
-
- @type logfilename: C{str}
- @param logfilename: The name of the file to which to log, if other than the
- default.
-
- @type sysLog: C{bool}
- @param sysLog: A flag indicating whether to use syslog instead of file
- logging.
-
- @type prefix: C{str}
- @param prefix: If C{sysLog} is C{True}, the string prefix to use for syslog
- messages.
-
- @type nodaemon: C{bool}
- @param nodaemon: A flag indicating the process will not be daemonizing.
-
- @return: An object suitable to be passed to C{log.addObserver}.
- """
- if sysLog:
- observer = syslog.SyslogObserver(prefix).emit
- else:
- if logfilename == '-':
- if not nodaemon:
- print 'daemons cannot log to stdout'
- os._exit(1)
- logFile = sys.stdout
- elif nodaemon and not logfilename:
- logFile = sys.stdout
- else:
- logFile = logfile.LogFile.fromFullPath(logfilename or 'twistd.log')
- try:
- import signal
- except ImportError:
- pass
- else:
- def rotateLog(signal, frame):
- from twisted.internet import reactor
- reactor.callFromThread(logFile.rotate)
- signal.signal(signal.SIGUSR1, rotateLog)
- observer = log.FileLogObserver(logFile).emit
- return observer
-
-
-def startLogging(*args, **kw):
- warnings.warn(
- """
- Use ApplicationRunner instead of startLogging.
- """,
- category=PendingDeprecationWarning,
- stacklevel=2)
- observer = _getLogObserver(*args, **kw)
- log.startLoggingWithObserver(observer)
- sys.stdout.flush()
-
-
-def daemonize():
- # See http://www.erlenstar.demon.co.uk/unix/faq_toc.html#TOC16
- if os.fork(): # launch child and...
- os._exit(0) # kill off parent
- os.setsid()
- if os.fork(): # launch child and...
- os._exit(0) # kill off parent again.
- os.umask(077)
- null = os.open('/dev/null', os.O_RDWR)
- for i in range(3):
- try:
- os.dup2(null, i)
- except OSError, e:
- if e.errno != errno.EBADF:
- raise
- os.close(null)
-
-
-def launchWithName(name):
- if name and name != sys.argv[0]:
- exe = os.path.realpath(sys.executable)
- log.msg('Changing process name to ' + name)
- os.execv(exe, [name, sys.argv[0], '--originalname'] + sys.argv[1:])
-
-
-class UnixApplicationRunner(app.ApplicationRunner):
- """
- An ApplicationRunner which does Unix-specific things, like fork,
- shed privileges, and maintain a PID file.
- """
-
- def preApplication(self):
- """
- Do pre-application-creation setup.
- """
- checkPID(self.config['pidfile'])
- self.config['nodaemon'] = (self.config['nodaemon']
- or self.config['debug'])
- self.oldstdout = sys.stdout
- self.oldstderr = sys.stderr
-
-
- def getLogObserver(self):
- """
- Override to supply a log observer suitable for POSIX based on the given
- arguments.
- """
- return _getLogObserver(
- self.config['logfile'], self.config['syslog'],
- self.config['prefix'], self.config['nodaemon'])
-
-
- def postApplication(self):
- """
- To be called after the application is created: start the
- application and run the reactor. After the reactor stops,
- clean up PID files and such.
- """
- self.startApplication(self.application)
- self.startReactor(None, self.oldstdout, self.oldstderr)
- self.removePID(self.config['pidfile'])
- log.msg("Server Shut Down.")
-
-
- def removePID(self, pidfile):
- """
- Remove the specified PID file, if possible. Errors are logged, not
- raised.
-
- @type pidfile: C{str}
- @param pidfile: The path to the PID tracking file.
- """
- if not pidfile:
- return
- try:
- os.unlink(pidfile)
- except OSError, e:
- if e.errno == errno.EACCES or e.errno == errno.EPERM:
- log.msg("Warning: No permission to delete pid file")
- else:
- log.msg("Failed to unlink PID file:")
- log.deferr()
- except:
- log.msg("Failed to unlink PID file:")
- log.deferr()
-
-
- def setupEnvironment(self, chroot, rundir, nodaemon, pidfile):
- """
- Set the filesystem root, the working directory, and daemonize.
-
- @type chroot: C{str} or L{NoneType}
- @param chroot: If not None, a path to use as the filesystem root (using
- L{os.chroot}).
-
- @type rundir: C{str}
- @param rundir: The path to set as the working directory.
-
- @type nodaemon: C{bool}
- @param nodaemon: A flag which, if set, indicates that daemonization
- should not be done.
-
- @type pidfile: C{str} or C{NoneType}
- @param pidfile: If not C{None}, the path to a file into which to put
- the PID of this process.
- """
- if chroot is not None:
- os.chroot(chroot)
- if rundir == '.':
- rundir = '/'
- os.chdir(rundir)
- if not nodaemon:
- daemonize()
- if pidfile:
- open(pidfile,'wb').write(str(os.getpid()))
-
-
- def shedPrivileges(self, euid, uid, gid):
- """
- Change the UID and GID or the EUID and EGID of this process.
-
- @type euid: C{bool}
- @param euid: A flag which, if set, indicates that only the I{effective}
- UID and GID should be set.
-
- @type uid: C{int} or C{NoneType}
- @param uid: If not C{None}, the UID to which to switch.
-
- @type gid: C{int} or C{NoneType}
- @param gid: If not C{None}, the GID to which to switch.
- """
- if uid is not None or gid is not None:
- switchUID(uid, gid, euid)
- extra = euid and 'e' or ''
- log.msg('set %suid/%sgid %s/%s' % (extra, extra, uid, gid))
-
-
- def startApplication(self, application):
- """
- Configure global process state based on the given application and run
- the application.
-
- @param application: An object which can be adapted to
- L{service.IProcess} and L{service.IService}.
- """
- process = service.IProcess(application)
- if not self.config['originalname']:
- launchWithName(process.processName)
- self.setupEnvironment(
- self.config['chroot'], self.config['rundir'],
- self.config['nodaemon'], self.config['pidfile'])
-
- service.IService(application).privilegedStartService()
-
- uid, gid = self.config['uid'], self.config['gid']
- if uid is None:
- uid = process.uid
- if gid is None:
- gid = process.gid
-
- self.shedPrivileges(self.config['euid'], uid, gid)
- app.startApplication(application, not self.config['no_save'])
-
-
-
« no previous file with comments | « third_party/twisted_8_1/twisted/scripts/__init__.py ('k') | third_party/twisted_8_1/twisted/scripts/_twistw.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698