]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
rsync: remove obsolete helpers
authorChristian Brauner <christian.brauner@ubuntu.com>
Sat, 29 Jul 2017 16:12:10 +0000 (18:12 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Mon, 31 Jul 2017 21:34:18 +0000 (23:34 +0200)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/storage/aufs.c
src/lxc/storage/lvm.c
src/lxc/storage/rsync.c
src/lxc/storage/rsync.h

index 0ba5288e6b1102de86afb711df5cb3dbf784770e..312c32bcd6c48b470b88b7f7e91bb080a959dfdd 100644 (file)
@@ -40,11 +40,41 @@ lxc_log_define(aufs, lxc);
 extern char *dir_new_path(char *src, const char *oldname, const char *name,
                const char *oldpath, const char *lxcpath);
 
+int lxc_rsync_delta(struct rsync_data_char *data)
+{
+       int ret;
+
+       ret = lxc_switch_uid_gid(0, 0);
+       if (ret < 0)
+               return -1;
+
+       ret = lxc_setgroups(0, NULL);
+       if (ret < 0)
+               return -1;
+
+       ret = lxc_rsync_exec(data->src, data->dest);
+       if (ret < 0) {
+               ERROR("Failed to rsync from \"%s\" into \"%s\"", data->src,
+                     data->dest);
+               return -1;
+       }
+
+       return 0;
+}
+
+int lxc_rsync_delta_wrapper(void *data)
+{
+       struct rsync_data_char *arg = data;
+       return lxc_rsync_delta(arg);
+}
+
 int aufs_clonepaths(struct lxc_storage *orig, struct lxc_storage *new,
                    const char *oldname, const char *cname, const char *oldpath,
                    const char *lxcpath, int snap, uint64_t newsize,
                    struct lxc_conf *conf)
 {
+       char cmd_output[MAXPATHLEN];
+
        if (!snap) {
                ERROR("aufs is only for snapshot clones");
                return -22;
@@ -134,10 +164,12 @@ int aufs_clonepaths(struct lxc_storage *orig, struct lxc_storage *new,
                rdata.src = odelta;
                rdata.dest = ndelta;
                if (am_unpriv())
-                       ret = userns_exec_1(conf, rsync_delta_wrapper, &rdata,
-                                           "rsync_delta_wrapper");
+                       ret = userns_exec_1(conf, lxc_rsync_delta_wrapper,
+                                           &rdata, "lxc_rsync_delta_wrapper");
                else
-                       ret = rsync_delta(&rdata);
+                       ret = run_command(cmd_output, sizeof(cmd_output),
+                                         lxc_rsync_delta_wrapper,
+                                         (void *)&rdata);
                if (ret) {
                        free(osrc);
                        free(ndelta);
index 97fcce0bd9cc5dd54cb9b14d105c6ee851af1a9a..fc3a2c48572244e70e0f2e1df11fe7efc76c66cf 100644 (file)
@@ -464,7 +464,7 @@ bool lvm_create_clone(struct lxc_conf *conf, struct lxc_storage *orig,
        int ret;
        struct rsync_data data;
        char *cmd_args[2];
-       char cmd_output[MAXPATHLEN];
+       char cmd_output[MAXPATHLEN] = {0};
        char fstype[100] = "ext4";
        uint64_t size = newsize;
 
@@ -506,7 +506,8 @@ bool lvm_create_clone(struct lxc_conf *conf, struct lxc_storage *orig,
 
        data.orig = orig;
        data.new = new;
-       ret = rsync_rootfs(&data);
+       ret = run_command(cmd_output, sizeof(cmd_output),
+                         lxc_rsync_exec_wrapper, (void *)&data);
        if (ret < 0) {
                ERROR("Failed to rsync from \"%s\" to \"%s\"", orig->dest,
                      new->dest);
index 7fbd0a774836e2050085ea6749902d5ef9d28a21..e50f4152b4c73be0615fdbc58bdb9dccc8700e9d 100644 (file)
 
 lxc_log_define(rsync, lxc);
 
-/* the bulk of this needs to become a common helper */
-int do_rsync(const char *src, const char *dest)
-{
-       // call out to rsync
-       pid_t pid;
-       char *s;
-       size_t l;
-
-       pid = fork();
-       if (pid < 0)
-               return -1;
-       if (pid > 0)
-               return wait_for_pid(pid);
-
-       l = strlen(src) + 2;
-       s = malloc(l);
-       if (!s)
-               exit(1);
-       strcpy(s, src);
-       s[l-2] = '/';
-       s[l-1] = '\0';
-
-       execlp("rsync", "rsync", "-aHXS", "--delete", s, dest, (char *)NULL);
-       exit(1);
-}
-
-int rsync_delta(struct rsync_data_char *data)
-{
-       if (setgid(0) < 0) {
-               ERROR("Failed to setgid to 0");
-               return -1;
-       }
-       if (setgroups(0, NULL) < 0)
-               WARN("Failed to clear groups");
-       if (setuid(0) < 0) {
-               ERROR("Failed to setuid to 0");
-               return -1;
-       }
-       if (do_rsync(data->src, data->dest) < 0) {
-               ERROR("rsyncing %s to %s", data->src, data->dest);
-               return -1;
-       }
-
-       return 0;
-}
-
-int rsync_delta_wrapper(void *data)
-{
-       struct rsync_data_char *arg = data;
-       return rsync_delta(arg);
-}
-
-int rsync_rootfs(struct rsync_data *data)
-{
-       struct lxc_storage *orig = data->orig, *new = data->new;
-
-       if (unshare(CLONE_NEWNS) < 0) {
-               SYSERROR("unshare CLONE_NEWNS");
-               return -1;
-       }
-       if (detect_shared_rootfs()) {
-               if (mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL)) {
-                       SYSERROR("Failed to make / rslave");
-                       ERROR("Continuing...");
-               }
-       }
-
-       // If not a snapshot, copy the fs.
-       if (orig->ops->mount(orig) < 0) {
-               ERROR("failed mounting %s onto %s", orig->src, orig->dest);
-               return -1;
-       }
-       if (new->ops->mount(new) < 0) {
-               ERROR("failed mounting %s onto %s", new->src, new->dest);
-               return -1;
-       }
-       if (setgid(0) < 0) {
-               ERROR("Failed to setgid to 0");
-               return -1;
-       }
-       if (setgroups(0, NULL) < 0)
-               WARN("Failed to clear groups");
-       if (setuid(0) < 0) {
-               ERROR("Failed to setuid to 0");
-               return -1;
-       }
-       if (do_rsync(orig->dest, new->dest) < 0) {
-               ERROR("rsyncing %s to %s", orig->src, new->src);
-               return -1;
-       }
-
-       return 0;
-}
-
-int rsync_rootfs_wrapper(void *data)
-{
-       struct rsync_data *arg = data;
-       return rsync_rootfs(arg);
-}
-
-/* new helpers */
 int lxc_rsync_exec_wrapper(void *data)
 {
        struct rsync_data *arg = data;
index 430b0220cccef0fdb383de12c9c71c15a9599f07..d8581fe400baa9b070467fd0166cf4af72287b43 100644 (file)
@@ -37,12 +37,6 @@ struct rsync_data_char {
        char *dest;
 };
 
-int do_rsync(const char *src, const char *dest);
-int rsync_delta_wrapper(void *data);
-int rsync_delta(struct rsync_data_char *data);
-int rsync_rootfs(struct rsync_data *data);
-int rsync_rootfs_wrapper(void *data);
-
 /* new helpers */
 extern int lxc_rsync_exec_wrapper(void *data);
 extern int lxc_rsync_exec(const char *src, const char *dest);