diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/basic/missing.h | 4 | ||||
-rw-r--r-- | src/machine/machine-dbus.c | 8 | ||||
-rw-r--r-- | src/machine/machinectl.c | 16 | ||||
-rw-r--r-- | src/sysctl/sysctl.c | 4 |
4 files changed, 24 insertions, 8 deletions
diff --git a/src/basic/missing.h b/src/basic/missing.h index ed6cd80c75..34ab0254dd 100644 --- a/src/basic/missing.h +++ b/src/basic/missing.h @@ -977,7 +977,11 @@ static inline int raw_clone(unsigned long flags, void *child_stack) { } static inline pid_t raw_getpid(void) { +#if defined(__alpha__) + return (pid_t) syscall(__NR_getxpid); +#else return (pid_t) syscall(__NR_getpid); +#endif } #if !HAVE_DECL_RENAMEAT2 diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c index dc42ffdc52..7658d7146d 100644 --- a/src/machine/machine-dbus.c +++ b/src/machine/machine-dbus.c @@ -825,13 +825,13 @@ int bus_machine_method_copy(sd_bus_message *message, void *userdata, sd_bus_erro if (r < 0) return r; - if (!path_is_absolute(src) || !path_is_safe(src)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Source path must be absolute and not contain ../."); + if (!path_is_absolute(src)) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Source path must be absolute."); if (isempty(dest)) dest = src; - else if (!path_is_absolute(dest) || !path_is_safe(dest)) - return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Destination path must be absolute and not contain ../."); + else if (!path_is_absolute(dest)) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Destination path must be absolute."); r = bus_verify_polkit_async( message, diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index 7cb6ce77ac..66ed41087c 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -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; diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c index fe277a2015..618844382f 100644 --- a/src/sysctl/sysctl.c +++ b/src/sysctl/sysctl.c @@ -51,8 +51,8 @@ static int apply_all(Hashmap *sysctl_options) { k = sysctl_write(property, value); if (k < 0) { - log_full_errno(k == -ENOENT ? LOG_DEBUG : LOG_WARNING, k, - "Failed to write '%s' to '%s': %m", value, property); + log_full_errno(k == -ENOENT ? LOG_INFO : LOG_WARNING, k, + "Couldn't write '%s' to '%s', ignoring: %m", value, property); if (r == 0 && k != -ENOENT) r = k; |