-import sys
-from dbuscron import Logger, OptionsParser
+import os, sys
def run():
+ from dbuscron import Logger, OptionsParser
+
options = OptionsParser(
daemon=dict(names=('-f', '--nodaemon'), action='store_false', default=True),
quiet=dict(names=('--quiet', '-q'), action='count', default=0),
verbose=dict(names=('--verbose', '-v'), action='count', default=0),
config=dict(names=('--conf', '--config', '-c'), default='/etc/dbuscrontab'),
- logfile=dict(names=('--log', '--logfile', '-l')))
+ logfile=dict(names=('--log', '--logfile', '-l')),
+ userid=dict(names=('-u', '--user', '--uid', '--userid')),
+ groupid=dict(names=('-g', '--group', '--gid', '--groupid')))
logout = sys.stderr
if options.logfile:
log = Logger(__name__, out=logout)
log.level = options.verbose - options.quiet + Logger.WARNING
+ if os.getuid() == 0:
+ if options.userid:
+ try:
+ import pwd
+ try:
+ userid = int(options.userid)
+ except ValueError:
+ userid = pwd.getpwnam(options.userid)[2]
+
+ except:
+ log.warn('Unable to find user', options.userid)
+ userid = None
+
+ else:
+ userid = None
+
+ if options.groupid:
+ try:
+ try:
+ groupid = int(options.groupid)
+ except ValueError:
+ import grp
+ groupid = grp.getgrnam(options.groupid)[2]
+
+ except:
+ log.warn('Unable to find group', options.groupid)
+ groupid = None
+
+ elif userid:
+ groupid = pwd.getpwuid(userid)[3]
+
+ else:
+ groupid = None
+
+ if groupid:
+ os.setgid(groupid)
+ if userid:
+ os.getuid(userid)
+
+ elif options.userid or options.groupid:
+ log.warn('Ignoring userid and groupid arguments: I am not a root to pretend somebody else.')
+
if options.daemon:
from dbuscron.daemonize import daemonize
daemonize(