From 46db833346a259d0dda78bbdf9a10dbf86f10670 Mon Sep 17 00:00:00 2001 From: Michael Fritch Date: Mon, 25 Nov 2019 15:24:30 -0700 Subject: [PATCH] ceph-daemon: chown uid/gid files during `adopt` shutil does not preserve the file owner/group after copy/move Signed-off-by: Michael Fritch --- src/ceph-daemon/ceph-daemon | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/ceph-daemon/ceph-daemon b/src/ceph-daemon/ceph-daemon index 2fccc9d5a6945..8c4cfa36404d5 100755 --- a/src/ceph-daemon/ceph-daemon +++ b/src/ceph-daemon/ceph-daemon @@ -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) -- 2.39.5