X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fservice.c;h=017d292a8b70d3db51003c45b5ec1d7171c50a90;hb=3f141375cb4ff4f850b267258e776c90df594990;hp=70b251f0bb8402fcc541224bc1b34e6b3dd82d19;hpb=85a3fa0e1979a13683baa1f3dda6b6d0005f20ab;p=elogind.git diff --git a/src/core/service.c b/src/core/service.c index 70b251f0b..017d292a8 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -359,13 +359,6 @@ static int sysv_translate_facility(const char *name, const char *filename, char "remote_fs", SPECIAL_REMOTE_FS_TARGET, "syslog", SPECIAL_SYSLOG_TARGET, "time", SPECIAL_TIME_SYNC_TARGET, - - /* common extensions */ - "mail-transfer-agent", SPECIAL_MAIL_TRANSFER_AGENT_TARGET, - "x-display-manager", SPECIAL_DISPLAY_MANAGER_SERVICE, - "null", NULL, - "mail-transport-agent", SPECIAL_MAIL_TRANSFER_AGENT_TARGET, - "smtp", SPECIAL_MAIL_TRANSFER_AGENT_TARGET, }; unsigned i; @@ -815,7 +808,6 @@ static int service_load_sysv_path(Service *s, const char *path) { } r = sysv_translate_facility(n, path_get_file_name(path), &m); - if (r < 0) { log_error_unit(u->id, "[%s:%u] Failed to translate LSB dependency %s, ignoring: %s", @@ -1012,14 +1004,14 @@ static int service_load_sysv_name(Service *s, const char *name) { r = service_load_sysv_path(s, path); if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) { - /* Try Debian style *.sh source'able init scripts */ + /* Try *.sh source'able init scripts */ strcat(path, ".sh"); r = service_load_sysv_path(s, path); } free(path); if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) { - /* Try Frugalware style rc.* init scripts */ + /* Try rc.* init scripts */ path = strjoin(*p, "/rc.", name, NULL); if (!path) @@ -2926,15 +2918,25 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) { s->main_pid = 0; exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status); - /* If this is not a forking service than the main - * process got started and hence we copy the exit - * status so that it is recorded both as main and as - * control process exit status */ if (s->main_command) { + /* If this is not a forking service than the + * main process got started and hence we copy + * the exit status so that it is recorded both + * as main and as control process exit + * status */ + s->main_command->exec_status = s->main_exec_status; if (s->main_command->ignore) f = SERVICE_SUCCESS; + } else if (s->exec_command[SERVICE_EXEC_START]) { + + /* If this is a forked process, then we should + * ignore the return value if this was + * configured for the starter process */ + + if (s->exec_command[SERVICE_EXEC_START]->ignore) + f = SERVICE_SUCCESS; } log_struct(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,