diff --git a/swift/common/ring/ring.py b/swift/common/ring/ring.py index 5b315285ac..a1f9024bc4 100644 --- a/swift/common/ring/ring.py +++ b/swift/common/ring/ring.py @@ -120,6 +120,7 @@ class RingData(object): tempf.flush() os.fsync(tempf.fileno()) tempf.close() + os.chmod(tempf.name, 0o644) os.rename(tempf.name, filename) def to_dict(self): diff --git a/test/unit/common/ring/test_ring.py b/test/unit/common/ring/test_ring.py index 04eb1b7cb5..1892d19923 100644 --- a/test/unit/common/ring/test_ring.py +++ b/test/unit/common/ring/test_ring.py @@ -18,6 +18,7 @@ import cPickle as pickle import os import sys import unittest +import stat from contextlib import closing from gzip import GzipFile from tempfile import mkdtemp @@ -98,6 +99,15 @@ class TestRingData(unittest.TestCase): with open(ring_fname2) as ring2: self.assertEqual(ring1.read(), ring2.read()) + def test_permissions(self): + ring_fname = os.path.join(self.testdir, 'stat.ring.gz') + rd = ring.RingData( + [array.array('H', [0, 1, 0, 1]), array.array('H', [0, 1, 0, 1])], + [{'id': 0, 'zone': 0}, {'id': 1, 'zone': 1}], 30) + rd.save(ring_fname) + self.assertEqual(oct(stat.S_IMODE(os.stat(ring_fname).st_mode)), + '0644') + class TestRing(unittest.TestCase):