diff --git a/lib/utils.py b/lib/utils.py index 3cbebe404e958dedd08dd7fd28e1bb7650a2559e..e3dd435649696c8d32f2c85e2c7a8800e530b7b4 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -1388,6 +1388,11 @@ def EnsureDirs(dirs): if err.errno != errno.EEXIST: raise errors.GenericError("Cannot create needed directory" " '%s': %s" % (dir_name, err)) + try: + os.chmod(dir_name, dir_mode) + except EnvironmentError, err: + raise errors.GenericError("Cannot change directory permissions on" + " '%s': %s" % (dir_name, err)) if not os.path.isdir(dir_name): raise errors.GenericError("%s is not a directory" % dir_name) diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py index 863fc79294bd4908804fafb58704dad7b7fe5848..548d04eed09e70a5ab2d2272fdfae29af330ec13 100755 --- a/test/ganeti.utils_unittest.py +++ b/test/ganeti.utils_unittest.py @@ -1859,5 +1859,26 @@ class TestIgnoreSignals(unittest.TestCase): self.assertEquals(utils.IgnoreSignals(self._Return, 33), 33) +class TestEnsureDirs(unittest.TestCase): + """Tests for EnsureDirs""" + + def setUp(self): + self.dir = tempfile.mkdtemp() + self.old_umask = os.umask(0777) + + def testEnsureDirs(self): + utils.EnsureDirs([ + (utils.PathJoin(self.dir, "foo"), 0777), + (utils.PathJoin(self.dir, "bar"), 0000), + ]) + self.assertEquals(os.stat(utils.PathJoin(self.dir, "foo"))[0] & 0777, 0777) + self.assertEquals(os.stat(utils.PathJoin(self.dir, "bar"))[0] & 0777, 0000) + + def tearDown(self): + os.rmdir(utils.PathJoin(self.dir, "foo")) + os.rmdir(utils.PathJoin(self.dir, "bar")) + os.rmdir(self.dir) + os.umask(self.old_umask) + if __name__ == '__main__': testutils.GanetiTestProgram()