[Bug #802128 continued] Modify mode depending on the process umask.

Is there really no other way to read the umask than to set it?

Hope this works on Windows...
This commit is contained in:
Andrew M. Kuchling 2006-12-22 15:16:58 +00:00
parent dc26758ffe
commit 9ef0ef5b72
2 changed files with 21 additions and 6 deletions

View File

@ -236,4 +236,15 @@ def open(file, flag=None, mode=0666):
""" """
# flag argument is currently ignored # flag argument is currently ignored
# Modify mode depending on the umask
try:
um = _os.umask(0)
_os.umask(um)
except AttributeError:
pass
else:
# Turn off any bits that are set in the umask
mode = mode & (~um)
return _Database(file, mode) return _Database(file, mode)

View File

@ -40,17 +40,21 @@ class DumbDBMTestCase(unittest.TestCase):
def test_dumbdbm_creation_mode(self): def test_dumbdbm_creation_mode(self):
# On platforms without chmod, don't do anything. # On platforms without chmod, don't do anything.
if not hasattr(os, 'chmod'): if not (hasattr(os, 'chmod') and hasattr(os, 'umask')):
return return
f = dumbdbm.open(_fname, 'c', 0632) try:
f.close() old_umask = os.umask(0002)
f = dumbdbm.open(_fname, 'c', 0637)
f.close()
finally:
os.umask(old_umask)
import stat import stat
st = os.stat(_fname + '.dat') st = os.stat(_fname + '.dat')
self.assertEqual(stat.S_IMODE(st.st_mode), 0632) self.assertEqual(stat.S_IMODE(st.st_mode), 0635)
st = os.stat(_fname + '.dir') st = os.stat(_fname + '.dir')
self.assertEqual(stat.S_IMODE(st.st_mode), 0632) self.assertEqual(stat.S_IMODE(st.st_mode), 0635)
def test_close_twice(self): def test_close_twice(self):
f = dumbdbm.open(_fname) f = dumbdbm.open(_fname)