X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fexecute.c;h=c19f613641c2952c8ce52104b087de07c951e1ca;hb=8c8549db376ce9325e5a7547959ab7d9218505b7;hp=5cfd4a1f97537d289fa86a8f8bde972751a0d3e5;hpb=a931ad47a8623163a29d898224d8a8c1177ffdaf;p=elogind.git diff --git a/src/core/execute.c b/src/core/execute.c index 5cfd4a1f9..c19f61364 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -83,6 +83,7 @@ #include "af-list.h" #include "mkdir.h" #include "apparmor-util.h" +#include "smack-util.h" #include "bus-kernel.h" #include "label.h" @@ -425,12 +426,13 @@ static int setup_output(const ExecContext *context, int fileno, int socket_fd, c case EXEC_OUTPUT_JOURNAL_AND_CONSOLE: r = connect_logger_as(context, o, ident, unit_id, fileno); if (r < 0) { - log_struct_unit(LOG_CRIT, unit_id, - "MESSAGE=Failed to connect std%s of %s to the journal socket: %s", - fileno == STDOUT_FILENO ? "out" : "err", - unit_id, strerror(-r), - "ERRNO=%d", -r, - NULL); + log_unit_struct(unit_id, + LOG_CRIT, + LOG_MESSAGE("Failed to connect %s of %s to the journal socket: %s", + fileno == STDOUT_FILENO ? "stdout" : "stderr", + unit_id, strerror(-r)), + LOG_ERRNO(-r), + NULL); r = open_null_as(O_WRONLY, fileno); } return r; @@ -821,7 +823,7 @@ static int setup_pam( * If this fails, ignore the error - but expect sd-pam threads * to fail to exit normally */ if (setresuid(uid, uid, uid) < 0) - log_error("Error: Failed to setresuid() in sd-pam: %s", strerror(-r)); + log_error_errno(r, "Error: Failed to setresuid() in sd-pam: %m"); /* Wait until our parent died. This will only work if * the above setresuid() succeeds, otherwise the kernel @@ -883,7 +885,7 @@ fail: log_error("PAM failed: %s", pam_strerror(handle, pam_code)); err = -EPERM; /* PAM errors do not map to errno */ } else { - log_error("PAM failed: %m"); + log_error_errno(errno, "PAM failed: %m"); err = -errno; } @@ -1548,7 +1550,7 @@ static int exec_child(ExecCommand *command, context->mount_flags); 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)); + log_unit_warning_errno(params->unit_id, err, "Failed to set up file system namespace due to lack of privileges. Execution sandbox will not be in effect: %m"); else if (err < 0) { *error = EXIT_NAMESPACE; return err; @@ -1618,6 +1620,16 @@ static int exec_child(ExecCommand *command, } } +#ifdef HAVE_SMACK + if (context->smack_process_label) { + err = mac_smack_apply_pid(0, context->smack_process_label); + if (err < 0) { + *error = EXIT_SMACK_PROCESS_LABEL; + return err; + } + } +#endif + if (context->user) { err = enforce_user(context, uid); if (err < 0) { @@ -1740,10 +1752,10 @@ static int exec_child(ExecCommand *command, line = exec_command_line(final_argv); if (line) { log_open(); - log_struct_unit(LOG_DEBUG, - params->unit_id, + log_unit_struct(params->unit_id, + LOG_DEBUG, "EXECUTABLE=%s", command->path, - "MESSAGE=Executing: %s", line, + LOG_MESSAGE("Executing: %s", line), NULL); log_close(); } @@ -1788,11 +1800,11 @@ int exec_spawn(ExecCommand *command, err = exec_context_load_environment(context, params->unit_id, &files_env); if (err < 0) { - log_struct_unit(LOG_ERR, - params->unit_id, - "MESSAGE=Failed to load environment files: %s", strerror(-err), - "ERRNO=%d", -err, - NULL); + log_unit_struct(params->unit_id, + LOG_ERR, + LOG_MESSAGE("Failed to load environment files: %s", strerror(-err)), + LOG_ERRNO(-err), + NULL); return err; } @@ -1802,10 +1814,10 @@ int exec_spawn(ExecCommand *command, if (!line) return log_oom(); - log_struct_unit(LOG_DEBUG, - params->unit_id, + log_unit_struct(params->unit_id, + LOG_DEBUG, "EXECUTABLE=%s", command->path, - "MESSAGE=About to execute: %s", line, + LOG_MESSAGE("About to execute: %s", line), NULL); free(line); @@ -1827,12 +1839,13 @@ int exec_spawn(ExecCommand *command, &r); if (r != 0) { log_open(); - log_struct(LOG_ERR, MESSAGE_ID(SD_MESSAGE_SPAWN_FAILED), + log_struct(LOG_ERR, + LOG_MESSAGE_ID(SD_MESSAGE_SPAWN_FAILED), "EXECUTABLE=%s", command->path, - "MESSAGE=Failed at step %s spawning %s: %s", - exit_status_to_string(r, EXIT_STATUS_SYSTEMD), - command->path, strerror(-err), - "ERRNO=%d", -err, + LOG_MESSAGE("Failed at step %s spawning %s: %s", + exit_status_to_string(r, EXIT_STATUS_SYSTEMD), + command->path, strerror(-err)), + LOG_ERRNO(-err), NULL); log_close(); } @@ -1840,10 +1853,10 @@ int exec_spawn(ExecCommand *command, _exit(r); } - log_struct_unit(LOG_DEBUG, - params->unit_id, - "MESSAGE=Forked %s as "PID_FMT, - command->path, pid, + log_unit_struct(params->unit_id, + LOG_DEBUG, + LOG_MESSAGE("Forked %s as "PID_FMT, + command->path, pid), NULL); /* We add the new process to the cgroup both in the child (so @@ -2760,7 +2773,7 @@ int exec_runtime_deserialize_item(ExecRuntime **rt, Unit *u, const char *key, co return r; if (safe_atoi(value, &fd) < 0 || !fdset_contains(fds, fd)) - log_debug_unit(u->id, "Failed to parse netns socket value %s", value); + log_unit_debug(u->id, "Failed to parse netns socket value %s", value); else { safe_close((*rt)->netns_storage_socket[0]); (*rt)->netns_storage_socket[0] = fdset_remove(fds, fd); @@ -2773,7 +2786,7 @@ int exec_runtime_deserialize_item(ExecRuntime **rt, Unit *u, const char *key, co return r; if (safe_atoi(value, &fd) < 0 || !fdset_contains(fds, fd)) - log_debug_unit(u->id, "Failed to parse netns socket value %s", value); + log_unit_debug(u->id, "Failed to parse netns socket value %s", value); else { safe_close((*rt)->netns_storage_socket[1]); (*rt)->netns_storage_socket[1] = fdset_remove(fds, fd); @@ -2806,7 +2819,7 @@ void exec_runtime_destroy(ExecRuntime *rt) { r = asynchronous_job(remove_tmpdir_thread, rt->tmp_dir); if (r < 0) { - log_warning("Failed to nuke %s: %s", rt->tmp_dir, strerror(-r)); + log_warning_errno(r, "Failed to nuke %s: %m", rt->tmp_dir); free(rt->tmp_dir); } @@ -2818,7 +2831,7 @@ void exec_runtime_destroy(ExecRuntime *rt) { r = asynchronous_job(remove_tmpdir_thread, rt->var_tmp_dir); if (r < 0) { - log_warning("Failed to nuke %s: %s", rt->var_tmp_dir, strerror(-r)); + log_warning_errno(r, "Failed to nuke %s: %m", rt->var_tmp_dir); free(rt->var_tmp_dir); }