diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-04-11 18:14:19 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-04-11 18:14:56 (GMT) |
commit | d9a29f93cd4ff505e264974febd0566ae29880ca (patch) | |
tree | 6eea9e476374863e93c80aacb76840ac24f0c50f /3rdParty/SCons/scons-local/SCons/dblite.py | |
parent | 73f845a3f380c5a1adbac2cf29e9f36cc9b498cf (diff) | |
download | swift-d9a29f93cd4ff505e264974febd0566ae29880ca.zip swift-d9a29f93cd4ff505e264974febd0566ae29880ca.tar.bz2 |
Update SCons to 1.3.0.d20100404.
Diffstat (limited to '3rdParty/SCons/scons-local/SCons/dblite.py')
-rw-r--r-- | 3rdParty/SCons/scons-local/SCons/dblite.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/3rdParty/SCons/scons-local/SCons/dblite.py b/3rdParty/SCons/scons-local/SCons/dblite.py index 6d4cfd5..bcb2aa0 100644 --- a/3rdParty/SCons/scons-local/SCons/dblite.py +++ b/3rdParty/SCons/scons-local/SCons/dblite.py @@ -45,6 +45,10 @@ class dblite: _open = __builtin__.open _cPickle_dump = cPickle.dump _os_chmod = os.chmod + try: + _os_chown = os.chown + except AttributeError: + _os_chown = None _os_rename = os.rename _os_unlink = os.unlink _shutil_copyfile = shutil.copyfile @@ -65,6 +69,20 @@ class dblite: self._mode = mode self._dict = {} self._needs_sync = 00000 + if self._os_chown is not None and (os.geteuid()==0 or os.getuid()==0): + # running as root; chown back to current owner/group when done + try: + statinfo = os.stat(self._file_name) + self._chown_to = statinfo.st_uid + self._chgrp_to = statinfo.st_gid + except OSError, e: + # db file doesn't exist yet. + # Check os.environ for SUDO_UID, use if set + self._chown_to = int(os.environ.get('SUDO_UID', -1)) + self._chgrp_to = int(os.environ.get('SUDO_GID', -1)) + else: + self._chown_to = -1 # don't chown + self._chgrp_to = -1 # don't chgrp if (self._flag == "n"): self._open(self._file_name, "wb", self._mode) else: @@ -103,6 +121,11 @@ class dblite: except OSError: pass self._os_unlink(self._file_name) self._os_rename(self._tmp_name, self._file_name) + if self._os_chown is not None and self._chown_to > 0: # don't chown to root or -1 + try: + self._os_chown(self._file_name, self._chown_to, self._chgrp_to) + except OSError: + pass self._needs_sync = 00000 if (keep_all_files): self._shutil_copyfile( |