From 7769fadc6d4afdf6730b657ab7cea87aa369bc67 Mon Sep 17 00:00:00 2001 From: Konstantin Stepanov Date: Sun, 19 Dec 2010 18:21:40 +0200 Subject: [PATCH] new cli args: userid and groupid to set user and group to change too --- dbuscron/shell/main.py | 51 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/dbuscron/shell/main.py b/dbuscron/shell/main.py index fbbb549..e035a5c 100644 --- a/dbuscron/shell/main.py +++ b/dbuscron/shell/main.py @@ -1,14 +1,17 @@ -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: @@ -17,6 +20,48 @@ def run(): 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( -- 1.7.9.5