cron: replacement for os.getlogin() (#4777)
os.getlogin() returns the user logged in on the controlling terminal. However 'crontab' only looks for the login name of the process' real user id which pwd.getpwuid(os.getuid())[0] does provide. While in most cases there is no difference, the former might fail under certain circumstances (e.g. a lxc container connected by attachment without login), throwing the error 'OSError: [Errno 25] Inappropriate ioctl for device'.
This commit is contained in:
parent
987d9b2b4a
commit
2f3fdc4975
1 changed files with 3 additions and 2 deletions
|
@ -200,6 +200,7 @@ EXAMPLES = '''
|
|||
'''
|
||||
|
||||
import os
|
||||
import pwd
|
||||
import re
|
||||
import tempfile
|
||||
import platform
|
||||
|
@ -479,7 +480,7 @@ class CronTab(object):
|
|||
return "%s -l %s" % (pipes.quote(CRONCMD), pipes.quote(self.user))
|
||||
elif platform.system() == 'HP-UX':
|
||||
return "%s %s %s" % (CRONCMD , '-l', pipes.quote(self.user))
|
||||
elif os.getlogin() != self.user:
|
||||
elif pwd.getpwuid(os.getuid())[0] != self.user:
|
||||
user = '-u %s' % pipes.quote(self.user)
|
||||
return "%s %s %s" % (CRONCMD , user, '-l')
|
||||
|
||||
|
@ -491,7 +492,7 @@ class CronTab(object):
|
|||
if self.user:
|
||||
if platform.system() in ['SunOS', 'HP-UX', 'AIX']:
|
||||
return "chown %s %s ; su '%s' -c '%s %s'" % (pipes.quote(self.user), pipes.quote(path), pipes.quote(self.user), CRONCMD, pipes.quote(path))
|
||||
elif os.getlogin() != self.user:
|
||||
elif pwd.getpwuid(os.getuid())[0] != self.user:
|
||||
user = '-u %s' % pipes.quote(self.user)
|
||||
return "%s %s %s" % (CRONCMD , user, pipes.quote(path))
|
||||
|
||||
|
|
Loading…
Reference in a new issue