]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
machinectl: support relative host paths in copy-{from,to} 855/head
authorRichard Maw <richard.maw@codethink.co.uk>
Fri, 31 Jul 2015 15:24:09 +0000 (15:24 +0000)
committerRichard Maw <richard.maw@codethink.co.uk>
Tue, 4 Aug 2015 09:11:23 +0000 (09:11 +0000)
src/machine/machinectl.c

index 7cb6ce77ac927f64480cb562f4f0d6d47314893a..66ed41087c61f83c447a3b90cd56a5744385cd5d 100644 (file)
@@ -1073,6 +1073,8 @@ static int terminate_machine(int argc, char *argv[], void *userdata) {
 
 static int copy_files(int argc, char *argv[], void *userdata) {
         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_free_ char *abs_host_path = NULL;
+        char *dest, *host_path, *container_path;
         sd_bus *bus = userdata;
         bool copy_from;
         int r;
@@ -1082,6 +1084,16 @@ static int copy_files(int argc, char *argv[], void *userdata) {
         polkit_agent_open_if_enabled();
 
         copy_from = streq(argv[0], "copy-from");
+        dest = argv[3] ?: argv[2];
+        host_path = copy_from ? dest : argv[2];
+        container_path = copy_from ? argv[2] : dest;
+
+        if (!path_is_absolute(host_path)) {
+                abs_host_path = path_make_absolute_cwd(host_path);
+                if (!abs_host_path)
+                        return log_oom();
+                host_path = abs_host_path;
+        }
 
         r = sd_bus_call_method(
                         bus,
@@ -1093,8 +1105,8 @@ static int copy_files(int argc, char *argv[], void *userdata) {
                         NULL,
                         "sss",
                         argv[1],
-                        argv[2],
-                        argv[3]);
+                        copy_from ? container_path : host_path,
+                        copy_from ? host_path : container_path);
         if (r < 0) {
                 log_error("Failed to copy: %s", bus_error_message(&error, -r));
                 return r;