X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fexecute.c;h=c41aec222de06e3e4eacbbe6aa96aebc8616b309;hb=7c52a17b1a31eedd40093a4fbb460cf492087d9b;hp=07ec7a28d642bb5b069973ca4bb9c9bee1deff58;hpb=86b23b07c96b185126bfbf217227dad362a20c25;p=elogind.git diff --git a/src/core/execute.c b/src/core/execute.c index 07ec7a28d..c41aec222 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -1545,7 +1545,10 @@ static int exec_child(ExecCommand *command, context->protect_home, context->protect_system, context->mount_flags); - if (err < 0) { + + if (err == -EPERM) + log_warning_unit(params->unit_id, "Failed to set up file system namespace due to lack of privileges. Execution sandbox will not be in effect: %s", strerror(-err)); + else if (err < 0) { *error = EXIT_NAMESPACE; return err; } @@ -1666,7 +1669,7 @@ static int exec_child(ExecCommand *command, #endif #ifdef HAVE_SELINUX - if (use_selinux()) { + if (mac_selinux_use()) { if (context->selinux_context) { err = setexeccon(context->selinux_context); if (err < 0 && !context->selinux_context_ignore) { @@ -1678,7 +1681,7 @@ static int exec_child(ExecCommand *command, if (params->selinux_context_net && socket_fd >= 0) { _cleanup_free_ char *label = NULL; - err = label_get_child_mls_label(socket_fd, command->path, &label); + err = mac_selinux_get_child_mls_label(socket_fd, command->path, &label); if (err < 0) { *error = EXIT_SELINUX_CONTEXT; return err; @@ -1694,11 +1697,11 @@ static int exec_child(ExecCommand *command, #endif #ifdef HAVE_APPARMOR - if (context->apparmor_profile && use_apparmor()) { + if (context->apparmor_profile && mac_apparmor_use()) { err = aa_change_onexec(context->apparmor_profile); if (err < 0 && !context->apparmor_profile_ignore) { *error = EXIT_APPARMOR_PROFILE; - return err; + return -errno; } } #endif @@ -1782,7 +1785,7 @@ int exec_spawn(ExecCommand *command, n_fds = params->n_fds; } - err = exec_context_load_environment(context, &files_env); + err = exec_context_load_environment(context, params->unit_id, &files_env); if (err < 0) { log_struct_unit(LOG_ERR, params->unit_id, @@ -2011,7 +2014,7 @@ void exec_command_free_array(ExecCommand **c, unsigned n) { } } -int exec_context_load_environment(const ExecContext *c, char ***l) { +int exec_context_load_environment(const ExecContext *c, const char *unit_id, char ***l) { char **i, **r = NULL; assert(c); @@ -2068,7 +2071,7 @@ int exec_context_load_environment(const ExecContext *c, char ***l) { } /* Log invalid environment variables with filename */ if (p) - p = strv_env_clean_log(p, pglob.gl_pathv[n]); + p = strv_env_clean_log(p, unit_id, pglob.gl_pathv[n]); if (r == NULL) r = p; @@ -2567,8 +2570,8 @@ int exec_command_set(ExecCommand *c, const char *path, ...) { } int exec_command_append(ExecCommand *c, const char *path, ...) { + _cleanup_strv_free_ char **l = NULL; va_list ap; - char **l; int r; assert(c); @@ -2582,10 +2585,8 @@ int exec_command_append(ExecCommand *c, const char *path, ...) { return -ENOMEM; r = strv_extend_strv(&c->argv, l); - if (r < 0) { - strv_free(l); + if (r < 0) return r; - } return 0; }