[Python-checkins] cpython (2.7): #5346: Preserve permissions of mbox, MMDF and Babyl mailbox files on flush()

petri.lehtinen python-checkins at python.org
Fri Jun 29 14:16:22 CEST 2012


http://hg.python.org/cpython/rev/69f654f718f4
changeset:   77850:69f654f718f4
branch:      2.7
parent:      77847:3d7a75e945ee
user:        Petri Lehtinen <petri at digip.org>
date:        Fri Jun 29 15:09:12 2012 +0300
summary:
  #5346: Preserve permissions of mbox, MMDF and Babyl mailbox files on flush()

files:
  Lib/mailbox.py           |   3 +++
  Lib/test/test_mailbox.py |  17 +++++++++++++++++
  Misc/NEWS                |   3 +++
  3 files changed, 23 insertions(+), 0 deletions(-)


diff --git a/Lib/mailbox.py b/Lib/mailbox.py
--- a/Lib/mailbox.py
+++ b/Lib/mailbox.py
@@ -665,6 +665,9 @@
         _sync_close(new_file)
         # self._file is about to get replaced, so no need to sync.
         self._file.close()
+        # Make sure the new file's mode is the same as the old file's
+        mode = os.stat(self._path).st_mode
+        os.chmod(new_file.name, mode)
         try:
             os.rename(new_file.name, self._path)
         except OSError, e:
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -848,6 +848,23 @@
         self._box = self._factory(self._path)
         self.assertEqual(len(self._box), 1)
 
+    def test_permissions_after_flush(self):
+        # See issue #5346
+
+        # Make the mailbox world writable. It's unlikely that the new
+        # mailbox file would have these permissions after flush(),
+        # because umask usually prevents it.
+        mode = os.stat(self._path).st_mode | 0o666
+        os.chmod(self._path, mode)
+
+        self._box.add(self._template % 0)
+        i = self._box.add(self._template % 1)
+        # Need to remove one message to make flush() create a new file
+        self._box.remove(i)
+        self._box.flush()
+
+        self.assertEqual(os.stat(self._path).st_mode, mode)
+
 
 class _TestMboxMMDF(_TestSingleFile):
 
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -75,6 +75,9 @@
 Library
 -------
 
+- Issue #5346: Preserve permissions of mbox, MMDF and Babyl mailbox
+  files on flush().
+
 - Issue #15219: Fix a reference leak when hashlib.new() is called with
   invalid parameters.
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list