diff options
| author | PJ Eby <distutils-sig@python.org> | 2005-12-15 19:49:03 +0000 |
|---|---|---|
| committer | PJ Eby <distutils-sig@python.org> | 2005-12-15 19:49:03 +0000 |
| commit | d7e72ef75f98a03a74ebeea2d8e105179e3d4dec (patch) | |
| tree | 5d667c4e684e95173a72b44e1f2b0a4313e03340 /pkg_resources.py | |
| parent | 19cad08e9f93dc0544226989944839f536cac1ff (diff) | |
| download | python-setuptools-git-d7e72ef75f98a03a74ebeea2d8e105179e3d4dec.tar.gz | |
Modify resource extraction to bypass sandbox control so that egg
extraction during setup runs is not restricted.
--HG--
branch : setuptools
extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041701
Diffstat (limited to 'pkg_resources.py')
| -rw-r--r-- | pkg_resources.py | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/pkg_resources.py b/pkg_resources.py index cd67c20b..f5b2ca63 100644 --- a/pkg_resources.py +++ b/pkg_resources.py @@ -15,8 +15,8 @@ method. import sys, os, zipimport, time, re, imp, new from sets import ImmutableSet - - +from os import utime, rename, unlink # capture these to bypass sandboxing +from os import open as os_open @@ -1084,13 +1084,12 @@ class ZipProvider(EggProvider): if stat.st_size==size and stat.st_mtime==timestamp: # size and stamp match, don't bother extracting return real_path - from tempfile import mkstemp - outf, tmpnam = mkstemp(".$extract", dir=os.path.dirname(real_path)) + outf, tmpnam = _mkstemp(".$extract", dir=os.path.dirname(real_path)) os.write(outf, self.loader.get_data(zip_path)) os.close(outf) - os.utime(tmpnam, (timestamp,timestamp)) + utime(tmpnam, (timestamp,timestamp)) manager.postprocess(tmpnam, real_path) - try: os.rename(tmpnam, real_path) + try: rename(tmpnam, real_path) except os.error: if os.path.isfile(real_path): stat = os.stat(real_path) @@ -1099,12 +1098,13 @@ class ZipProvider(EggProvider): # so we're done return real_path elif os.name=='nt': # Windows, delete old file and retry - os.unlink(real_path) - os.rename(tmpnam, real_path) + unlink(real_path) + rename(tmpnam, real_path) return real_path raise return real_path + def _get_eager_resources(self): if self.eagers is None: eagers = [] @@ -2136,7 +2136,6 @@ def ensure_directory(path): if not os.path.isdir(dirname): os.makedirs(dirname) - def split_sections(s): """Split a string or iterable thereof into (section,content) pairs @@ -2162,13 +2161,14 @@ def split_sections(s): # wrap up last segment yield section, content - - - - - - - +def _mkstemp(*args,**kw): + from tempfile import mkstemp + old_open = os.open + try: + os.open = os_open # temporarily bypass sandboxing + return mkstemp(*args,**kw) + finally: + os.open = old_open # and then put it back # Set up global resource manager |
