diff --git a/lib/backend.py b/lib/backend.py index 3f793da862d48d97305f0de2db08779ec8c344e8..859f94ce99173046b871357c7293e2cab9511fcb 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -2662,7 +2662,10 @@ def JobQueueRename(old, new): _EnsureJobQueueFile(old) _EnsureJobQueueFile(new) - utils.RenameFile(old, new, mkdir=True) + getents = runtime.GetEnts() + + utils.RenameFile(old, new, mkdir=True, mkdir_mode=0700, + dir_uid=getents.masterd_uid, dir_gid=getents.masterd_gid) def BlockdevClose(instance_name, disks): diff --git a/lib/utils/io.py b/lib/utils/io.py index c64c125d1de97f65dbaf168b9116c7d8133bb69f..c12ad0a8d7f12d57219310138e8b80633f1f4c78 100644 --- a/lib/utils/io.py +++ b/lib/utils/io.py @@ -295,7 +295,8 @@ def RemoveDir(dirname): raise -def RenameFile(old, new, mkdir=False, mkdir_mode=0750): +def RenameFile(old, new, mkdir=False, mkdir_mode=0750, dir_uid=None, + dir_gid=None): """Renames a file. @type old: string @@ -306,6 +307,10 @@ def RenameFile(old, new, mkdir=False, mkdir_mode=0750): @param mkdir: Whether to create target directory if it doesn't exist @type mkdir_mode: int @param mkdir_mode: Mode for newly created directories + @type dir_uid: int + @param dir_uid: The uid for the (if fresh created) dir + @type dir_gid: int + @param dir_gid: The gid for the (if fresh created) dir """ try: @@ -316,7 +321,10 @@ def RenameFile(old, new, mkdir=False, mkdir_mode=0750): # as efficient. if mkdir and err.errno == errno.ENOENT: # Create directory and try again - Makedirs(os.path.dirname(new), mode=mkdir_mode) + dir_path = os.path.dirname(new) + Makedirs(dir_path, mode=mkdir_mode) + if not (dir_uid is None or dir_gid is None): + os.chown(dir_path, dir_uid, dir_gid) return os.rename(old, new)