Add -P option to preserve file owner
authorDaniel Abrecht <linux-f2fs-devel@nodmarc.danielabrecht.ch>
Mon, 15 Mar 2021 22:08:53 +0000 (22:08 +0000)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 18 Mar 2021 16:55:14 +0000 (09:55 -0700)
I use user namespaces & debootstrap to bootstrap a system, and then
copy that into an image using sload.f2fs. However, without an option to
preserve the owner user & group of files, some files end up being owned
by the wrong user / group (0:0), which causes all kinds of other issues

This patch adds an option -P to preserve the user and group of files.

Signed-off-by: Daniel Abrecht <public@danielabrecht.ch>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fsck/main.c
fsck/sload.c
include/f2fs_fs.h
man/sload.f2fs.8

index a538c72..be30e00 100644 (file)
@@ -138,6 +138,7 @@ void sload_usage()
        MSG(0, "  -S sparse_mode\n");
        MSG(0, "  -t mount point [prefix of target fs path, default:/]\n");
        MSG(0, "  -T timestamp\n");
+       MSG(0, "  -P preserve owner: user and group\n");
        MSG(0, "  -c enable compression (default allow policy)\n");
        MSG(0, "    ------------ Compression sub-options -----------------\n");
        MSG(0, "    -L <log-of-blocks-per-cluster>, default 2\n");
@@ -549,7 +550,7 @@ void f2fs_parse_options(int argc, char *argv[])
 #endif
        } else if (!strcmp("sload.f2fs", prog)) {
 #ifdef WITH_SLOAD
-               const char *option_string = "cL:a:i:x:m:rC:d:f:p:s:St:T:V";
+               const char *option_string = "cL:a:i:x:m:rC:d:f:p:s:St:T:VP";
 #ifdef HAVE_LIBSELINUX
                int max_nr_opt = (int)sizeof(c.seopt_file) /
                        sizeof(c.seopt_file[0]);
@@ -685,6 +686,9 @@ void f2fs_parse_options(int argc, char *argv[])
                        case 'V':
                                show_version(prog);
                                exit(0);
+                       case 'P':
+                               c.preserve_perms = 1;
+                               break;
                        default:
                                err = EUNKNOWN_OPT;
                                break;
index 4dea78b..6929023 100644 (file)
@@ -187,6 +187,11 @@ static void set_inode_metadata(struct dentry *de)
        else
                de->mtime = c.fixed_time;
 
+       if (c.preserve_perms) {
+               de->uid = stat.st_uid;
+               de->gid = stat.st_gid;
+       }
+
        set_perms_and_caps(de);
 }
 
index a51a359..cdcce2c 100644 (file)
@@ -505,6 +505,7 @@ struct f2fs_configuration {
        struct selinux_opt seopt_file[8];
        int nr_opt;
 #endif
+       int preserve_perms;
 
        /* resize parameters */
        int safe_resize;
index c165b35..ed5ee4b 100644 (file)
@@ -18,6 +18,9 @@ sload.f2fs \- load directories and files into the device directly
 .I debugging-level
 ]
 [
+.B \-P
+]
+[
 .B \-c
 [
 .B \-L
@@ -66,6 +69,10 @@ Specify the mount point path in the partition to load.
 Specify the level of debugging options.
 The default number is 0, which shows basic debugging messages.
 .TP
+.BI \-P
+Preserve owner: user and group.
+The user and group of the source files will be taken into account.
+.TP
 .BI \-c
 Enable a cluster-based file compression.
 The file would be chopped into clusters, and each cluster is compressed