diff --git a/pip/utils/filesystem.py b/pip/utils/filesystem.py index 348662364..25ad51660 100644 --- a/pip/utils/filesystem.py +++ b/pip/utils/filesystem.py @@ -1,12 +1,28 @@ import os import os.path +from pip.compat import get_path_uid + def check_path_owner(path): + # If we don't have a way to check the effective uid of this process, then + # we'll just assume that we own the directory. + if not hasattr(os, "geteuid"): + return True + previous = None while path != previous: if os.path.lexists(path): - # Check if path is writable - return os.access(path, os.W_OK) + # Check if path is writable by current user. + if os.geteuid() == 0: + # Special handling for root user in order to handle properly + # cases where users use sudo without -H flag. + try: + path_uid = get_path_uid(path) + except OSError: + return False + return path_uid == 0 + else: + return os.access(path, os.W_OK) else: previous, path = path, os.path.dirname(path)