X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fservice.c;h=e1dab70f816eb2a9ccb8b67e4ad0e2455c1d8440;hp=ba60b8f8796f16ba3543538d658794b418dda258;hb=4eab639f92c0e4fa1a1baee5575bf3bc21810dcf;hpb=4cd1fbcc0648a289e9bf9d9047621bbdf7ec0ece diff --git a/src/service.c b/src/service.c index ba60b8f87..e1dab70f8 100644 --- a/src/service.c +++ b/src/service.c @@ -817,7 +817,12 @@ static int service_verify(Service *s) { } if (s->type == SERVICE_DBUS && !s->bus_name) { - log_error("%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s)->meta.id); + log_error("%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", s->meta.id); + return -EINVAL; + } + + if (s->exec_context.pam_name && s->kill_mode != KILL_CONTROL_GROUP) { + log_error("%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", s->meta.id); return -EINVAL; } @@ -1582,13 +1587,16 @@ fail: } static void service_enter_running(Service *s, bool success) { + int main_pid_ok, cgroup_ok; assert(s); if (!success) s->failure = true; - if (main_pid_good(s) != 0 && - cgroup_good(s) != 0 && + main_pid_ok = main_pid_good(s); + cgroup_ok = cgroup_good(s); + + if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) && (s->bus_name_good || s->type != SERVICE_DBUS)) service_set_state(s, SERVICE_RUNNING); else if (s->valid_no_process)