From e86098cfc28f84505d4460108bbdfe019fe1efd0 Mon Sep 17 00:00:00 2001 From: Koert van der Veer Date: Thu, 9 Jan 2014 21:18:50 +0100 Subject: [PATCH] Fix os.getlogin() problem with no tty Catch OSError(s) from os.getlogin() and fall back to looking at environment variables to figure out the user's name. The OSError is thrown where there is no tty for the python process when os.getlogin() is called. Related-Bug: #1221491 Change-Id: I2bd735c9669ba9d25da108da44ea602f358b2dcc --- bin/cinder-rootwrap | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/bin/cinder-rootwrap b/bin/cinder-rootwrap index 6661513ff..564797aee 100755 --- a/bin/cinder-rootwrap +++ b/bin/cinder-rootwrap @@ -62,6 +62,15 @@ def _exit_error(execname, message, errorcode, log=True): sys.exit(errorcode) +def _getlogin(): + try: + return os.getlogin() + except OSError: + return (os.getenv('USER') or + os.getenv('USERNAME') or + os.getenv('LOGNAME')) + + if __name__ == '__main__': # Split arguments, require at least a command execname = sys.argv.pop(0) @@ -107,7 +116,7 @@ if __name__ == '__main__': exec_dirs=config.exec_dirs) if config.use_syslog: logging.info("(%s > %s) Executing %s (filter match = %s)" % ( - os.getlogin(), pwd.getpwuid(os.getuid())[0], + _getlogin(), pwd.getpwuid(os.getuid())[0], command, filtermatch.name)) obj = subprocess.Popen(command, -- 2.45.2