From 80d647a9b0303e43b9eaf602ee2cfec857f94a92 Mon Sep 17 00:00:00 2001 From: Bob Lantz <rlantz@cs.stanford.edu> Date: Tue, 16 Sep 2014 13:31:51 -0700 Subject: [PATCH] add findUser() to clean up user identification --- examples/cluster.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/examples/cluster.py b/examples/cluster.py index e5f374b8..093df668 100755 --- a/examples/cluster.py +++ b/examples/cluster.py @@ -125,12 +125,8 @@ def __init__( self, name, server=None, user=None, serverIP=None, if server == 'localhost': server = None self.server = server - if not serverIP: - serverIP = self.findServerIP( server ) - self.serverIP = serverIP - if not user: - user = quietRun( 'echo $SUDO_USER' ) - self.user = user + self.serverIP = serverIP if serverIP else self.findServerIP( server ) + self.user = user if user else self.findUser() if self.user and self.server: self.dest = '%s@%s' % ( self.user, self.serverIP ) else: @@ -146,6 +142,20 @@ def __init__( self, name, server=None, user=None, serverIP=None, self.splitInit = splitInit super( RemoteMixin, self ).__init__( name, **kwargs ) + @staticmethod + def findUser(): + "Try to return logged-in (usually non-root) user" + try: + # If we're running sudo + return os.environ[ 'SUDO_USER' ] + except: + try: + # Logged-in user (if we have a tty) + return quietRun( 'who am i' ).split()[ 0 ] + except: + # Give up and return effective user + return quietRun( 'whoami' ) + # Determine IP address of local host _ipMatchRegex = re.compile( r'\d+\.\d+\.\d+\.\d+' ) @@ -593,9 +603,7 @@ def __init__( self, *args, **kwargs ): if not self.serverIP: self.serverIP = { server: RemoteMixin.findServerIP( server ) for server in self.servers } - self.user = params.pop( 'user', None ) - if self.servers and not self.user: - self.user = quietRun( 'echo $SUDO_USER' ) + self.user = params.pop( 'user', RemoteMixin.findUser() ) if params.pop( 'precheck' ): self.precheck() self.connections = {} -- GitLab