]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-daemon: chown uid/gid files during `adopt` 31838/head
authorMichael Fritch <mfritch@suse.com>
Mon, 25 Nov 2019 22:24:30 +0000 (15:24 -0700)
committerMichael Fritch <mfritch@suse.com>
Tue, 26 Nov 2019 04:08:45 +0000 (21:08 -0700)
shutil does not preserve the file owner/group after copy/move

Signed-off-by: Michael Fritch <mfritch@suse.com>
src/ceph-daemon/ceph-daemon

index 2fccc9d5a6945f1c82df0823aaf6ee17151c203b..8c4cfa36404d5ec506436979fa6ba8d79bac2c80 100755 (executable)
@@ -280,10 +280,31 @@ def make_log_dir(fsid, uid=None, gid=None):
     makedirs(log_dir, uid, gid, LOG_DIR_MODE)
     return log_dir
 
-def move_file(src, dst):
+def copy_file(src, dst, uid=None, gid=None):
+    # type: (str, str, int, int) -> str
+    """
+    Copy a file from src to dst
+    """
+    if not uid or not gid:
+        (uid, gid) = extract_uid_gid()
+
+    if os.path.isdir(dst):
+        dst = os.path.join(dst, os.path.basename(src))
+
+    logger.debug('Copy \'%s\' -> \'%s\'' % (src, dst))
+    shutil.copyfile(src, dst)
+    os.chown(dst, uid, gid)
+
+    return dst
+
+def move_file(src, dst, uid=None, gid=None):
+    # type: (str, str, int, int) -> str
     """
     Move a file from src to dst
     """
+    if not uid or not gid:
+        (uid, gid) = extract_uid_gid()
+
     if os.path.isdir(dst):
         dst = os.path.join(dst, os.path.basename(src))
 
@@ -296,6 +317,7 @@ def move_file(src, dst):
     else:
         logger.debug('Move \'%s\' -> \'%s\'' % (src, dst))
         shutil.move(src, dst)
+    os.chown(dst, uid, gid)
 
     return dst
 
@@ -1516,7 +1538,7 @@ def command_adopt():
         data_dir_src = os.path.abspath(args.legacy_dir + data_dir_src)
         data_dir_dst = make_data_dir(fsid, daemon_type, daemon_id)
         for data_file in iglob(os.path.join(data_dir_src, '*')):
-            move_file(data_file, data_dir_dst)
+            move_file(data_file, data_dir_dst, uid=uid, gid=gid)
         logger.debug('Remove dir \'%s\'' % (data_dir_src))
         if os.path.ismount(data_dir_src):
             call_throws(['umount', data_dir_src])
@@ -1526,8 +1548,7 @@ def command_adopt():
         config_src = '/etc/ceph/%s.conf' % (args.cluster)
         config_src = os.path.abspath(args.legacy_dir + config_src)
         config_dst = os.path.join(data_dir_dst, 'config')
-        logger.debug('Copy \'%s\' -> \'%s\'' % (config_src, config_dst))
-        shutil.copy(config_src, config_dst)
+        copy_file(config_src, config_dst, uid=uid, gid=gid)
 
         # logs
         logger.info('Moving logs...')
@@ -1536,7 +1557,7 @@ def command_adopt():
         log_dir_src = os.path.abspath(args.legacy_dir + log_dir_src)
         log_dir_dst = make_log_dir(fsid, uid=uid, gid=gid)
         for log_file in iglob(log_dir_src):
-            move_file(log_file, log_dir_dst)
+            move_file(log_file, log_dir_dst, uid=uid, gid=gid)
 
         logger.info('Creating new units...')
         c = get_container(fsid, daemon_type, daemon_id)