Issue #2004: Use mode 0700 for temporary directories and default

permissions for missing directories.

(will backport to 2.5)
This commit is contained in:
Lars Gustäbel 2008-02-05 11:51:40 +00:00
parent dc6d9e1f5e
commit 0192e43d64
2 changed files with 12 additions and 9 deletions

View File

@ -2021,14 +2021,10 @@ def extractall(self, path=".", members=None):
for tarinfo in members: for tarinfo in members:
if tarinfo.isdir(): if tarinfo.isdir():
# Extract directory with a safe mode, so that # Extract directories with a safe mode.
# all files below can be extracted as well.
try:
os.makedirs(os.path.join(path, tarinfo.name), 0700)
except EnvironmentError:
pass
directories.append(tarinfo) directories.append(tarinfo)
else: tarinfo = copy.copy(tarinfo)
tarinfo.mode = 0700
self.extract(tarinfo, path) self.extract(tarinfo, path)
# Reverse sort directories. # Reverse sort directories.
@ -2134,6 +2130,8 @@ def _extract_member(self, tarinfo, targetpath):
# Create all upper directories. # Create all upper directories.
upperdirs = os.path.dirname(targetpath) upperdirs = os.path.dirname(targetpath)
if upperdirs and not os.path.exists(upperdirs): if upperdirs and not os.path.exists(upperdirs):
# Create directories that are not part of the archive with
# default permissions.
os.makedirs(upperdirs) os.makedirs(upperdirs)
if tarinfo.islnk() or tarinfo.issym(): if tarinfo.islnk() or tarinfo.issym():
@ -2170,7 +2168,9 @@ def makedir(self, tarinfo, targetpath):
"""Make a directory called targetpath. """Make a directory called targetpath.
""" """
try: try:
os.mkdir(targetpath) # Use a safe mode for the directory, the real mode is set
# later in _extract_member().
os.mkdir(targetpath, 0700)
except EnvironmentError, e: except EnvironmentError, e:
if e.errno != errno.EEXIST: if e.errno != errno.EEXIST:
raise raise

View File

@ -388,6 +388,9 @@ Core and builtins
Library Library
------- -------
- #2004: tarfile.py: Use mode 0700 for temporary directories and default
permissions for missing directories.
- #175006: The debugger used to skip the condition of a "while" statement - #175006: The debugger used to skip the condition of a "while" statement
after the first iteration. Now it correctly steps on the expression, and after the first iteration. Now it correctly steps on the expression, and
breakpoints on the "while" statement are honored on each loop. breakpoints on the "while" statement are honored on each loop.