chiark / gitweb /
3a2ef015708311fd6bb3a0a838428c8504eb5407
[elogind.git] / src / core / service.c
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 /***
4   This file is part of systemd.
5
6   Copyright 2010 Lennart Poettering
7
8   systemd is free software; you can redistribute it and/or modify it
9   under the terms of the GNU Lesser General Public License as published by
10   the Free Software Foundation; either version 2.1 of the License, or
11   (at your option) any later version.
12
13   systemd is distributed in the hope that it will be useful, but
14   WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16   Lesser General Public License for more details.
17
18   You should have received a copy of the GNU Lesser General Public License
19   along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 ***/
21
22 #include <errno.h>
23 #include <signal.h>
24 #include <dirent.h>
25 #include <unistd.h>
26 #include <sys/reboot.h>
27
28 #include "manager.h"
29 #include "unit.h"
30 #include "service.h"
31 #include "load-fragment.h"
32 #include "load-dropin.h"
33 #include "log.h"
34 #include "strv.h"
35 #include "unit-name.h"
36 #include "unit-printf.h"
37 #include "dbus-service.h"
38 #include "special.h"
39 #include "exit-status.h"
40 #include "def.h"
41 #include "path-util.h"
42 #include "util.h"
43 #include "utf8.h"
44 #include "env-util.h"
45 #include "fileio.h"
46 #include "bus-error.h"
47 #include "bus-util.h"
48
49 #ifdef HAVE_SYSV_COMPAT
50
51 #define DEFAULT_SYSV_TIMEOUT_USEC (5*USEC_PER_MINUTE)
52
53 typedef enum RunlevelType {
54         RUNLEVEL_UP,
55         RUNLEVEL_DOWN
56 } RunlevelType;
57
58 static const struct {
59         const char *path;
60         const char *target;
61         const RunlevelType type;
62 } rcnd_table[] = {
63         /* Standard SysV runlevels for start-up */
64         { "rc1.d",  SPECIAL_RESCUE_TARGET,    RUNLEVEL_UP },
65         { "rc2.d",  SPECIAL_RUNLEVEL2_TARGET, RUNLEVEL_UP },
66         { "rc3.d",  SPECIAL_RUNLEVEL3_TARGET, RUNLEVEL_UP },
67         { "rc4.d",  SPECIAL_RUNLEVEL4_TARGET, RUNLEVEL_UP },
68         { "rc5.d",  SPECIAL_RUNLEVEL5_TARGET, RUNLEVEL_UP },
69
70         /* Standard SysV runlevels for shutdown */
71         { "rc0.d",  SPECIAL_POWEROFF_TARGET,  RUNLEVEL_DOWN },
72         { "rc6.d",  SPECIAL_REBOOT_TARGET,    RUNLEVEL_DOWN }
73
74         /* Note that the order here matters, as we read the
75            directories in this order, and we want to make sure that
76            sysv_start_priority is known when we first load the
77            unit. And that value we only know from S links. Hence
78            UP must be read before DOWN */
79 };
80
81 #define RUNLEVELS_UP "12345"
82 #endif
83
84 static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
85         [SERVICE_DEAD] = UNIT_INACTIVE,
86         [SERVICE_START_PRE] = UNIT_ACTIVATING,
87         [SERVICE_START] = UNIT_ACTIVATING,
88         [SERVICE_START_POST] = UNIT_ACTIVATING,
89         [SERVICE_RUNNING] = UNIT_ACTIVE,
90         [SERVICE_EXITED] = UNIT_ACTIVE,
91         [SERVICE_RELOAD] = UNIT_RELOADING,
92         [SERVICE_STOP] = UNIT_DEACTIVATING,
93         [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
94         [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
95         [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
96         [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
97         [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
98         [SERVICE_FAILED] = UNIT_FAILED,
99         [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
100 };
101
102 /* For Type=idle we never want to delay any other jobs, hence we
103  * consider idle jobs active as soon as we start working on them */
104 static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] = {
105         [SERVICE_DEAD] = UNIT_INACTIVE,
106         [SERVICE_START_PRE] = UNIT_ACTIVE,
107         [SERVICE_START] = UNIT_ACTIVE,
108         [SERVICE_START_POST] = UNIT_ACTIVE,
109         [SERVICE_RUNNING] = UNIT_ACTIVE,
110         [SERVICE_EXITED] = UNIT_ACTIVE,
111         [SERVICE_RELOAD] = UNIT_RELOADING,
112         [SERVICE_STOP] = UNIT_DEACTIVATING,
113         [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
114         [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
115         [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
116         [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
117         [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
118         [SERVICE_FAILED] = UNIT_FAILED,
119         [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
120 };
121
122 static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata);
123 static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
124 static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata);
125
126 static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
127
128 static void service_init(Unit *u) {
129         Service *s = SERVICE(u);
130
131         assert(u);
132         assert(u->load_state == UNIT_STUB);
133
134         s->timeout_start_usec = u->manager->default_timeout_start_usec;
135         s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
136         s->restart_usec = u->manager->default_restart_usec;
137         s->type = _SERVICE_TYPE_INVALID;
138
139 #ifdef HAVE_SYSV_COMPAT
140         s->sysv_start_priority = -1;
141         s->sysv_start_priority_from_rcnd = -1;
142 #endif
143         s->socket_fd = -1;
144         s->guess_main_pid = true;
145
146         exec_context_init(&s->exec_context);
147         kill_context_init(&s->kill_context);
148         cgroup_context_init(&s->cgroup_context);
149
150         RATELIMIT_INIT(s->start_limit,
151                        u->manager->default_start_limit_interval,
152                        u->manager->default_start_limit_burst);
153
154         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
155 }
156
157 static void service_unwatch_control_pid(Service *s) {
158         assert(s);
159
160         if (s->control_pid <= 0)
161                 return;
162
163         unit_unwatch_pid(UNIT(s), s->control_pid);
164         s->control_pid = 0;
165 }
166
167 static void service_unwatch_main_pid(Service *s) {
168         assert(s);
169
170         if (s->main_pid <= 0)
171                 return;
172
173         unit_unwatch_pid(UNIT(s), s->main_pid);
174         s->main_pid = 0;
175 }
176
177 static void service_unwatch_pid_file(Service *s) {
178         if (!s->pid_file_pathspec)
179                 return;
180
181         log_debug_unit(UNIT(s)->id, "Stopping watch for %s's PID file %s",
182                        UNIT(s)->id, s->pid_file_pathspec->path);
183         path_spec_unwatch(s->pid_file_pathspec);
184         path_spec_done(s->pid_file_pathspec);
185         free(s->pid_file_pathspec);
186         s->pid_file_pathspec = NULL;
187 }
188
189 static int service_set_main_pid(Service *s, pid_t pid) {
190         pid_t ppid;
191
192         assert(s);
193
194         if (pid <= 1)
195                 return -EINVAL;
196
197         if (pid == getpid())
198                 return -EINVAL;
199
200         if (s->main_pid == pid && s->main_pid_known)
201                 return 0;
202
203         if (s->main_pid != pid) {
204                 service_unwatch_main_pid(s);
205                 exec_status_start(&s->main_exec_status, pid);
206         }
207
208         s->main_pid = pid;
209         s->main_pid_known = true;
210
211         if (get_parent_of_pid(pid, &ppid) >= 0 && ppid != getpid()) {
212                 log_warning_unit(UNIT(s)->id,
213                                  "%s: Supervising process "PID_FMT" which is not our child. We'll most likely not notice when it exits.",
214                                  UNIT(s)->id, pid);
215
216                 s->main_pid_alien = true;
217         } else
218                 s->main_pid_alien = false;
219
220         return 0;
221 }
222
223 static void service_close_socket_fd(Service *s) {
224         assert(s);
225
226         if (s->socket_fd < 0)
227                 return;
228
229         close_nointr_nofail(s->socket_fd);
230         s->socket_fd = -1;
231 }
232
233 static void service_connection_unref(Service *s) {
234         assert(s);
235
236         if (!UNIT_ISSET(s->accept_socket))
237                 return;
238
239         socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
240         unit_ref_unset(&s->accept_socket);
241 }
242
243 static void service_stop_watchdog(Service *s) {
244         assert(s);
245
246         s->watchdog_event_source = sd_event_source_unref(s->watchdog_event_source);
247         s->watchdog_timestamp = DUAL_TIMESTAMP_NULL;
248 }
249
250 static void service_start_watchdog(Service *s) {
251         int r;
252
253         assert(s);
254
255         if (s->watchdog_usec <= 0)
256                 return;
257
258         if (s->watchdog_event_source) {
259                 r = sd_event_source_set_time(s->watchdog_event_source, s->watchdog_timestamp.monotonic + s->watchdog_usec);
260                 if (r < 0) {
261                         log_warning_unit(UNIT(s)->id, "%s failed to reset watchdog timer: %s", UNIT(s)->id, strerror(-r));
262                         return;
263                 }
264
265                 r = sd_event_source_set_enabled(s->watchdog_event_source, SD_EVENT_ONESHOT);
266         } else {
267                 r = sd_event_add_monotonic(UNIT(s)->manager->event, s->watchdog_timestamp.monotonic + s->watchdog_usec, 0, service_dispatch_watchdog, s, &s->watchdog_event_source);
268                 if (r < 0) {
269                         log_warning_unit(UNIT(s)->id, "%s failed to add watchdog timer: %s", UNIT(s)->id, strerror(-r));
270                         return;
271                 }
272
273                 /* Let's process everything else which might be a sign
274                  * of living before we consider a service died. */
275                 r = sd_event_source_set_priority(s->watchdog_event_source, SD_EVENT_PRIORITY_IDLE);
276         }
277
278         if (r < 0)
279                 log_warning_unit(UNIT(s)->id, "%s failed to install watchdog timer: %s", UNIT(s)->id, strerror(-r));
280 }
281
282 static void service_reset_watchdog(Service *s) {
283         assert(s);
284
285         dual_timestamp_get(&s->watchdog_timestamp);
286         service_start_watchdog(s);
287 }
288
289 static void service_done(Unit *u) {
290         Service *s = SERVICE(u);
291
292         assert(s);
293
294         free(s->pid_file);
295         s->pid_file = NULL;
296
297 #ifdef HAVE_SYSV_COMPAT
298         free(s->sysv_runlevels);
299         s->sysv_runlevels = NULL;
300 #endif
301
302         free(s->status_text);
303         s->status_text = NULL;
304
305         cgroup_context_done(&s->cgroup_context);
306         exec_context_done(&s->exec_context);
307         s->exec_runtime = exec_runtime_unref(s->exec_runtime);
308         exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
309         s->control_command = NULL;
310         s->main_command = NULL;
311
312         set_free(s->restart_ignore_status.code);
313         s->restart_ignore_status.code = NULL;
314         set_free(s->restart_ignore_status.signal);
315         s->restart_ignore_status.signal = NULL;
316
317         set_free(s->success_status.code);
318         s->success_status.code = NULL;
319         set_free(s->success_status.signal);
320         s->success_status.signal = NULL;
321
322         /* This will leak a process, but at least no memory or any of
323          * our resources */
324         service_unwatch_main_pid(s);
325         service_unwatch_control_pid(s);
326         service_unwatch_pid_file(s);
327
328         if (s->bus_name)  {
329                 unit_unwatch_bus_name(u, s->bus_name);
330                 free(s->bus_name);
331                 s->bus_name = NULL;
332         }
333
334         service_close_socket_fd(s);
335         service_connection_unref(s);
336
337         unit_ref_unset(&s->accept_socket);
338
339         service_stop_watchdog(s);
340
341         s->timer_event_source = sd_event_source_unref(s->timer_event_source);
342 }
343
344 static int service_arm_timer(Service *s, usec_t usec) {
345         int r;
346
347         assert(s);
348
349         if (s->timer_event_source) {
350                 r = sd_event_source_set_time(s->timer_event_source, now(CLOCK_MONOTONIC) + usec);
351                 if (r < 0)
352                         return r;
353
354                 return sd_event_source_set_enabled(s->timer_event_source, SD_EVENT_ONESHOT);
355         }
356
357         return sd_event_add_monotonic(UNIT(s)->manager->event, now(CLOCK_MONOTONIC) + usec, 0, service_dispatch_timer, s, &s->timer_event_source);
358 }
359
360 #ifdef HAVE_SYSV_COMPAT
361 static char *sysv_translate_name(const char *name) {
362         char *r;
363
364         r = new(char, strlen(name) + sizeof(".service"));
365         if (!r)
366                 return NULL;
367
368         if (endswith(name, ".sh"))
369                 /* Drop .sh suffix */
370                 strcpy(stpcpy(r, name) - 3, ".service");
371         else
372                 /* Normal init script name */
373                 strcpy(stpcpy(r, name), ".service");
374
375         return r;
376 }
377
378 static int sysv_translate_facility(const char *name, const char *filename, char **_r) {
379
380         /* We silently ignore the $ prefix here. According to the LSB
381          * spec it simply indicates whether something is a
382          * standardized name or a distribution-specific one. Since we
383          * just follow what already exists and do not introduce new
384          * uses or names we don't care who introduced a new name. */
385
386         static const char * const table[] = {
387                 /* LSB defined facilities */
388                 "local_fs",             NULL,
389                 "network",              SPECIAL_NETWORK_TARGET,
390                 "named",                SPECIAL_NSS_LOOKUP_TARGET,
391                 "portmap",              SPECIAL_RPCBIND_TARGET,
392                 "remote_fs",            SPECIAL_REMOTE_FS_TARGET,
393                 "syslog",               NULL,
394                 "time",                 SPECIAL_TIME_SYNC_TARGET,
395         };
396
397         unsigned i;
398         char *r;
399         const char *n;
400
401         assert(name);
402         assert(_r);
403
404         n = *name == '$' ? name + 1 : name;
405
406         for (i = 0; i < ELEMENTSOF(table); i += 2) {
407
408                 if (!streq(table[i], n))
409                         continue;
410
411                 if (!table[i+1])
412                         return 0;
413
414                 r = strdup(table[i+1]);
415                 if (!r)
416                         return log_oom();
417
418                 goto finish;
419         }
420
421         /* If we don't know this name, fallback heuristics to figure
422          * out whether something is a target or a service alias. */
423
424         if (*name == '$') {
425                 if (!unit_prefix_is_valid(n))
426                         return -EINVAL;
427
428                 /* Facilities starting with $ are most likely targets */
429                 r = unit_name_build(n, NULL, ".target");
430         } else if (filename && streq(name, filename))
431                 /* Names equaling the file name of the services are redundant */
432                 return 0;
433         else
434                 /* Everything else we assume to be normal service names */
435                 r = sysv_translate_name(n);
436
437         if (!r)
438                 return -ENOMEM;
439
440 finish:
441         *_r = r;
442
443         return 1;
444 }
445
446 static int sysv_fix_order(Service *s) {
447         Unit *other;
448         int r;
449
450         assert(s);
451
452         if (s->sysv_start_priority < 0)
453                 return 0;
454
455         /* For each pair of services where at least one lacks a LSB
456          * header, we use the start priority value to order things. */
457
458         LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_SERVICE]) {
459                 Service *t;
460                 UnitDependency d;
461                 bool special_s, special_t;
462
463                 t = SERVICE(other);
464
465                 if (s == t)
466                         continue;
467
468                 if (UNIT(t)->load_state != UNIT_LOADED)
469                         continue;
470
471                 if (t->sysv_start_priority < 0)
472                         continue;
473
474                 /* If both units have modern headers we don't care
475                  * about the priorities */
476                 if ((UNIT(s)->fragment_path || s->sysv_has_lsb) &&
477                     (UNIT(t)->fragment_path || t->sysv_has_lsb))
478                         continue;
479
480                 special_s = s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels);
481                 special_t = t->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, t->sysv_runlevels);
482
483                 if (special_t && !special_s)
484                         d = UNIT_AFTER;
485                 else if (special_s && !special_t)
486                         d = UNIT_BEFORE;
487                 else if (t->sysv_start_priority < s->sysv_start_priority)
488                         d = UNIT_AFTER;
489                 else if (t->sysv_start_priority > s->sysv_start_priority)
490                         d = UNIT_BEFORE;
491                 else
492                         continue;
493
494                 /* FIXME: Maybe we should compare the name here lexicographically? */
495
496                 if ((r = unit_add_dependency(UNIT(s), d, UNIT(t), true)) < 0)
497                         return r;
498         }
499
500         return 0;
501 }
502
503 static ExecCommand *exec_command_new(const char *path, const char *arg1) {
504         ExecCommand *c;
505
506         if (!(c = new0(ExecCommand, 1)))
507                 return NULL;
508
509         if (!(c->path = strdup(path))) {
510                 free(c);
511                 return NULL;
512         }
513
514         if (!(c->argv = strv_new(path, arg1, NULL))) {
515                 free(c->path);
516                 free(c);
517                 return NULL;
518         }
519
520         return c;
521 }
522
523 static int sysv_exec_commands(Service *s, const bool supports_reload) {
524         ExecCommand *c;
525
526         assert(s);
527         assert(s->is_sysv);
528         assert(UNIT(s)->source_path);
529
530         c = exec_command_new(UNIT(s)->source_path, "start");
531         if (!c)
532                 return -ENOMEM;
533         exec_command_append_list(s->exec_command+SERVICE_EXEC_START, c);
534
535         c = exec_command_new(UNIT(s)->source_path, "stop");
536         if (!c)
537                 return -ENOMEM;
538         exec_command_append_list(s->exec_command+SERVICE_EXEC_STOP, c);
539
540         if (supports_reload) {
541                 c = exec_command_new(UNIT(s)->source_path, "reload");
542                 if (!c)
543                         return -ENOMEM;
544                 exec_command_append_list(s->exec_command+SERVICE_EXEC_RELOAD, c);
545         }
546
547         return 0;
548 }
549
550 static bool usage_contains_reload(const char *line) {
551         return (strcasestr(line, "{reload|") ||
552                 strcasestr(line, "{reload}") ||
553                 strcasestr(line, "{reload\"") ||
554                 strcasestr(line, "|reload|") ||
555                 strcasestr(line, "|reload}") ||
556                 strcasestr(line, "|reload\""));
557 }
558
559 static int service_load_sysv_path(Service *s, const char *path) {
560         FILE *f;
561         Unit *u;
562         unsigned line = 0;
563         int r;
564         enum {
565                 NORMAL,
566                 DESCRIPTION,
567                 LSB,
568                 LSB_DESCRIPTION,
569                 USAGE_CONTINUATION
570         } state = NORMAL;
571         char *short_description = NULL, *long_description = NULL, *chkconfig_description = NULL, *description;
572         struct stat st;
573         bool supports_reload = false;
574
575         assert(s);
576         assert(path);
577
578         u = UNIT(s);
579
580         f = fopen(path, "re");
581         if (!f) {
582                 r = errno == ENOENT ? 0 : -errno;
583                 goto finish;
584         }
585
586         if (fstat(fileno(f), &st) < 0) {
587                 r = -errno;
588                 goto finish;
589         }
590
591         free(u->source_path);
592         u->source_path = strdup(path);
593         if (!u->source_path) {
594                 r = -ENOMEM;
595                 goto finish;
596         }
597         u->source_mtime = timespec_load(&st.st_mtim);
598
599         if (null_or_empty(&st)) {
600                 u->load_state = UNIT_MASKED;
601                 r = 0;
602                 goto finish;
603         }
604
605         s->is_sysv = true;
606
607         while (!feof(f)) {
608                 char l[LINE_MAX], *t;
609
610                 if (!fgets(l, sizeof(l), f)) {
611                         if (feof(f))
612                                 break;
613
614                         r = -errno;
615                         log_error_unit(u->id,
616                                        "Failed to read configuration file '%s': %s",
617                                        path, strerror(-r));
618                         goto finish;
619                 }
620
621                 line++;
622
623                 t = strstrip(l);
624                 if (*t != '#') {
625                         /* Try to figure out whether this init script supports
626                          * the reload operation. This heuristic looks for
627                          * "Usage" lines which include the reload option. */
628                         if ( state == USAGE_CONTINUATION ||
629                             (state == NORMAL && strcasestr(t, "usage"))) {
630                                 if (usage_contains_reload(t)) {
631                                         supports_reload = true;
632                                         state = NORMAL;
633                                 } else if (t[strlen(t)-1] == '\\')
634                                         state = USAGE_CONTINUATION;
635                                 else
636                                         state = NORMAL;
637                         }
638
639                         continue;
640                 }
641
642                 if (state == NORMAL && streq(t, "### BEGIN INIT INFO")) {
643                         state = LSB;
644                         s->sysv_has_lsb = true;
645                         continue;
646                 }
647
648                 if ((state == LSB_DESCRIPTION || state == LSB) && streq(t, "### END INIT INFO")) {
649                         state = NORMAL;
650                         continue;
651                 }
652
653                 t++;
654                 t += strspn(t, WHITESPACE);
655
656                 if (state == NORMAL) {
657
658                         /* Try to parse Red Hat style chkconfig headers */
659
660                         if (startswith_no_case(t, "chkconfig:")) {
661                                 int start_priority;
662                                 char runlevels[16], *k;
663
664                                 state = NORMAL;
665
666                                 if (sscanf(t+10, "%15s %i %*i",
667                                            runlevels,
668                                            &start_priority) != 2) {
669
670                                         log_warning_unit(u->id,
671                                                          "[%s:%u] Failed to parse chkconfig line. Ignoring.",
672                                                          path, line);
673                                         continue;
674                                 }
675
676                                 /* A start priority gathered from the
677                                  * symlink farms is preferred over the
678                                  * data from the LSB header. */
679                                 if (start_priority < 0 || start_priority > 99)
680                                         log_warning_unit(u->id,
681                                                          "[%s:%u] Start priority out of range. Ignoring.",
682                                                          path, line);
683                                 else
684                                         s->sysv_start_priority = start_priority;
685
686                                 char_array_0(runlevels);
687                                 k = delete_chars(runlevels, WHITESPACE "-");
688
689                                 if (k[0]) {
690                                         char *d;
691
692                                         if (!(d = strdup(k))) {
693                                                 r = -ENOMEM;
694                                                 goto finish;
695                                         }
696
697                                         free(s->sysv_runlevels);
698                                         s->sysv_runlevels = d;
699                                 }
700
701                         } else if (startswith_no_case(t, "description:")) {
702
703                                 size_t k = strlen(t);
704                                 char *d;
705                                 const char *j;
706
707                                 if (t[k-1] == '\\') {
708                                         state = DESCRIPTION;
709                                         t[k-1] = 0;
710                                 }
711
712                                 if ((j = strstrip(t+12)) && *j) {
713                                         if (!(d = strdup(j))) {
714                                                 r = -ENOMEM;
715                                                 goto finish;
716                                         }
717                                 } else
718                                         d = NULL;
719
720                                 free(chkconfig_description);
721                                 chkconfig_description = d;
722
723                         } else if (startswith_no_case(t, "pidfile:")) {
724
725                                 char *fn;
726
727                                 state = NORMAL;
728
729                                 fn = strstrip(t+8);
730                                 if (!path_is_absolute(fn)) {
731                                         log_warning_unit(u->id,
732                                                          "[%s:%u] PID file not absolute. Ignoring.",
733                                                          path, line);
734                                         continue;
735                                 }
736
737                                 if (!(fn = strdup(fn))) {
738                                         r = -ENOMEM;
739                                         goto finish;
740                                 }
741
742                                 free(s->pid_file);
743                                 s->pid_file = fn;
744                         }
745
746                 } else if (state == DESCRIPTION) {
747
748                         /* Try to parse Red Hat style description
749                          * continuation */
750
751                         size_t k = strlen(t);
752                         char *j;
753
754                         if (t[k-1] == '\\')
755                                 t[k-1] = 0;
756                         else
757                                 state = NORMAL;
758
759                         if ((j = strstrip(t)) && *j) {
760                                 char *d = NULL;
761
762                                 if (chkconfig_description)
763                                         d = strjoin(chkconfig_description, " ", j, NULL);
764                                 else
765                                         d = strdup(j);
766
767                                 if (!d) {
768                                         r = -ENOMEM;
769                                         goto finish;
770                                 }
771
772                                 free(chkconfig_description);
773                                 chkconfig_description = d;
774                         }
775
776                 } else if (state == LSB || state == LSB_DESCRIPTION) {
777
778                         if (startswith_no_case(t, "Provides:")) {
779                                 char *i, *w;
780                                 size_t z;
781
782                                 state = LSB;
783
784                                 FOREACH_WORD_QUOTED(w, z, t+9, i) {
785                                         char *n, *m;
786
787                                         if (!(n = strndup(w, z))) {
788                                                 r = -ENOMEM;
789                                                 goto finish;
790                                         }
791
792                                         r = sysv_translate_facility(n, basename(path), &m);
793                                         free(n);
794
795                                         if (r < 0)
796                                                 goto finish;
797
798                                         if (r == 0)
799                                                 continue;
800
801                                         if (unit_name_to_type(m) == UNIT_SERVICE)
802                                                 r = unit_merge_by_name(u, m);
803                                         else
804                                                 /* NB: SysV targets
805                                                  * which are provided
806                                                  * by a service are
807                                                  * pulled in by the
808                                                  * services, as an
809                                                  * indication that the
810                                                  * generic service is
811                                                  * now available. This
812                                                  * is strictly
813                                                  * one-way. The
814                                                  * targets do NOT pull
815                                                  * in the SysV
816                                                  * services! */
817                                                 r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, UNIT_WANTS, m, NULL, true);
818
819                                         if (r < 0)
820                                                 log_error_unit(u->id,
821                                                                "[%s:%u] Failed to add LSB Provides name %s, ignoring: %s",
822                                                                path, line, m, strerror(-r));
823
824                                         free(m);
825                                 }
826
827                         } else if (startswith_no_case(t, "Required-Start:") ||
828                                    startswith_no_case(t, "Should-Start:") ||
829                                    startswith_no_case(t, "X-Start-Before:") ||
830                                    startswith_no_case(t, "X-Start-After:")) {
831                                 char *i, *w;
832                                 size_t z;
833
834                                 state = LSB;
835
836                                 FOREACH_WORD_QUOTED(w, z, strchr(t, ':')+1, i) {
837                                         char *n, *m;
838
839                                         if (!(n = strndup(w, z))) {
840                                                 r = -ENOMEM;
841                                                 goto finish;
842                                         }
843
844                                         r = sysv_translate_facility(n, basename(path), &m);
845                                         if (r < 0) {
846                                                 log_error_unit(u->id,
847                                                                "[%s:%u] Failed to translate LSB dependency %s, ignoring: %s",
848                                                                path, line, n, strerror(-r));
849                                                 free(n);
850                                                 continue;
851                                         }
852
853                                         free(n);
854
855                                         if (r == 0)
856                                                 continue;
857
858                                         r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true);
859
860                                         if (r < 0)
861                                                 log_error_unit(u->id, "[%s:%u] Failed to add dependency on %s, ignoring: %s",
862                                                                path, line, m, strerror(-r));
863
864                                         free(m);
865                                 }
866                         } else if (startswith_no_case(t, "Default-Start:")) {
867                                 char *k, *d;
868
869                                 state = LSB;
870
871                                 k = delete_chars(t+14, WHITESPACE "-");
872
873                                 if (k[0] != 0) {
874                                         if (!(d = strdup(k))) {
875                                                 r = -ENOMEM;
876                                                 goto finish;
877                                         }
878
879                                         free(s->sysv_runlevels);
880                                         s->sysv_runlevels = d;
881                                 }
882
883                         } else if (startswith_no_case(t, "Description:")) {
884                                 char *d, *j;
885
886                                 state = LSB_DESCRIPTION;
887
888                                 if ((j = strstrip(t+12)) && *j) {
889                                         if (!(d = strdup(j))) {
890                                                 r = -ENOMEM;
891                                                 goto finish;
892                                         }
893                                 } else
894                                         d = NULL;
895
896                                 free(long_description);
897                                 long_description = d;
898
899                         } else if (startswith_no_case(t, "Short-Description:")) {
900                                 char *d, *j;
901
902                                 state = LSB;
903
904                                 if ((j = strstrip(t+18)) && *j) {
905                                         if (!(d = strdup(j))) {
906                                                 r = -ENOMEM;
907                                                 goto finish;
908                                         }
909                                 } else
910                                         d = NULL;
911
912                                 free(short_description);
913                                 short_description = d;
914
915                         } else if (state == LSB_DESCRIPTION) {
916
917                                 if (startswith(l, "#\t") || startswith(l, "#  ")) {
918                                         char *j;
919
920                                         if ((j = strstrip(t)) && *j) {
921                                                 char *d = NULL;
922
923                                                 if (long_description)
924                                                         d = strjoin(long_description, " ", t, NULL);
925                                                 else
926                                                         d = strdup(j);
927
928                                                 if (!d) {
929                                                         r = -ENOMEM;
930                                                         goto finish;
931                                                 }
932
933                                                 free(long_description);
934                                                 long_description = d;
935                                         }
936
937                                 } else
938                                         state = LSB;
939                         }
940                 }
941         }
942
943         if ((r = sysv_exec_commands(s, supports_reload)) < 0)
944                 goto finish;
945
946         if (s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels)) {
947                 /* If there a runlevels configured for this service
948                  * but none of the standard ones, then we assume this
949                  * is some special kind of service (which might be
950                  * needed for early boot) and don't create any links
951                  * to it. */
952
953                 UNIT(s)->default_dependencies = false;
954
955                 /* Don't timeout special services during boot (like fsck) */
956                 s->timeout_start_usec = 0;
957                 s->timeout_stop_usec = 0;
958         } else {
959                 s->timeout_start_usec = DEFAULT_SYSV_TIMEOUT_USEC;
960                 s->timeout_stop_usec = DEFAULT_SYSV_TIMEOUT_USEC;
961         }
962
963         /* Special setting for all SysV services */
964         s->type = SERVICE_FORKING;
965         s->remain_after_exit = !s->pid_file;
966         s->guess_main_pid = false;
967         s->restart = SERVICE_RESTART_NO;
968         s->exec_context.ignore_sigpipe = false;
969         s->kill_context.kill_mode = KILL_PROCESS;
970
971         /* We use the long description only if
972          * no short description is set. */
973
974         if (short_description)
975                 description = short_description;
976         else if (chkconfig_description)
977                 description = chkconfig_description;
978         else if (long_description)
979                 description = long_description;
980         else
981                 description = NULL;
982
983         if (description) {
984                 char *d;
985
986                 if (!(d = strappend(s->sysv_has_lsb ? "LSB: " : "SYSV: ", description))) {
987                         r = -ENOMEM;
988                         goto finish;
989                 }
990
991                 u->description = d;
992         }
993
994         /* The priority that has been set in /etc/rcN.d/ hierarchies
995          * takes precedence over what is stored as default in the LSB
996          * header */
997         if (s->sysv_start_priority_from_rcnd >= 0)
998                 s->sysv_start_priority = s->sysv_start_priority_from_rcnd;
999
1000         u->load_state = UNIT_LOADED;
1001         r = 0;
1002
1003 finish:
1004
1005         if (f)
1006                 fclose(f);
1007
1008         free(short_description);
1009         free(long_description);
1010         free(chkconfig_description);
1011
1012         return r;
1013 }
1014
1015 static int service_load_sysv_name(Service *s, const char *name) {
1016         char **p;
1017
1018         assert(s);
1019         assert(name);
1020
1021         /* For SysV services we strip the *.sh suffixes. */
1022         if (endswith(name, ".sh.service"))
1023                 return -ENOENT;
1024
1025         STRV_FOREACH(p, UNIT(s)->manager->lookup_paths.sysvinit_path) {
1026                 char *path;
1027                 int r;
1028
1029                 path = strjoin(*p, "/", name, NULL);
1030                 if (!path)
1031                         return -ENOMEM;
1032
1033                 assert(endswith(path, ".service"));
1034                 path[strlen(path)-8] = 0;
1035
1036                 r = service_load_sysv_path(s, path);
1037
1038                 if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
1039                         /* Try *.sh source'able init scripts */
1040                         strcat(path, ".sh");
1041                         r = service_load_sysv_path(s, path);
1042                 }
1043                 free(path);
1044
1045                 if (r < 0)
1046                         return r;
1047
1048                 if (UNIT(s)->load_state != UNIT_STUB)
1049                         break;
1050         }
1051
1052         return 0;
1053 }
1054
1055 static int service_load_sysv(Service *s) {
1056         const char *t;
1057         Iterator i;
1058         int r;
1059
1060         assert(s);
1061
1062         /* Load service data from SysV init scripts, preferably with
1063          * LSB headers ... */
1064
1065         if (strv_isempty(UNIT(s)->manager->lookup_paths.sysvinit_path))
1066                 return 0;
1067
1068         if ((t = UNIT(s)->id))
1069                 if ((r = service_load_sysv_name(s, t)) < 0)
1070                         return r;
1071
1072         if (UNIT(s)->load_state == UNIT_STUB)
1073                 SET_FOREACH(t, UNIT(s)->names, i) {
1074                         if (t == UNIT(s)->id)
1075                                 continue;
1076
1077                         if ((r = service_load_sysv_name(s, t)) < 0)
1078                                 return r;
1079
1080                         if (UNIT(s)->load_state != UNIT_STUB)
1081                                 break;
1082                 }
1083
1084         return 0;
1085 }
1086 #endif
1087
1088 static int service_verify(Service *s) {
1089         assert(s);
1090
1091         if (UNIT(s)->load_state != UNIT_LOADED)
1092                 return 0;
1093
1094         if (!s->exec_command[SERVICE_EXEC_START]) {
1095                 log_error_unit(UNIT(s)->id, "%s lacks ExecStart setting. Refusing.", UNIT(s)->id);
1096                 return -EINVAL;
1097         }
1098
1099         if (s->type != SERVICE_ONESHOT &&
1100             s->exec_command[SERVICE_EXEC_START]->command_next) {
1101                 log_error_unit(UNIT(s)->id, "%s has more than one ExecStart setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
1102                 return -EINVAL;
1103         }
1104
1105         if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
1106                 log_error_unit(UNIT(s)->id, "%s has Restart setting other than no, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
1107                 return -EINVAL;
1108         }
1109
1110         if (s->type == SERVICE_DBUS && !s->bus_name) {
1111                 log_error_unit(UNIT(s)->id, "%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s)->id);
1112                 return -EINVAL;
1113         }
1114
1115         if (s->bus_name && s->type != SERVICE_DBUS)
1116                 log_warning_unit(UNIT(s)->id, "%s has a D-Bus service name specified, but is not of type dbus. Ignoring.", UNIT(s)->id);
1117
1118         if (s->exec_context.pam_name && !(s->kill_context.kill_mode == KILL_CONTROL_GROUP || s->kill_context.kill_mode == KILL_MIXED)) {
1119                 log_error_unit(UNIT(s)->id, "%s has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.", UNIT(s)->id);
1120                 return -EINVAL;
1121         }
1122
1123         return 0;
1124 }
1125
1126 static int service_add_default_dependencies(Service *s) {
1127         int r;
1128
1129         assert(s);
1130
1131         /* Add a number of automatic dependencies useful for the
1132          * majority of services. */
1133
1134         /* First, pull in base system */
1135         r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES,
1136                                               SPECIAL_BASIC_TARGET, NULL, true);
1137         if (r < 0)
1138                 return r;
1139
1140         /* Second, activate normal shutdown */
1141         r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS,
1142                                               SPECIAL_SHUTDOWN_TARGET, NULL, true);
1143         return r;
1144 }
1145
1146 static void service_fix_output(Service *s) {
1147         assert(s);
1148
1149         /* If nothing has been explicitly configured, patch default
1150          * output in. If input is socket/tty we avoid this however,
1151          * since in that case we want output to default to the same
1152          * place as we read input from. */
1153
1154         if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
1155             s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1156             s->exec_context.std_input == EXEC_INPUT_NULL)
1157                 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
1158
1159         if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1160             s->exec_context.std_input == EXEC_INPUT_NULL)
1161                 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
1162 }
1163
1164 static int service_load(Unit *u) {
1165         int r;
1166         Service *s = SERVICE(u);
1167
1168         assert(s);
1169
1170         /* Load a .service file */
1171         r = unit_load_fragment(u);
1172         if (r < 0)
1173                 return r;
1174
1175 #ifdef HAVE_SYSV_COMPAT
1176         /* Load a classic init script as a fallback, if we couldn't find anything */
1177         if (u->load_state == UNIT_STUB) {
1178                 r = service_load_sysv(s);
1179                 if (r < 0)
1180                         return r;
1181         }
1182 #endif
1183
1184         /* Still nothing found? Then let's give up */
1185         if (u->load_state == UNIT_STUB)
1186                 return -ENOENT;
1187
1188         /* This is a new unit? Then let's add in some extras */
1189         if (u->load_state == UNIT_LOADED) {
1190
1191                 /* We were able to load something, then let's add in
1192                  * the dropin directories. */
1193                 r = unit_load_dropin(u);
1194                 if (r < 0)
1195                         return r;
1196
1197                 if (s->type == _SERVICE_TYPE_INVALID)
1198                         s->type = s->bus_name ? SERVICE_DBUS : SERVICE_SIMPLE;
1199
1200                 /* Oneshot services have disabled start timeout by default */
1201                 if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
1202                         s->timeout_start_usec = 0;
1203
1204                 service_fix_output(s);
1205
1206                 r = unit_add_exec_dependencies(u, &s->exec_context);
1207                 if (r < 0)
1208                         return r;
1209
1210                 r = unit_add_default_slice(u);
1211                 if (r < 0)
1212                         return r;
1213
1214 #ifdef HAVE_SYSV_COMPAT
1215                 r = sysv_fix_order(s);
1216                 if (r < 0)
1217                         return r;
1218 #endif
1219
1220                 if (s->bus_name) {
1221                         r = unit_watch_bus_name(u, s->bus_name);
1222                         if (r < 0)
1223                                 return r;
1224                 }
1225
1226                 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
1227                         s->notify_access = NOTIFY_MAIN;
1228
1229                 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
1230                         s->notify_access = NOTIFY_MAIN;
1231
1232                 if (UNIT(s)->default_dependencies) {
1233                         r = service_add_default_dependencies(s);
1234                         if (r < 0)
1235                                 return r;
1236                 }
1237
1238                 r = unit_exec_context_defaults(u, &s->exec_context);
1239                 if (r < 0)
1240                         return r;
1241         }
1242
1243         return service_verify(s);
1244 }
1245
1246 static void service_dump(Unit *u, FILE *f, const char *prefix) {
1247
1248         ServiceExecCommand c;
1249         Service *s = SERVICE(u);
1250         const char *prefix2;
1251         _cleanup_free_ char *p2 = NULL;
1252
1253         assert(s);
1254
1255         p2 = strappend(prefix, "\t");
1256         prefix2 = p2 ? p2 : prefix;
1257
1258         fprintf(f,
1259                 "%sService State: %s\n"
1260                 "%sResult: %s\n"
1261                 "%sReload Result: %s\n"
1262                 "%sPermissionsStartOnly: %s\n"
1263                 "%sRootDirectoryStartOnly: %s\n"
1264                 "%sRemainAfterExit: %s\n"
1265                 "%sGuessMainPID: %s\n"
1266                 "%sType: %s\n"
1267                 "%sRestart: %s\n"
1268                 "%sNotifyAccess: %s\n",
1269                 prefix, service_state_to_string(s->state),
1270                 prefix, service_result_to_string(s->result),
1271                 prefix, service_result_to_string(s->reload_result),
1272                 prefix, yes_no(s->permissions_start_only),
1273                 prefix, yes_no(s->root_directory_start_only),
1274                 prefix, yes_no(s->remain_after_exit),
1275                 prefix, yes_no(s->guess_main_pid),
1276                 prefix, service_type_to_string(s->type),
1277                 prefix, service_restart_to_string(s->restart),
1278                 prefix, notify_access_to_string(s->notify_access));
1279
1280         if (s->control_pid > 0)
1281                 fprintf(f,
1282                         "%sControl PID: "PID_FMT"\n",
1283                         prefix, s->control_pid);
1284
1285         if (s->main_pid > 0)
1286                 fprintf(f,
1287                         "%sMain PID: "PID_FMT"\n"
1288                         "%sMain PID Known: %s\n"
1289                         "%sMain PID Alien: %s\n",
1290                         prefix, s->main_pid,
1291                         prefix, yes_no(s->main_pid_known),
1292                         prefix, yes_no(s->main_pid_alien));
1293
1294         if (s->pid_file)
1295                 fprintf(f,
1296                         "%sPIDFile: %s\n",
1297                         prefix, s->pid_file);
1298
1299         if (s->bus_name)
1300                 fprintf(f,
1301                         "%sBusName: %s\n"
1302                         "%sBus Name Good: %s\n",
1303                         prefix, s->bus_name,
1304                         prefix, yes_no(s->bus_name_good));
1305
1306         kill_context_dump(&s->kill_context, f, prefix);
1307         exec_context_dump(&s->exec_context, f, prefix);
1308
1309         for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
1310
1311                 if (!s->exec_command[c])
1312                         continue;
1313
1314                 fprintf(f, "%s-> %s:\n",
1315                         prefix, service_exec_command_to_string(c));
1316
1317                 exec_command_dump_list(s->exec_command[c], f, prefix2);
1318         }
1319
1320 #ifdef HAVE_SYSV_COMPAT
1321         if (s->is_sysv)
1322                 fprintf(f,
1323                         "%sSysV Init Script has LSB Header: %s\n"
1324                         "%sSysVEnabled: %s\n",
1325                         prefix, yes_no(s->sysv_has_lsb),
1326                         prefix, yes_no(s->sysv_enabled));
1327
1328         if (s->sysv_start_priority >= 0)
1329                 fprintf(f,
1330                         "%sSysVStartPriority: %i\n",
1331                         prefix, s->sysv_start_priority);
1332
1333         if (s->sysv_runlevels)
1334                 fprintf(f, "%sSysVRunLevels: %s\n",
1335                         prefix, s->sysv_runlevels);
1336 #endif
1337
1338         if (s->status_text)
1339                 fprintf(f, "%sStatus Text: %s\n",
1340                         prefix, s->status_text);
1341 }
1342
1343 static int service_load_pid_file(Service *s, bool may_warn) {
1344         _cleanup_free_ char *k = NULL;
1345         int r;
1346         pid_t pid;
1347
1348         assert(s);
1349
1350         if (!s->pid_file)
1351                 return -ENOENT;
1352
1353         r = read_one_line_file(s->pid_file, &k);
1354         if (r < 0) {
1355                 if (may_warn)
1356                         log_info_unit(UNIT(s)->id,
1357                                       "PID file %s not readable (yet?) after %s.",
1358                                       s->pid_file, service_state_to_string(s->state));
1359                 return r;
1360         }
1361
1362         r = parse_pid(k, &pid);
1363         if (r < 0) {
1364                 if (may_warn)
1365                         log_info_unit(UNIT(s)->id,
1366                                       "Failed to read PID from file %s: %s",
1367                                       s->pid_file, strerror(-r));
1368                 return r;
1369         }
1370
1371         if (kill(pid, 0) < 0 && errno != EPERM) {
1372                 if (may_warn)
1373                         log_info_unit(UNIT(s)->id,
1374                                       "PID "PID_FMT" read from file %s does not exist.",
1375                                       pid, s->pid_file);
1376                 return -ESRCH;
1377         }
1378
1379         if (get_process_state(pid) == 'Z') {
1380                 if (may_warn)
1381                         log_info_unit(UNIT(s)->id,
1382                                       "PID "PID_FMT" read from file %s is a zombie.",
1383                                       pid, s->pid_file);
1384                 return -ESRCH;
1385         }
1386
1387         if (s->main_pid_known) {
1388                 if (pid == s->main_pid)
1389                         return 0;
1390
1391                 log_debug_unit(UNIT(s)->id,
1392                                "Main PID changing: "PID_FMT" -> "PID_FMT,
1393                                s->main_pid, pid);
1394                 service_unwatch_main_pid(s);
1395                 s->main_pid_known = false;
1396         } else
1397                 log_debug_unit(UNIT(s)->id,
1398                                "Main PID loaded: "PID_FMT, pid);
1399
1400         r = service_set_main_pid(s, pid);
1401         if (r < 0)
1402                 return r;
1403
1404         r = unit_watch_pid(UNIT(s), pid);
1405         if (r < 0) {
1406                 /* FIXME: we need to do something here */
1407                 log_warning_unit(UNIT(s)->id,
1408                                  "Failed to watch PID "PID_FMT" from service %s",
1409                                  pid, UNIT(s)->id);
1410                 return r;
1411         }
1412
1413         return 0;
1414 }
1415
1416 static int service_search_main_pid(Service *s) {
1417         pid_t pid;
1418         int r;
1419
1420         assert(s);
1421
1422         /* If we know it anyway, don't ever fallback to unreliable
1423          * heuristics */
1424         if (s->main_pid_known)
1425                 return 0;
1426
1427         if (!s->guess_main_pid)
1428                 return 0;
1429
1430         assert(s->main_pid <= 0);
1431
1432         pid = unit_search_main_pid(UNIT(s));
1433         if (pid <= 0)
1434                 return -ENOENT;
1435
1436         log_debug_unit(UNIT(s)->id,
1437                        "Main PID guessed: "PID_FMT, pid);
1438         r = service_set_main_pid(s, pid);
1439         if (r < 0)
1440                 return r;
1441
1442         r = unit_watch_pid(UNIT(s), pid);
1443         if (r < 0)
1444                 /* FIXME: we need to do something here */
1445                 log_warning_unit(UNIT(s)->id,
1446                                  "Failed to watch PID "PID_FMT" from service %s",
1447                                  pid, UNIT(s)->id);
1448                 return r;
1449
1450         return 0;
1451 }
1452
1453 static void service_set_state(Service *s, ServiceState state) {
1454         ServiceState old_state;
1455         const UnitActiveState *table;
1456
1457         assert(s);
1458
1459         table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1460
1461         old_state = s->state;
1462         s->state = state;
1463
1464         service_unwatch_pid_file(s);
1465
1466         if (!IN_SET(state,
1467                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1468                     SERVICE_RELOAD,
1469                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1470                     SERVICE_STOP_POST,
1471                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
1472                     SERVICE_AUTO_RESTART))
1473                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1474
1475         if (!IN_SET(state,
1476                     SERVICE_START, SERVICE_START_POST,
1477                     SERVICE_RUNNING, SERVICE_RELOAD,
1478                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1479                     SERVICE_STOP_POST,
1480                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1481                 service_unwatch_main_pid(s);
1482                 s->main_command = NULL;
1483         }
1484
1485         if (!IN_SET(state,
1486                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1487                     SERVICE_RELOAD,
1488                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1489                     SERVICE_STOP_POST,
1490                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1491                 service_unwatch_control_pid(s);
1492                 s->control_command = NULL;
1493                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1494         }
1495
1496         if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1497                 unit_unwatch_all_pids(UNIT(s));
1498
1499         if (!IN_SET(state,
1500                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1501                     SERVICE_RUNNING, SERVICE_RELOAD,
1502                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1503                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
1504             !(state == SERVICE_DEAD && UNIT(s)->job)) {
1505                 service_close_socket_fd(s);
1506                 service_connection_unref(s);
1507         }
1508
1509         if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1510                 service_stop_watchdog(s);
1511
1512         /* For the inactive states unit_notify() will trim the cgroup,
1513          * but for exit we have to do that ourselves... */
1514         if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
1515                 unit_destroy_cgroup(UNIT(s));
1516
1517         /* For remain_after_exit services, let's see if we can "release" the
1518          * hold on the console, since unit_notify() only does that in case of
1519          * change of state */
1520         if (state == SERVICE_EXITED && s->remain_after_exit &&
1521             UNIT(s)->manager->n_on_console > 0) {
1522                 ExecContext *ec = unit_get_exec_context(UNIT(s));
1523                 if (ec && exec_context_may_touch_console(ec)) {
1524                         Manager *m = UNIT(s)->manager;
1525
1526                         m->n_on_console --;
1527                         if (m->n_on_console == 0)
1528                                 /* unset no_console_output flag, since the console is free */
1529                                 m->no_console_output = false;
1530                 }
1531         }
1532
1533         if (old_state != state)
1534                 log_debug_unit(UNIT(s)->id, "%s changed %s -> %s", UNIT(s)->id, service_state_to_string(old_state), service_state_to_string(state));
1535
1536         unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
1537         s->reload_result = SERVICE_SUCCESS;
1538 }
1539
1540 static int service_coldplug(Unit *u) {
1541         Service *s = SERVICE(u);
1542         int r;
1543
1544         assert(s);
1545         assert(s->state == SERVICE_DEAD);
1546
1547         if (s->deserialized_state != s->state) {
1548
1549                 if (IN_SET(s->deserialized_state,
1550                            SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1551                            SERVICE_RELOAD,
1552                            SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1553                            SERVICE_STOP_POST,
1554                            SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1555
1556                         usec_t k;
1557
1558                         k = IN_SET(s->deserialized_state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec;
1559
1560                         /* For the start/stop timeouts 0 means off */
1561                         if (k > 0) {
1562                                 r = service_arm_timer(s, k);
1563                                 if (r < 0)
1564                                         return r;
1565                         }
1566                 }
1567
1568                 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
1569
1570                         /* The restart timeouts 0 means immediately */
1571                         r = service_arm_timer(s, s->restart_usec);
1572                         if (r < 0)
1573                                 return r;
1574                 }
1575
1576                 if (pid_valid(s->main_pid) &&
1577                     ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
1578                      IN_SET(s->deserialized_state,
1579                             SERVICE_START, SERVICE_START_POST,
1580                             SERVICE_RUNNING, SERVICE_RELOAD,
1581                             SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1582                             SERVICE_STOP_POST,
1583                             SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
1584                         r = unit_watch_pid(UNIT(s), s->main_pid);
1585                         if (r < 0)
1586                                 return r;
1587                 }
1588
1589                 if (pid_valid(s->control_pid) &&
1590                     IN_SET(s->deserialized_state,
1591                            SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1592                            SERVICE_RELOAD,
1593                            SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1594                            SERVICE_STOP_POST,
1595                            SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1596                         r = unit_watch_pid(UNIT(s), s->control_pid);
1597                         if (r < 0)
1598                                 return r;
1599                 }
1600
1601                 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1602                         unit_watch_all_pids(UNIT(s));
1603
1604                 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1605                         service_start_watchdog(s);
1606
1607                 service_set_state(s, s->deserialized_state);
1608         }
1609
1610         return 0;
1611 }
1612
1613 static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1614         Iterator i;
1615         int r;
1616         int *rfds = NULL;
1617         unsigned rn_fds = 0;
1618         Unit *u;
1619
1620         assert(s);
1621         assert(fds);
1622         assert(n_fds);
1623
1624         if (s->socket_fd >= 0)
1625                 return 0;
1626
1627         SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
1628                 int *cfds;
1629                 unsigned cn_fds;
1630                 Socket *sock;
1631
1632                 if (u->type != UNIT_SOCKET)
1633                         continue;
1634
1635                 sock = SOCKET(u);
1636
1637                 r = socket_collect_fds(sock, &cfds, &cn_fds);
1638                 if (r < 0)
1639                         goto fail;
1640
1641                 if (!cfds)
1642                         continue;
1643
1644                 if (!rfds) {
1645                         rfds = cfds;
1646                         rn_fds = cn_fds;
1647                 } else {
1648                         int *t;
1649
1650                         t = new(int, rn_fds+cn_fds);
1651                         if (!t) {
1652                                 free(cfds);
1653                                 r = -ENOMEM;
1654                                 goto fail;
1655                         }
1656
1657                         memcpy(t, rfds, rn_fds * sizeof(int));
1658                         memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
1659                         free(rfds);
1660                         free(cfds);
1661
1662                         rfds = t;
1663                         rn_fds = rn_fds+cn_fds;
1664                 }
1665         }
1666
1667         *fds = rfds;
1668         *n_fds = rn_fds;
1669
1670         return 0;
1671
1672 fail:
1673         free(rfds);
1674
1675         return r;
1676 }
1677
1678 static int service_spawn(
1679                 Service *s,
1680                 ExecCommand *c,
1681                 bool timeout,
1682                 bool pass_fds,
1683                 bool apply_permissions,
1684                 bool apply_chroot,
1685                 bool apply_tty_stdin,
1686                 bool set_notify_socket,
1687                 bool is_control,
1688                 pid_t *_pid) {
1689
1690         pid_t pid;
1691         int r;
1692         int *fds = NULL;
1693         _cleanup_free_ int *fdsbuf = NULL;
1694         unsigned n_fds = 0, n_env = 0;
1695         _cleanup_strv_free_ char
1696                 **argv = NULL, **final_env = NULL, **our_env = NULL;
1697         const char *path;
1698
1699         assert(s);
1700         assert(c);
1701         assert(_pid);
1702
1703         unit_realize_cgroup(UNIT(s));
1704
1705         r = unit_setup_exec_runtime(UNIT(s));
1706         if (r < 0)
1707                 goto fail;
1708
1709         if (pass_fds ||
1710             s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1711             s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1712             s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1713
1714                 if (s->socket_fd >= 0) {
1715                         fds = &s->socket_fd;
1716                         n_fds = 1;
1717                 } else {
1718                         r = service_collect_fds(s, &fdsbuf, &n_fds);
1719                         if (r < 0)
1720                                 goto fail;
1721
1722                         fds = fdsbuf;
1723                 }
1724         }
1725
1726         if (timeout && s->timeout_start_usec > 0) {
1727                 r = service_arm_timer(s, s->timeout_start_usec);
1728                 if (r < 0)
1729                         goto fail;
1730         } else
1731                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1732
1733         r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
1734         if (r < 0)
1735                 goto fail;
1736
1737         our_env = new0(char*, 4);
1738         if (!our_env) {
1739                 r = -ENOMEM;
1740                 goto fail;
1741         }
1742
1743         if (set_notify_socket)
1744                 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
1745                         r = -ENOMEM;
1746                         goto fail;
1747                 }
1748
1749         if (s->main_pid > 0)
1750                 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
1751                         r = -ENOMEM;
1752                         goto fail;
1753                 }
1754
1755         if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
1756                 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
1757                         r = -ENOMEM;
1758                         goto fail;
1759                 }
1760
1761         final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
1762         if (!final_env) {
1763                 r = -ENOMEM;
1764                 goto fail;
1765         }
1766
1767         if (is_control && UNIT(s)->cgroup_path) {
1768                 path = strappenda(UNIT(s)->cgroup_path, "/control");
1769                 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
1770         } else
1771                 path = UNIT(s)->cgroup_path;
1772
1773         r = exec_spawn(c,
1774                        argv,
1775                        &s->exec_context,
1776                        fds, n_fds,
1777                        final_env,
1778                        apply_permissions,
1779                        apply_chroot,
1780                        apply_tty_stdin,
1781                        UNIT(s)->manager->confirm_spawn,
1782                        UNIT(s)->manager->cgroup_supported,
1783                        path,
1784                        UNIT(s)->id,
1785                        s->watchdog_usec,
1786                        s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
1787                        s->exec_runtime,
1788                        &pid);
1789         if (r < 0)
1790                 goto fail;
1791
1792         r = unit_watch_pid(UNIT(s), pid);
1793         if (r < 0)
1794                 /* FIXME: we need to do something here */
1795                 goto fail;
1796
1797         *_pid = pid;
1798
1799         return 0;
1800
1801 fail:
1802         if (timeout)
1803                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1804
1805         return r;
1806 }
1807
1808 static int main_pid_good(Service *s) {
1809         assert(s);
1810
1811         /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1812          * don't know */
1813
1814         /* If we know the pid file, then lets just check if it is
1815          * still valid */
1816         if (s->main_pid_known) {
1817
1818                 /* If it's an alien child let's check if it is still
1819                  * alive ... */
1820                 if (s->main_pid_alien && s->main_pid > 0)
1821                         return kill(s->main_pid, 0) >= 0 || errno != ESRCH;
1822
1823                 /* .. otherwise assume we'll get a SIGCHLD for it,
1824                  * which we really should wait for to collect exit
1825                  * status and code */
1826                 return s->main_pid > 0;
1827         }
1828
1829         /* We don't know the pid */
1830         return -EAGAIN;
1831 }
1832
1833 _pure_ static int control_pid_good(Service *s) {
1834         assert(s);
1835
1836         return s->control_pid > 0;
1837 }
1838
1839 static int cgroup_good(Service *s) {
1840         int r;
1841
1842         assert(s);
1843
1844         if (!UNIT(s)->cgroup_path)
1845                 return 0;
1846
1847         r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
1848         if (r < 0)
1849                 return r;
1850
1851         return !r;
1852 }
1853
1854 static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
1855         int r;
1856         assert(s);
1857
1858         if (f != SERVICE_SUCCESS)
1859                 s->result = f;
1860
1861         service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1862
1863         if (allow_restart &&
1864             !s->forbid_restart &&
1865             (s->restart == SERVICE_RESTART_ALWAYS ||
1866              (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1867              (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
1868              (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
1869              (s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
1870                                                          s->result == SERVICE_FAILURE_CORE_DUMP))) &&
1871             (s->result != SERVICE_FAILURE_EXIT_CODE ||
1872              !set_contains(s->restart_ignore_status.code, INT_TO_PTR(s->main_exec_status.status))) &&
1873             (s->result != SERVICE_FAILURE_SIGNAL ||
1874              !set_contains(s->restart_ignore_status.signal, INT_TO_PTR(s->main_exec_status.status)))) {
1875
1876                 r = service_arm_timer(s, s->restart_usec);
1877                 if (r < 0)
1878                         goto fail;
1879
1880                 service_set_state(s, SERVICE_AUTO_RESTART);
1881         }
1882
1883         s->forbid_restart = false;
1884
1885         /* we want fresh tmpdirs in case service is started again immediately */
1886         exec_runtime_destroy(s->exec_runtime);
1887         s->exec_runtime = exec_runtime_unref(s->exec_runtime);
1888
1889         /* Try to delete the pid file. At this point it will be
1890          * out-of-date, and some software might be confused by it, so
1891          * let's remove it. */
1892         if (s->pid_file)
1893                 unlink_noerrno(s->pid_file);
1894
1895         return;
1896
1897 fail:
1898         log_warning_unit(UNIT(s)->id,
1899                          "%s failed to run install restart timer: %s",
1900                          UNIT(s)->id, strerror(-r));
1901         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
1902 }
1903
1904 static void service_enter_stop_post(Service *s, ServiceResult f) {
1905         int r;
1906         assert(s);
1907
1908         if (f != SERVICE_SUCCESS)
1909                 s->result = f;
1910
1911         service_unwatch_control_pid(s);
1912         unit_watch_all_pids(UNIT(s));
1913
1914         s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1915         if (s->control_command) {
1916                 s->control_command_id = SERVICE_EXEC_STOP_POST;
1917
1918                 r = service_spawn(s,
1919                                   s->control_command,
1920                                   true,
1921                                   false,
1922                                   !s->permissions_start_only,
1923                                   !s->root_directory_start_only,
1924                                   true,
1925                                   false,
1926                                   true,
1927                                   &s->control_pid);
1928                 if (r < 0)
1929                         goto fail;
1930
1931                 service_set_state(s, SERVICE_STOP_POST);
1932         } else
1933                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
1934
1935         return;
1936
1937 fail:
1938         log_warning_unit(UNIT(s)->id,
1939                          "%s failed to run 'stop-post' task: %s",
1940                          UNIT(s)->id, strerror(-r));
1941         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
1942 }
1943
1944 static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
1945         int r;
1946
1947         assert(s);
1948
1949         if (f != SERVICE_SUCCESS)
1950                 s->result = f;
1951
1952         unit_watch_all_pids(UNIT(s));
1953
1954         r = unit_kill_context(
1955                         UNIT(s),
1956                         &s->kill_context,
1957                         state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1958                         s->main_pid,
1959                         s->control_pid,
1960                         s->main_pid_alien);
1961
1962         if (r < 0)
1963                 goto fail;
1964
1965         if (r > 0) {
1966                 if (s->timeout_stop_usec > 0) {
1967                         r = service_arm_timer(s, s->timeout_stop_usec);
1968                         if (r < 0)
1969                                 goto fail;
1970                 }
1971
1972                 service_set_state(s, state);
1973         } else if (state == SERVICE_STOP_SIGTERM)
1974                 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1975         else if (state == SERVICE_STOP_SIGKILL)
1976                 service_enter_stop_post(s, SERVICE_SUCCESS);
1977         else if (state == SERVICE_FINAL_SIGTERM)
1978                 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
1979         else
1980                 service_enter_dead(s, SERVICE_SUCCESS, true);
1981
1982         return;
1983
1984 fail:
1985         log_warning_unit(UNIT(s)->id,
1986                          "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
1987
1988         if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
1989                 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
1990         else
1991                 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
1992 }
1993
1994 static void service_enter_stop(Service *s, ServiceResult f) {
1995         int r;
1996
1997         assert(s);
1998
1999         if (f != SERVICE_SUCCESS)
2000                 s->result = f;
2001
2002         service_unwatch_control_pid(s);
2003         unit_watch_all_pids(UNIT(s));
2004
2005         s->control_command = s->exec_command[SERVICE_EXEC_STOP];
2006         if (s->control_command) {
2007                 s->control_command_id = SERVICE_EXEC_STOP;
2008
2009                 r = service_spawn(s,
2010                                   s->control_command,
2011                                   true,
2012                                   false,
2013                                   !s->permissions_start_only,
2014                                   !s->root_directory_start_only,
2015                                   false,
2016                                   false,
2017                                   true,
2018                                   &s->control_pid);
2019                 if (r < 0)
2020                         goto fail;
2021
2022                 service_set_state(s, SERVICE_STOP);
2023         } else
2024                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2025
2026         return;
2027
2028 fail:
2029         log_warning_unit(UNIT(s)->id,
2030                          "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
2031         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2032 }
2033
2034 static void service_enter_running(Service *s, ServiceResult f) {
2035         int main_pid_ok, cgroup_ok;
2036         assert(s);
2037
2038         if (f != SERVICE_SUCCESS)
2039                 s->result = f;
2040
2041         main_pid_ok = main_pid_good(s);
2042         cgroup_ok = cgroup_good(s);
2043
2044         if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
2045             (s->bus_name_good || s->type != SERVICE_DBUS))
2046                 service_set_state(s, SERVICE_RUNNING);
2047         else if (s->remain_after_exit)
2048                 service_set_state(s, SERVICE_EXITED);
2049         else
2050                 service_enter_stop(s, SERVICE_SUCCESS);
2051 }
2052
2053 static void service_enter_start_post(Service *s) {
2054         int r;
2055         assert(s);
2056
2057         service_unwatch_control_pid(s);
2058         service_reset_watchdog(s);
2059
2060         s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
2061         if (s->control_command) {
2062                 s->control_command_id = SERVICE_EXEC_START_POST;
2063
2064                 r = service_spawn(s,
2065                                   s->control_command,
2066                                   true,
2067                                   false,
2068                                   !s->permissions_start_only,
2069                                   !s->root_directory_start_only,
2070                                   false,
2071                                   false,
2072                                   true,
2073                                   &s->control_pid);
2074                 if (r < 0)
2075                         goto fail;
2076
2077                 service_set_state(s, SERVICE_START_POST);
2078         } else
2079                 service_enter_running(s, SERVICE_SUCCESS);
2080
2081         return;
2082
2083 fail:
2084         log_warning_unit(UNIT(s)->id,
2085                          "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
2086         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2087 }
2088
2089 static void service_kill_control_processes(Service *s) {
2090         char *p;
2091
2092         if (!UNIT(s)->cgroup_path)
2093                 return;
2094
2095         p = strappenda(UNIT(s)->cgroup_path, "/control");
2096         cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
2097 }
2098
2099 static void service_enter_start(Service *s) {
2100         ExecCommand *c;
2101         pid_t pid;
2102         int r;
2103
2104         assert(s);
2105
2106         assert(s->exec_command[SERVICE_EXEC_START]);
2107         assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
2108
2109         service_unwatch_control_pid(s);
2110         service_unwatch_main_pid(s);
2111
2112         /* We want to ensure that nobody leaks processes from
2113          * START_PRE here, so let's go on a killing spree, People
2114          * should not spawn long running processes from START_PRE. */
2115         service_kill_control_processes(s);
2116
2117         if (s->type == SERVICE_FORKING) {
2118                 s->control_command_id = SERVICE_EXEC_START;
2119                 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2120
2121                 s->main_command = NULL;
2122         } else {
2123                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2124                 s->control_command = NULL;
2125
2126                 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2127         }
2128
2129         r = service_spawn(s,
2130                           c,
2131                           s->type == SERVICE_FORKING || s->type == SERVICE_DBUS ||
2132                             s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
2133                           true,
2134                           true,
2135                           true,
2136                           true,
2137                           s->notify_access != NOTIFY_NONE,
2138                           false,
2139                           &pid);
2140         if (r < 0)
2141                 goto fail;
2142
2143         if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
2144                 /* For simple services we immediately start
2145                  * the START_POST binaries. */
2146
2147                 service_set_main_pid(s, pid);
2148                 service_enter_start_post(s);
2149
2150         } else  if (s->type == SERVICE_FORKING) {
2151
2152                 /* For forking services we wait until the start
2153                  * process exited. */
2154
2155                 s->control_pid = pid;
2156                 service_set_state(s, SERVICE_START);
2157
2158         } else if (s->type == SERVICE_ONESHOT ||
2159                    s->type == SERVICE_DBUS ||
2160                    s->type == SERVICE_NOTIFY) {
2161
2162                 /* For oneshot services we wait until the start
2163                  * process exited, too, but it is our main process. */
2164
2165                 /* For D-Bus services we know the main pid right away,
2166                  * but wait for the bus name to appear on the
2167                  * bus. Notify services are similar. */
2168
2169                 service_set_main_pid(s, pid);
2170                 service_set_state(s, SERVICE_START);
2171         } else
2172                 assert_not_reached("Unknown service type");
2173
2174         return;
2175
2176 fail:
2177         log_warning_unit(UNIT(s)->id,
2178                          "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
2179         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2180 }
2181
2182 static void service_enter_start_pre(Service *s) {
2183         int r;
2184
2185         assert(s);
2186
2187         service_unwatch_control_pid(s);
2188
2189         s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2190         if (s->control_command) {
2191                 /* Before we start anything, let's clear up what might
2192                  * be left from previous runs. */
2193                 service_kill_control_processes(s);
2194
2195                 s->control_command_id = SERVICE_EXEC_START_PRE;
2196
2197                 r = service_spawn(s,
2198                                   s->control_command,
2199                                   true,
2200                                   false,
2201                                   !s->permissions_start_only,
2202                                   !s->root_directory_start_only,
2203                                   true,
2204                                   false,
2205                                   true,
2206                                   &s->control_pid);
2207                 if (r < 0)
2208                         goto fail;
2209
2210                 service_set_state(s, SERVICE_START_PRE);
2211         } else
2212                 service_enter_start(s);
2213
2214         return;
2215
2216 fail:
2217         log_warning_unit(UNIT(s)->id,
2218                          "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
2219         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2220 }
2221
2222 static void service_enter_restart(Service *s) {
2223         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
2224         int r;
2225
2226         assert(s);
2227
2228         if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2229                 /* Don't restart things if we are going down anyway */
2230                 log_info_unit(UNIT(s)->id,
2231                               "Stop job pending for unit, delaying automatic restart.");
2232
2233                 r = service_arm_timer(s, s->restart_usec);
2234                 if (r < 0)
2235                         goto fail;
2236
2237                 return;
2238         }
2239
2240         /* Any units that are bound to this service must also be
2241          * restarted. We use JOB_RESTART (instead of the more obvious
2242          * JOB_START) here so that those dependency jobs will be added
2243          * as well. */
2244         r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
2245         if (r < 0)
2246                 goto fail;
2247
2248         /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2249          * it will be canceled as part of the service_stop() call that
2250          * is executed as part of JOB_RESTART. */
2251
2252         log_debug_unit(UNIT(s)->id,
2253                        "%s scheduled restart job.", UNIT(s)->id);
2254         return;
2255
2256 fail:
2257         log_warning_unit(UNIT(s)->id,
2258                          "%s failed to schedule restart job: %s",
2259                          UNIT(s)->id, bus_error_message(&error, -r));
2260         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
2261 }
2262
2263 static void service_enter_reload(Service *s) {
2264         int r;
2265
2266         assert(s);
2267
2268         service_unwatch_control_pid(s);
2269
2270         s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2271         if (s->control_command) {
2272                 s->control_command_id = SERVICE_EXEC_RELOAD;
2273
2274                 r = service_spawn(s,
2275                                   s->control_command,
2276                                   true,
2277                                   false,
2278                                   !s->permissions_start_only,
2279                                   !s->root_directory_start_only,
2280                                   false,
2281                                   false,
2282                                   true,
2283                                   &s->control_pid);
2284                 if (r < 0)
2285                         goto fail;
2286
2287                 service_set_state(s, SERVICE_RELOAD);
2288         } else
2289                 service_enter_running(s, SERVICE_SUCCESS);
2290
2291         return;
2292
2293 fail:
2294         log_warning_unit(UNIT(s)->id,
2295                          "%s failed to run 'reload' task: %s",
2296                          UNIT(s)->id, strerror(-r));
2297         s->reload_result = SERVICE_FAILURE_RESOURCES;
2298         service_enter_running(s, SERVICE_SUCCESS);
2299 }
2300
2301 static void service_run_next_control(Service *s) {
2302         int r;
2303
2304         assert(s);
2305         assert(s->control_command);
2306         assert(s->control_command->command_next);
2307
2308         assert(s->control_command_id != SERVICE_EXEC_START);
2309
2310         s->control_command = s->control_command->command_next;
2311         service_unwatch_control_pid(s);
2312
2313         r = service_spawn(s,
2314                           s->control_command,
2315                           true,
2316                           false,
2317                           !s->permissions_start_only,
2318                           !s->root_directory_start_only,
2319                           s->control_command_id == SERVICE_EXEC_START_PRE ||
2320                           s->control_command_id == SERVICE_EXEC_STOP_POST,
2321                           false,
2322                           true,
2323                           &s->control_pid);
2324         if (r < 0)
2325                 goto fail;
2326
2327         return;
2328
2329 fail:
2330         log_warning_unit(UNIT(s)->id,
2331                          "%s failed to run next control task: %s",
2332                          UNIT(s)->id, strerror(-r));
2333
2334         if (s->state == SERVICE_START_PRE)
2335                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2336         else if (s->state == SERVICE_STOP)
2337                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2338         else if (s->state == SERVICE_STOP_POST)
2339                 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2340         else if (s->state == SERVICE_RELOAD) {
2341                 s->reload_result = SERVICE_FAILURE_RESOURCES;
2342                 service_enter_running(s, SERVICE_SUCCESS);
2343         } else
2344                 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2345 }
2346
2347 static void service_run_next_main(Service *s) {
2348         pid_t pid;
2349         int r;
2350
2351         assert(s);
2352         assert(s->main_command);
2353         assert(s->main_command->command_next);
2354         assert(s->type == SERVICE_ONESHOT);
2355
2356         s->main_command = s->main_command->command_next;
2357         service_unwatch_main_pid(s);
2358
2359         r = service_spawn(s,
2360                           s->main_command,
2361                           true,
2362                           true,
2363                           true,
2364                           true,
2365                           true,
2366                           s->notify_access != NOTIFY_NONE,
2367                           false,
2368                           &pid);
2369         if (r < 0)
2370                 goto fail;
2371
2372         service_set_main_pid(s, pid);
2373
2374         return;
2375
2376 fail:
2377         log_warning_unit(UNIT(s)->id,
2378                          "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
2379         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2380 }
2381
2382 static int service_start_limit_test(Service *s) {
2383         assert(s);
2384
2385         if (ratelimit_test(&s->start_limit))
2386                 return 0;
2387
2388         switch (s->start_limit_action) {
2389
2390         case SERVICE_START_LIMIT_NONE:
2391                 log_warning_unit(UNIT(s)->id,
2392                                  "%s start request repeated too quickly, refusing to start.",
2393                                  UNIT(s)->id);
2394                 break;
2395
2396         case SERVICE_START_LIMIT_REBOOT: {
2397                 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
2398                 int r;
2399
2400                 log_warning_unit(UNIT(s)->id,
2401                                  "%s start request repeated too quickly, rebooting.", UNIT(s)->id);
2402
2403                 r = manager_add_job_by_name(UNIT(s)->manager, JOB_START,
2404                                             SPECIAL_REBOOT_TARGET, JOB_REPLACE,
2405                                             true, &error, NULL);
2406                 if (r < 0)
2407                         log_error_unit(UNIT(s)->id,
2408                                        "Failed to reboot: %s.", bus_error_message(&error, r));
2409
2410                 break;
2411         }
2412
2413         case SERVICE_START_LIMIT_REBOOT_FORCE:
2414                 log_warning_unit(UNIT(s)->id,
2415                                  "%s start request repeated too quickly, forcibly rebooting.", UNIT(s)->id);
2416                 UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2417                 break;
2418
2419         case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
2420                 log_warning_unit(UNIT(s)->id,
2421                                  "%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
2422                 sync();
2423                 reboot(RB_AUTOBOOT);
2424                 break;
2425
2426         default:
2427                 log_error_unit(UNIT(s)->id,
2428                                "start limit action=%i", s->start_limit_action);
2429                 assert_not_reached("Unknown StartLimitAction.");
2430         }
2431
2432         return -ECANCELED;
2433 }
2434
2435 static int service_start(Unit *u) {
2436         Service *s = SERVICE(u);
2437         int r;
2438
2439         assert(s);
2440
2441         /* We cannot fulfill this request right now, try again later
2442          * please! */
2443         if (s->state == SERVICE_STOP ||
2444             s->state == SERVICE_STOP_SIGTERM ||
2445             s->state == SERVICE_STOP_SIGKILL ||
2446             s->state == SERVICE_STOP_POST ||
2447             s->state == SERVICE_FINAL_SIGTERM ||
2448             s->state == SERVICE_FINAL_SIGKILL)
2449                 return -EAGAIN;
2450
2451         /* Already on it! */
2452         if (s->state == SERVICE_START_PRE ||
2453             s->state == SERVICE_START ||
2454             s->state == SERVICE_START_POST)
2455                 return 0;
2456
2457         /* A service that will be restarted must be stopped first to
2458          * trigger BindsTo and/or OnFailure dependencies. If a user
2459          * does not want to wait for the holdoff time to elapse, the
2460          * service should be manually restarted, not started. We
2461          * simply return EAGAIN here, so that any start jobs stay
2462          * queued, and assume that the auto restart timer will
2463          * eventually trigger the restart. */
2464         if (s->state == SERVICE_AUTO_RESTART)
2465                 return -EAGAIN;
2466
2467         assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
2468
2469         /* Make sure we don't enter a busy loop of some kind. */
2470         r = service_start_limit_test(s);
2471         if (r < 0) {
2472                 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
2473                 return r;
2474         }
2475
2476         s->result = SERVICE_SUCCESS;
2477         s->reload_result = SERVICE_SUCCESS;
2478         s->main_pid_known = false;
2479         s->main_pid_alien = false;
2480         s->forbid_restart = false;
2481
2482         service_enter_start_pre(s);
2483         return 0;
2484 }
2485
2486 static int service_stop(Unit *u) {
2487         Service *s = SERVICE(u);
2488
2489         assert(s);
2490
2491         /* Don't create restart jobs from here. */
2492         s->forbid_restart = true;
2493
2494         /* Already on it */
2495         if (s->state == SERVICE_STOP ||
2496             s->state == SERVICE_STOP_SIGTERM ||
2497             s->state == SERVICE_STOP_SIGKILL ||
2498             s->state == SERVICE_STOP_POST ||
2499             s->state == SERVICE_FINAL_SIGTERM ||
2500             s->state == SERVICE_FINAL_SIGKILL)
2501                 return 0;
2502
2503         /* A restart will be scheduled or is in progress. */
2504         if (s->state == SERVICE_AUTO_RESTART) {
2505                 service_set_state(s, SERVICE_DEAD);
2506                 return 0;
2507         }
2508
2509         /* If there's already something running we go directly into
2510          * kill mode. */
2511         if (s->state == SERVICE_START_PRE ||
2512             s->state == SERVICE_START ||
2513             s->state == SERVICE_START_POST ||
2514             s->state == SERVICE_RELOAD) {
2515                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2516                 return 0;
2517         }
2518
2519         assert(s->state == SERVICE_RUNNING ||
2520                s->state == SERVICE_EXITED);
2521
2522         service_enter_stop(s, SERVICE_SUCCESS);
2523         return 0;
2524 }
2525
2526 static int service_reload(Unit *u) {
2527         Service *s = SERVICE(u);
2528
2529         assert(s);
2530
2531         assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
2532
2533         service_enter_reload(s);
2534         return 0;
2535 }
2536
2537 _pure_ static bool service_can_reload(Unit *u) {
2538         Service *s = SERVICE(u);
2539
2540         assert(s);
2541
2542         return !!s->exec_command[SERVICE_EXEC_RELOAD];
2543 }
2544
2545 static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2546         Service *s = SERVICE(u);
2547
2548         assert(u);
2549         assert(f);
2550         assert(fds);
2551
2552         unit_serialize_item(u, f, "state", service_state_to_string(s->state));
2553         unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2554         unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
2555
2556         if (s->control_pid > 0)
2557                 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
2558                                            s->control_pid);
2559
2560         if (s->main_pid_known && s->main_pid > 0)
2561                 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
2562
2563         unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2564
2565         if (s->status_text)
2566                 unit_serialize_item(u, f, "status-text", s->status_text);
2567
2568         /* FIXME: There's a minor uncleanliness here: if there are
2569          * multiple commands attached here, we will start from the
2570          * first one again */
2571         if (s->control_command_id >= 0)
2572                 unit_serialize_item(u, f, "control-command",
2573                                     service_exec_command_to_string(s->control_command_id));
2574
2575         if (s->socket_fd >= 0) {
2576                 int copy;
2577
2578                 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2579                         return copy;
2580
2581                 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2582         }
2583
2584         if (s->main_exec_status.pid > 0) {
2585                 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
2586                                            s->main_exec_status.pid);
2587                 dual_timestamp_serialize(f, "main-exec-status-start",
2588                                          &s->main_exec_status.start_timestamp);
2589                 dual_timestamp_serialize(f, "main-exec-status-exit",
2590                                          &s->main_exec_status.exit_timestamp);
2591
2592                 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
2593                         unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
2594                                                    s->main_exec_status.code);
2595                         unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
2596                                                    s->main_exec_status.status);
2597                 }
2598         }
2599         if (dual_timestamp_is_set(&s->watchdog_timestamp))
2600                 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
2601
2602         if (s->forbid_restart)
2603                 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
2604
2605         return 0;
2606 }
2607
2608 static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2609         Service *s = SERVICE(u);
2610
2611         assert(u);
2612         assert(key);
2613         assert(value);
2614         assert(fds);
2615
2616         if (streq(key, "state")) {
2617                 ServiceState state;
2618
2619                 state = service_state_from_string(value);
2620                 if (state < 0)
2621                         log_debug_unit(u->id, "Failed to parse state value %s", value);
2622                 else
2623                         s->deserialized_state = state;
2624         } else if (streq(key, "result")) {
2625                 ServiceResult f;
2626
2627                 f = service_result_from_string(value);
2628                 if (f < 0)
2629                         log_debug_unit(u->id, "Failed to parse result value %s", value);
2630                 else if (f != SERVICE_SUCCESS)
2631                         s->result = f;
2632
2633         } else if (streq(key, "reload-result")) {
2634                 ServiceResult f;
2635
2636                 f = service_result_from_string(value);
2637                 if (f < 0)
2638                         log_debug_unit(u->id, "Failed to parse reload result value %s", value);
2639                 else if (f != SERVICE_SUCCESS)
2640                         s->reload_result = f;
2641
2642         } else if (streq(key, "control-pid")) {
2643                 pid_t pid;
2644
2645                 if (parse_pid(value, &pid) < 0)
2646                         log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
2647                 else
2648                         s->control_pid = pid;
2649         } else if (streq(key, "main-pid")) {
2650                 pid_t pid;
2651
2652                 if (parse_pid(value, &pid) < 0)
2653                         log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
2654                 else {
2655                         service_set_main_pid(s, pid);
2656                         unit_watch_pid(UNIT(s), pid);
2657                 }
2658         } else if (streq(key, "main-pid-known")) {
2659                 int b;
2660
2661                 b = parse_boolean(value);
2662                 if (b < 0)
2663                         log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
2664                 else
2665                         s->main_pid_known = b;
2666         } else if (streq(key, "status-text")) {
2667                 char *t;
2668
2669                 t = strdup(value);
2670                 if (!t)
2671                         log_oom();
2672                 else {
2673                         free(s->status_text);
2674                         s->status_text = t;
2675                 }
2676
2677         } else if (streq(key, "control-command")) {
2678                 ServiceExecCommand id;
2679
2680                 id = service_exec_command_from_string(value);
2681                 if (id < 0)
2682                         log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
2683                 else {
2684                         s->control_command_id = id;
2685                         s->control_command = s->exec_command[id];
2686                 }
2687         } else if (streq(key, "socket-fd")) {
2688                 int fd;
2689
2690                 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2691                         log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
2692                 else {
2693
2694                         if (s->socket_fd >= 0)
2695                                 close_nointr_nofail(s->socket_fd);
2696                         s->socket_fd = fdset_remove(fds, fd);
2697                 }
2698         } else if (streq(key, "main-exec-status-pid")) {
2699                 pid_t pid;
2700
2701                 if (parse_pid(value, &pid) < 0)
2702                         log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
2703                 else
2704                         s->main_exec_status.pid = pid;
2705         } else if (streq(key, "main-exec-status-code")) {
2706                 int i;
2707
2708                 if (safe_atoi(value, &i) < 0)
2709                         log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
2710                 else
2711                         s->main_exec_status.code = i;
2712         } else if (streq(key, "main-exec-status-status")) {
2713                 int i;
2714
2715                 if (safe_atoi(value, &i) < 0)
2716                         log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
2717                 else
2718                         s->main_exec_status.status = i;
2719         } else if (streq(key, "main-exec-status-start"))
2720                 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2721         else if (streq(key, "main-exec-status-exit"))
2722                 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
2723         else if (streq(key, "watchdog-timestamp"))
2724                 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
2725         else if (streq(key, "forbid-restart")) {
2726                 int b;
2727
2728                 b = parse_boolean(value);
2729                 if (b < 0)
2730                         log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
2731                 else
2732                         s->forbid_restart = b;
2733         } else
2734                 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
2735
2736         return 0;
2737 }
2738
2739 _pure_ static UnitActiveState service_active_state(Unit *u) {
2740         const UnitActiveState *table;
2741
2742         assert(u);
2743
2744         table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2745
2746         return table[SERVICE(u)->state];
2747 }
2748
2749 static const char *service_sub_state_to_string(Unit *u) {
2750         assert(u);
2751
2752         return service_state_to_string(SERVICE(u)->state);
2753 }
2754
2755 static bool service_check_gc(Unit *u) {
2756         Service *s = SERVICE(u);
2757
2758         assert(s);
2759
2760         /* Never clean up services that still have a process around,
2761          * even if the service is formally dead. */
2762         if (cgroup_good(s) > 0 ||
2763             main_pid_good(s) > 0 ||
2764             control_pid_good(s) > 0)
2765                 return true;
2766
2767 #ifdef HAVE_SYSV_COMPAT
2768         if (s->is_sysv)
2769                 return true;
2770 #endif
2771
2772         return false;
2773 }
2774
2775 _pure_ static bool service_check_snapshot(Unit *u) {
2776         Service *s = SERVICE(u);
2777
2778         assert(s);
2779
2780         return (s->socket_fd < 0);
2781 }
2782
2783 static int service_retry_pid_file(Service *s) {
2784         int r;
2785
2786         assert(s->pid_file);
2787         assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2788
2789         r = service_load_pid_file(s, false);
2790         if (r < 0)
2791                 return r;
2792
2793         service_unwatch_pid_file(s);
2794
2795         service_enter_running(s, SERVICE_SUCCESS);
2796         return 0;
2797 }
2798
2799 static int service_watch_pid_file(Service *s) {
2800         int r;
2801
2802         log_debug_unit(UNIT(s)->id,
2803                        "Setting watch for %s's PID file %s",
2804                        UNIT(s)->id, s->pid_file_pathspec->path);
2805         r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
2806         if (r < 0)
2807                 goto fail;
2808
2809         /* the pidfile might have appeared just before we set the watch */
2810         log_debug_unit(UNIT(s)->id,
2811                        "Trying to read %s's PID file %s in case it changed",
2812                        UNIT(s)->id, s->pid_file_pathspec->path);
2813         service_retry_pid_file(s);
2814
2815         return 0;
2816 fail:
2817         log_error_unit(UNIT(s)->id,
2818                        "Failed to set a watch for %s's PID file %s: %s",
2819                        UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
2820         service_unwatch_pid_file(s);
2821         return r;
2822 }
2823
2824 static int service_demand_pid_file(Service *s) {
2825         PathSpec *ps;
2826
2827         assert(s->pid_file);
2828         assert(!s->pid_file_pathspec);
2829
2830         ps = new0(PathSpec, 1);
2831         if (!ps)
2832                 return -ENOMEM;
2833
2834         ps->unit = UNIT(s);
2835         ps->path = strdup(s->pid_file);
2836         if (!ps->path) {
2837                 free(ps);
2838                 return -ENOMEM;
2839         }
2840
2841         path_kill_slashes(ps->path);
2842
2843         /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2844          * keep their PID file open all the time. */
2845         ps->type = PATH_MODIFIED;
2846         ps->inotify_fd = -1;
2847
2848         s->pid_file_pathspec = ps;
2849
2850         return service_watch_pid_file(s);
2851 }
2852
2853 static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
2854         PathSpec *p = userdata;
2855         Service *s;
2856
2857         assert(p);
2858
2859         s = SERVICE(p->unit);
2860
2861         assert(s);
2862         assert(fd >= 0);
2863         assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2864         assert(s->pid_file_pathspec);
2865         assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
2866
2867         log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
2868
2869         if (path_spec_fd_event(p, events) < 0)
2870                 goto fail;
2871
2872         if (service_retry_pid_file(s) == 0)
2873                 return 0;
2874
2875         if (service_watch_pid_file(s) < 0)
2876                 goto fail;
2877
2878         return 0;
2879
2880 fail:
2881         service_unwatch_pid_file(s);
2882         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2883         return 0;
2884 }
2885
2886 static void service_notify_cgroup_empty_event(Unit *u) {
2887         Service *s = SERVICE(u);
2888
2889         assert(u);
2890
2891         log_debug_unit(u->id, "%s: cgroup is empty", u->id);
2892
2893         switch (s->state) {
2894
2895                 /* Waiting for SIGCHLD is usually more interesting,
2896                  * because it includes return codes/signals. Which is
2897                  * why we ignore the cgroup events for most cases,
2898                  * except when we don't know pid which to expect the
2899                  * SIGCHLD for. */
2900
2901         case SERVICE_START:
2902         case SERVICE_START_POST:
2903                 /* If we were hoping for the daemon to write its PID file,
2904                  * we can give up now. */
2905                 if (s->pid_file_pathspec) {
2906                         log_warning_unit(u->id,
2907                                          "%s never wrote its PID file. Failing.", UNIT(s)->id);
2908                         service_unwatch_pid_file(s);
2909                         if (s->state == SERVICE_START)
2910                                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2911                         else
2912                                 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2913                 }
2914                 break;
2915
2916         case SERVICE_RUNNING:
2917                 /* service_enter_running() will figure out what to do */
2918                 service_enter_running(s, SERVICE_SUCCESS);
2919                 break;
2920
2921         case SERVICE_STOP_SIGTERM:
2922         case SERVICE_STOP_SIGKILL:
2923
2924                 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2925                         service_enter_stop_post(s, SERVICE_SUCCESS);
2926
2927                 break;
2928
2929         case SERVICE_STOP_POST:
2930         case SERVICE_FINAL_SIGTERM:
2931         case SERVICE_FINAL_SIGKILL:
2932                 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2933                         service_enter_dead(s, SERVICE_SUCCESS, true);
2934
2935                 break;
2936
2937         default:
2938                 ;
2939         }
2940 }
2941
2942 static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2943         Service *s = SERVICE(u);
2944         ServiceResult f;
2945
2946         assert(s);
2947         assert(pid >= 0);
2948
2949         if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2950                                      is_clean_exit_lsb(code, status, &s->success_status))
2951                 f = SERVICE_SUCCESS;
2952         else if (code == CLD_EXITED)
2953                 f = SERVICE_FAILURE_EXIT_CODE;
2954         else if (code == CLD_KILLED)
2955                 f = SERVICE_FAILURE_SIGNAL;
2956         else if (code == CLD_DUMPED)
2957                 f = SERVICE_FAILURE_CORE_DUMP;
2958         else
2959                 assert_not_reached("Unknown code");
2960
2961         if (s->main_pid == pid) {
2962                 /* Forking services may occasionally move to a new PID.
2963                  * As long as they update the PID file before exiting the old
2964                  * PID, they're fine. */
2965                 if (service_load_pid_file(s, false) == 0)
2966                         return;
2967
2968                 s->main_pid = 0;
2969                 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
2970
2971                 if (s->main_command) {
2972                         /* If this is not a forking service than the
2973                          * main process got started and hence we copy
2974                          * the exit status so that it is recorded both
2975                          * as main and as control process exit
2976                          * status */
2977
2978                         s->main_command->exec_status = s->main_exec_status;
2979
2980                         if (s->main_command->ignore)
2981                                 f = SERVICE_SUCCESS;
2982                 } else if (s->exec_command[SERVICE_EXEC_START]) {
2983
2984                         /* If this is a forked process, then we should
2985                          * ignore the return value if this was
2986                          * configured for the starter process */
2987
2988                         if (s->exec_command[SERVICE_EXEC_START]->ignore)
2989                                 f = SERVICE_SUCCESS;
2990                 }
2991
2992                 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2993                            u->id,
2994                            "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
2995                                   u->id, sigchld_code_to_string(code), status,
2996                                   strna(code == CLD_EXITED
2997                                         ? exit_status_to_string(status, EXIT_STATUS_FULL)
2998                                         : signal_to_string(status)),
2999                            "EXIT_CODE=%s", sigchld_code_to_string(code),
3000                            "EXIT_STATUS=%i", status,
3001                            NULL);
3002
3003                 if (f != SERVICE_SUCCESS)
3004                         s->result = f;
3005
3006                 if (s->main_command &&
3007                     s->main_command->command_next &&
3008                     f == SERVICE_SUCCESS) {
3009
3010                         /* There is another command to *
3011                          * execute, so let's do that. */
3012
3013                         log_debug_unit(u->id,
3014                                        "%s running next main command for state %s",
3015                                        u->id, service_state_to_string(s->state));
3016                         service_run_next_main(s);
3017
3018                 } else {
3019
3020                         /* The service exited, so the service is officially
3021                          * gone. */
3022                         s->main_command = NULL;
3023
3024                         switch (s->state) {
3025
3026                         case SERVICE_START_POST:
3027                         case SERVICE_RELOAD:
3028                         case SERVICE_STOP:
3029                                 /* Need to wait until the operation is
3030                                  * done */
3031                                 break;
3032
3033                         case SERVICE_START:
3034                                 if (s->type == SERVICE_ONESHOT) {
3035                                         /* This was our main goal, so let's go on */
3036                                         if (f == SERVICE_SUCCESS)
3037                                                 service_enter_start_post(s);
3038                                         else
3039                                                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3040                                         break;
3041                                 }
3042
3043                                 /* Fall through */
3044
3045                         case SERVICE_RUNNING:
3046                                 service_enter_running(s, f);
3047                                 break;
3048
3049                         case SERVICE_STOP_SIGTERM:
3050                         case SERVICE_STOP_SIGKILL:
3051
3052                                 if (!control_pid_good(s))
3053                                         service_enter_stop_post(s, f);
3054
3055                                 /* If there is still a control process, wait for that first */
3056                                 break;
3057
3058                         case SERVICE_STOP_POST:
3059                         case SERVICE_FINAL_SIGTERM:
3060                         case SERVICE_FINAL_SIGKILL:
3061
3062                                 if (!control_pid_good(s))
3063                                         service_enter_dead(s, f, true);
3064                                 break;
3065
3066                         default:
3067                                 assert_not_reached("Uh, main process died at wrong time.");
3068                         }
3069                 }
3070
3071         } else if (s->control_pid == pid) {
3072                 s->control_pid = 0;
3073
3074                 if (s->control_command) {
3075                         exec_status_exit(&s->control_command->exec_status,
3076                                          &s->exec_context, pid, code, status);
3077
3078                         if (s->control_command->ignore)
3079                                 f = SERVICE_SUCCESS;
3080                 }
3081
3082                 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
3083                               "%s: control process exited, code=%s status=%i",
3084                               u->id, sigchld_code_to_string(code), status);
3085
3086                 if (f != SERVICE_SUCCESS)
3087                         s->result = f;
3088
3089                 /* Immediately get rid of the cgroup, so that the
3090                  * kernel doesn't delay the cgroup empty messages for
3091                  * the service cgroup any longer than necessary */
3092                 service_kill_control_processes(s);
3093
3094                 if (s->control_command &&
3095                     s->control_command->command_next &&
3096                     f == SERVICE_SUCCESS) {
3097
3098                         /* There is another command to *
3099                          * execute, so let's do that. */
3100
3101                         log_debug_unit(u->id,
3102                                        "%s running next control command for state %s",
3103                                        u->id, service_state_to_string(s->state));
3104                         service_run_next_control(s);
3105
3106                 } else {
3107                         /* No further commands for this step, so let's
3108                          * figure out what to do next */
3109
3110                         s->control_command = NULL;
3111                         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3112
3113                         log_debug_unit(u->id,
3114                                        "%s got final SIGCHLD for state %s",
3115                                        u->id, service_state_to_string(s->state));
3116
3117                         switch (s->state) {
3118
3119                         case SERVICE_START_PRE:
3120                                 if (f == SERVICE_SUCCESS)
3121                                         service_enter_start(s);
3122                                 else
3123                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3124                                 break;
3125
3126                         case SERVICE_START:
3127                                 if (s->type != SERVICE_FORKING)
3128                                         /* Maybe spurious event due to a reload that changed the type? */
3129                                         break;
3130
3131                                 if (f != SERVICE_SUCCESS) {
3132                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3133                                         break;
3134                                 }
3135
3136                                 if (s->pid_file) {
3137                                         bool has_start_post;
3138                                         int r;
3139
3140                                         /* Let's try to load the pid file here if we can.
3141                                          * The PID file might actually be created by a START_POST
3142                                          * script. In that case don't worry if the loading fails. */
3143
3144                                         has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3145                                         r = service_load_pid_file(s, !has_start_post);
3146                                         if (!has_start_post && r < 0) {
3147                                                 r = service_demand_pid_file(s);
3148                                                 if (r < 0 || !cgroup_good(s))
3149                                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3150                                                 break;
3151                                         }
3152                                 } else
3153                                         service_search_main_pid(s);
3154
3155                                 service_enter_start_post(s);
3156                                 break;
3157
3158                         case SERVICE_START_POST:
3159                                 if (f != SERVICE_SUCCESS) {
3160                                         service_enter_stop(s, f);
3161                                         break;
3162                                 }
3163
3164                                 if (s->pid_file) {
3165                                         int r;
3166
3167                                         r = service_load_pid_file(s, true);
3168                                         if (r < 0) {
3169                                                 r = service_demand_pid_file(s);
3170                                                 if (r < 0 || !cgroup_good(s))
3171                                                         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
3172                                                 break;
3173                                         }
3174                                 } else
3175                                         service_search_main_pid(s);
3176
3177                                 service_enter_running(s, SERVICE_SUCCESS);
3178                                 break;
3179
3180                         case SERVICE_RELOAD:
3181                                 if (f == SERVICE_SUCCESS) {
3182                                         service_load_pid_file(s, true);
3183                                         service_search_main_pid(s);
3184                                 }
3185
3186                                 s->reload_result = f;
3187                                 service_enter_running(s, SERVICE_SUCCESS);
3188                                 break;
3189
3190                         case SERVICE_STOP:
3191                                 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3192                                 break;
3193
3194                         case SERVICE_STOP_SIGTERM:
3195                         case SERVICE_STOP_SIGKILL:
3196                                 if (main_pid_good(s) <= 0)
3197                                         service_enter_stop_post(s, f);
3198
3199                                 /* If there is still a service
3200                                  * process around, wait until
3201                                  * that one quit, too */
3202                                 break;
3203
3204                         case SERVICE_STOP_POST:
3205                         case SERVICE_FINAL_SIGTERM:
3206                         case SERVICE_FINAL_SIGKILL:
3207                                 if (main_pid_good(s) <= 0)
3208                                         service_enter_dead(s, f, true);
3209                                 break;
3210
3211                         default:
3212                                 assert_not_reached("Uh, control process died at wrong time.");
3213                         }
3214                 }
3215         }
3216
3217         /* Notify clients about changed exit status */
3218         unit_add_to_dbus_queue(u);
3219
3220         /* We got one SIGCHLD for the service, let's watch all
3221          * processes that are now running of the service, and watch
3222          * that. Among the PIDs we then watch will be children
3223          * reassigned to us, which hopefully allows us to identify
3224          * when all children are gone */
3225         unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
3226         unit_watch_all_pids(u);
3227
3228         /* If the PID set is empty now, then let's finish this off */
3229         if (set_isempty(u->pids))
3230                 service_notify_cgroup_empty_event(u);
3231 }
3232
3233 static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3234         Service *s = SERVICE(userdata);
3235
3236         assert(s);
3237         assert(source == s->timer_event_source);
3238
3239         switch (s->state) {
3240
3241         case SERVICE_START_PRE:
3242         case SERVICE_START:
3243                 log_warning_unit(UNIT(s)->id,
3244                                  "%s %s operation timed out. Terminating.",
3245                                  UNIT(s)->id,
3246                                  s->state == SERVICE_START ? "start" : "start-pre");
3247                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3248                 break;
3249
3250         case SERVICE_START_POST:
3251                 log_warning_unit(UNIT(s)->id,
3252                                  "%s start-post operation timed out. Stopping.", UNIT(s)->id);
3253                 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
3254                 break;
3255
3256         case SERVICE_RELOAD:
3257                 log_warning_unit(UNIT(s)->id,
3258                                  "%s reload operation timed out. Stopping.", UNIT(s)->id);
3259                 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3260                 service_enter_running(s, SERVICE_SUCCESS);
3261                 break;
3262
3263         case SERVICE_STOP:
3264                 log_warning_unit(UNIT(s)->id,
3265                                  "%s stopping timed out. Terminating.", UNIT(s)->id);
3266                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3267                 break;
3268
3269         case SERVICE_STOP_SIGTERM:
3270                 if (s->kill_context.send_sigkill) {
3271                         log_warning_unit(UNIT(s)->id,
3272                                          "%s stop-sigterm timed out. Killing.", UNIT(s)->id);
3273                         service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3274                 } else {
3275                         log_warning_unit(UNIT(s)->id,
3276                                          "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s)->id);
3277                         service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3278                 }
3279
3280                 break;
3281
3282         case SERVICE_STOP_SIGKILL:
3283                 /* Uh, we sent a SIGKILL and it is still not gone?
3284                  * Must be something we cannot kill, so let's just be
3285                  * weirded out and continue */
3286
3287                 log_warning_unit(UNIT(s)->id,
3288                                  "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
3289                 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3290                 break;
3291
3292         case SERVICE_STOP_POST:
3293                 log_warning_unit(UNIT(s)->id,
3294                                  "%s stop-post timed out. Terminating.", UNIT(s)->id);
3295                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3296                 break;
3297
3298         case SERVICE_FINAL_SIGTERM:
3299                 if (s->kill_context.send_sigkill) {
3300                         log_warning_unit(UNIT(s)->id,
3301                                          "%s stop-final-sigterm timed out. Killing.", UNIT(s)->id);
3302                         service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3303                 } else {
3304                         log_warning_unit(UNIT(s)->id,
3305                                          "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.",
3306                                          UNIT(s)->id);
3307                         service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
3308                 }
3309
3310                 break;
3311
3312         case SERVICE_FINAL_SIGKILL:
3313                 log_warning_unit(UNIT(s)->id,
3314                                  "%s still around after final SIGKILL. Entering failed mode.", UNIT(s)->id);
3315                 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
3316                 break;
3317
3318         case SERVICE_AUTO_RESTART:
3319                 log_info_unit(UNIT(s)->id,
3320                               "%s holdoff time over, scheduling restart.", UNIT(s)->id);
3321                 service_enter_restart(s);
3322                 break;
3323
3324         default:
3325                 assert_not_reached("Timeout at wrong time.");
3326         }
3327
3328         return 0;
3329 }
3330
3331 static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3332         Service *s = SERVICE(userdata);
3333
3334         assert(s);
3335         assert(source == s->watchdog_event_source);
3336
3337         log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
3338         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
3339
3340         return 0;
3341 }
3342
3343 static void service_notify_message(Unit *u, pid_t pid, char **tags) {
3344         Service *s = SERVICE(u);
3345         const char *e;
3346         bool notify_dbus = false;
3347
3348         assert(u);
3349
3350         log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT" (%s...)",
3351                        u->id, pid, tags && *tags ? tags[0] : "(empty)");
3352
3353         if (s->notify_access == NOTIFY_NONE) {
3354                 log_warning_unit(u->id,
3355                                  "%s: Got notification message from PID "PID_FMT", but reception is disabled.",
3356                                  u->id, pid);
3357                 return;
3358         }
3359
3360         if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
3361
3362                 if (s->main_pid != 0)
3363                         log_warning_unit(u->id, "%s: Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT, u->id, pid, s->main_pid);
3364                 else
3365                         log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT", but reception only permitted for main PID which is currently not known", u->id, pid);
3366                 return;
3367         }
3368
3369         /* Interpret MAINPID= */
3370         if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3371             (s->state == SERVICE_START ||
3372              s->state == SERVICE_START_POST ||
3373              s->state == SERVICE_RUNNING ||
3374              s->state == SERVICE_RELOAD)) {
3375
3376                 if (parse_pid(e + 8, &pid) < 0)
3377                         log_warning_unit(u->id, "Failed to parse notification message %s", e);
3378                 else {
3379                         log_debug_unit(u->id, "%s: got %s", u->id, e);
3380                         service_set_main_pid(s, pid);
3381                         unit_watch_pid(UNIT(s), pid);
3382                         notify_dbus = true;
3383                 }
3384         }
3385
3386         /* Interpret READY= */
3387         if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START && strv_find(tags, "READY=1")) {
3388                 log_debug_unit(u->id, "%s: got READY=1", u->id);
3389                 service_enter_start_post(s);
3390                 notify_dbus = true;
3391         }
3392
3393         /* Interpret STATUS= */
3394         e = strv_find_prefix(tags, "STATUS=");
3395         if (e) {
3396                 char *t;
3397
3398                 if (e[7]) {
3399                         if (!utf8_is_valid(e+7)) {
3400                                 log_warning_unit(u->id, "Status message in notification is not UTF-8 clean.");
3401                                 return;
3402                         }
3403
3404                         log_debug_unit(u->id, "%s: got %s", u->id, e);
3405
3406                         t = strdup(e+7);
3407                         if (!t) {
3408                                 log_oom();
3409                                 return;
3410                         }
3411
3412                 } else
3413                         t = NULL;
3414
3415                 if (!streq_ptr(s->status_text, t)) {
3416                         free(s->status_text);
3417                         s->status_text = t;
3418                         notify_dbus = true;
3419                 } else
3420                         free(t);
3421         }
3422
3423         /* Interpet WATCHDOG= */
3424         if (strv_find(tags, "WATCHDOG=1")) {
3425                 log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
3426                 service_reset_watchdog(s);
3427         }
3428
3429         /* Notify clients about changed status or main pid */
3430         if (notify_dbus)
3431                 unit_add_to_dbus_queue(u);
3432 }
3433
3434 static int service_get_timeout(Unit *u, uint64_t *timeout) {
3435         Service *s = SERVICE(u);
3436         int r;
3437
3438         if (!s->timer_event_source)
3439                 return 0;
3440
3441         r = sd_event_source_get_time(s->timer_event_source, timeout);
3442         if (r < 0)
3443                 return r;
3444
3445         return 1;
3446 }
3447
3448 #ifdef HAVE_SYSV_COMPAT
3449
3450 static int service_enumerate(Manager *m) {
3451         char **p;
3452         unsigned i;
3453         _cleanup_closedir_ DIR *d = NULL;
3454         _cleanup_free_ char *path = NULL, *fpath = NULL, *name = NULL;
3455         Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
3456         _cleanup_set_free_ Set *shutdown_services = NULL;
3457         Unit *service;
3458         Iterator j;
3459         int r;
3460
3461         assert(m);
3462
3463         if (m->running_as != SYSTEMD_SYSTEM)
3464                 return 0;
3465
3466         STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
3467                 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
3468                         struct dirent *de;
3469
3470                         free(path);
3471                         path = strjoin(*p, "/", rcnd_table[i].path, NULL);
3472                         if (!path) {
3473                                 r = -ENOMEM;
3474                                 goto finish;
3475                         }
3476
3477                         if (d)
3478                                 closedir(d);
3479
3480                         d = opendir(path);
3481                         if (!d) {
3482                                 if (errno != ENOENT)
3483                                         log_warning("opendir(%s) failed: %m", path);
3484
3485                                 continue;
3486                         }
3487
3488                         while ((de = readdir(d))) {
3489                                 int a, b;
3490
3491                                 if (ignore_file(de->d_name))
3492                                         continue;
3493
3494                                 if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3495                                         continue;
3496
3497                                 if (strlen(de->d_name) < 4)
3498                                         continue;
3499
3500                                 a = undecchar(de->d_name[1]);
3501                                 b = undecchar(de->d_name[2]);
3502
3503                                 if (a < 0 || b < 0)
3504                                         continue;
3505
3506                                 free(fpath);
3507                                 fpath = strjoin(path, "/", de->d_name, NULL);
3508                                 if (!fpath) {
3509                                         r = -ENOMEM;
3510                                         goto finish;
3511                                 }
3512
3513                                 if (access(fpath, X_OK) < 0) {
3514
3515                                         if (errno != ENOENT)
3516                                                 log_warning("access() failed on %s: %m", fpath);
3517
3518                                         continue;
3519                                 }
3520
3521                                 free(name);
3522                                 name = sysv_translate_name(de->d_name + 3);
3523                                 if (!name) {
3524                                         r = log_oom();
3525                                         goto finish;
3526                                 }
3527
3528                                 r = manager_load_unit_prepare(m, name, NULL, NULL, &service);
3529                                 if (r < 0) {
3530                                         log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3531                                         continue;
3532                                 }
3533
3534                                 if (de->d_name[0] == 'S')  {
3535
3536                                         if (rcnd_table[i].type == RUNLEVEL_UP) {
3537                                                 SERVICE(service)->sysv_start_priority_from_rcnd =
3538                                                         MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
3539
3540                                                 SERVICE(service)->sysv_enabled = true;
3541                                         }
3542
3543                                         r = set_ensure_allocated(&runlevel_services[i],
3544                                                                  trivial_hash_func, trivial_compare_func);
3545                                         if (r < 0)
3546                                                 goto finish;
3547
3548                                         r = set_put(runlevel_services[i], service);
3549                                         if (r < 0)
3550                                                 goto finish;
3551
3552                                 } else if (de->d_name[0] == 'K' &&
3553                                            (rcnd_table[i].type == RUNLEVEL_DOWN)) {
3554
3555                                         r = set_ensure_allocated(&shutdown_services,
3556                                                                  trivial_hash_func, trivial_compare_func);
3557                                         if (r < 0)
3558                                                 goto finish;
3559
3560                                         r = set_put(shutdown_services, service);
3561                                         if (r < 0)
3562                                                 goto finish;
3563                                 }
3564                         }
3565                 }
3566
3567         /* Now we loaded all stubs and are aware of the lowest
3568         start-up priority for all services, not let's actually load
3569         the services, this will also tell us which services are
3570         actually native now */
3571         manager_dispatch_load_queue(m);
3572
3573         /* If this is a native service, rely on native ways to pull in
3574          * a service, don't pu