summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPJ Eby <distutils-sig@python.org>2009-10-12 20:05:56 +0000
committerPJ Eby <distutils-sig@python.org>2009-10-12 20:05:56 +0000
commit11e0e840b1d2b9b2e4326facb2f05eacec71bafa (patch)
tree276a6c43e121a2e98329bf011b235a45ef764634
parent9294929b0028f551a54dd48cc3325581933b3c5f (diff)
downloadpython-setuptools-git-11e0e840b1d2b9b2e4326facb2f05eacec71bafa.tar.gz
Backport fixes for issues 16 & 23 from trunk
--HG-- branch : setuptools-0.6 extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/branches/setuptools-0.6%4075386
-rw-r--r--pkg_resources.py20
-rwxr-xr-xsetuptools/archive_util.py8
2 files changed, 14 insertions, 14 deletions
diff --git a/pkg_resources.py b/pkg_resources.py
index baff4225..79db00b8 100644
--- a/pkg_resources.py
+++ b/pkg_resources.py
@@ -20,18 +20,18 @@ try:
except NameError:
from sets import ImmutableSet as frozenset
-from os import utime, rename, unlink # capture these to bypass sandboxing
+# capture these to bypass sandboxing
+from os import utime, rename, unlink, mkdir
from os import open as os_open
+from os.path import isdir, split
-
-
-
-
-
-
-
-
+def _bypass_ensure_directory(name, mode=0777):
+ # Sandbox-bypassing version of ensure_directory()
+ dirname, filename = split(name)
+ if dirname and filename and not isdir(dirname):
+ _bypass_ensure_directory(dirname)
+ mkdir(dirname, mode)
@@ -957,7 +957,7 @@ variable to point to an accessible directory.
extract_path = self.extraction_path or get_default_cache()
target_path = os.path.join(extract_path, archive_name+'-tmp', *names)
try:
- ensure_directory(target_path)
+ _bypass_ensure_directory(target_path)
except:
self.extraction_error()
diff --git a/setuptools/archive_util.py b/setuptools/archive_util.py
index 511f05ad..5d72e7ed 100755
--- a/setuptools/archive_util.py
+++ b/setuptools/archive_util.py
@@ -189,7 +189,10 @@ def unpack_tarfile(filename, extract_dir, progress_filter=default_filter):
if dst:
if dst.endswith(os.sep):
dst = dst[:-1]
- tarobj._extract_member(member,dst) # XXX Ugh
+ try:
+ tarobj._extract_member(member,dst) # XXX Ugh
+ except tarfile.ExtractError:
+ pass # chown/chmod/mkfifo/mknode/makedev failed
return True
finally:
tarobj.close()
@@ -200,6 +203,3 @@ def unpack_tarfile(filename, extract_dir, progress_filter=default_filter):
extraction_drivers = unpack_directory, unpack_zipfile, unpack_tarfile
-
-
-