When doing "sudo python-script.py", the output of "getpass.getuser()" is pretty much useless for what it's used (I assume mainly logging and tracking purposes, that's what we use it for ourselves). I worked around this limitation by using it in expression likes: username = os.environ.get("SUDO_USER") or getpass.getuser() I think it'll be useful to many other users if getpass.getuser() could integrate this behavior. I'd love to provide the code change if this is approved.
Versions 3.7 and below are all in feature-freeze, so this change could only apply to 3.8 and above. I don't know if this feature is desirable or not. If it is (sometimes?) desirable, my guess is that it would be undesirable to use SUDO_USER *unless* the effective user ID was 0. (Don't check for the name "root", that's only a convention.) In pseudocode: names = ('LOGNAME', 'USER', 'LNAME', 'USERNAME') if effective user ID == 0: names = ('SUDO_USER',) + names for name in names: ... Also needs documentation and tests.
The use of environment variables like USER and LOGNAME instead of getuid() etc is done in order to try to get "who really initiated this process?" rather than "who this process belongs to?". This is hidden today when SUDO_USER is ignored. This also fits my interpretation of the function's documentation: 'Return the "login name" of the user.' For instance, in a system I use I have to sudo to a system user other than root in order to execute certain scripts and this patch would reveal the original user who executed the sudo command. I updated the test case already in the existing PR. I update to the documentation to list SUDO_USER.
I agree with Steven in that I'm not quite sure this is a good change, but I also see that it would be useful in some cases. Perhaps either a `check_sudo_user=False` keyword-only parameter, or a `vars_to_check=()` parameter would be better? Adding Gregory P. Smith as the last person to have added their name to getpass.py :)
Adding a check for SUDO_USER would break existing uses as it would no longer be reporting the user the process is running as.
History
Date
User
Action
Args
2022-04-11 14:59:06
admin
set
github: 78890
2019-09-12 15:33:49
gregory.p.smith
set
status: open -> closedtitle: Suggestion: make getuser.getpass() also look at SUDO_USER environment variable -> Suggestion: make getpass.getuser() also look at SUDO_USER environment variablemessages: + assignee: gregory.p.smithresolution: rejectedstage: patch review -> resolved