chiark / gitweb /
386692a10aaa81c3a9bc3e837b04e9a4768c911a
[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         unit_cgroup_context_init_defaults(u, &s->cgroup_context);
151
152         RATELIMIT_INIT(s->start_limit, u->manager->default_start_limit_interval, 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_event_source, s->watchdog_timestamp.monotonic + s->watchdog_usec, 0, service_dispatch_watchdog, s);
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, &s->timer_event_source, now(CLOCK_MONOTONIC) + usec, 0, service_dispatch_timer, s);
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) + strlen(".service") + 1);
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_patch_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 (!pid_is_alive(pid)) {
1372                 if (may_warn)
1373                         log_info_unit(UNIT(s)->id, "PID "PID_FMT" read from file %s does not exist or is a zombie.", pid, s->pid_file);
1374
1375                 return -ESRCH;
1376         }
1377
1378         if (s->main_pid_known) {
1379                 if (pid == s->main_pid)
1380                         return 0;
1381
1382                 log_debug_unit(UNIT(s)->id,
1383                                "Main PID changing: "PID_FMT" -> "PID_FMT,
1384                                s->main_pid, pid);
1385                 service_unwatch_main_pid(s);
1386                 s->main_pid_known = false;
1387         } else
1388                 log_debug_unit(UNIT(s)->id,
1389                                "Main PID loaded: "PID_FMT, pid);
1390
1391         r = service_set_main_pid(s, pid);
1392         if (r < 0)
1393                 return r;
1394
1395         r = unit_watch_pid(UNIT(s), pid);
1396         if (r < 0) {
1397                 /* FIXME: we need to do something here */
1398                 log_warning_unit(UNIT(s)->id,
1399                                  "Failed to watch PID "PID_FMT" from service %s",
1400                                  pid, UNIT(s)->id);
1401                 return r;
1402         }
1403
1404         return 0;
1405 }
1406
1407 static int service_search_main_pid(Service *s) {
1408         pid_t pid;
1409         int r;
1410
1411         assert(s);
1412
1413         /* If we know it anyway, don't ever fallback to unreliable
1414          * heuristics */
1415         if (s->main_pid_known)
1416                 return 0;
1417
1418         if (!s->guess_main_pid)
1419                 return 0;
1420
1421         assert(s->main_pid <= 0);
1422
1423         pid = unit_search_main_pid(UNIT(s));
1424         if (pid <= 0)
1425                 return -ENOENT;
1426
1427         log_debug_unit(UNIT(s)->id,
1428                        "Main PID guessed: "PID_FMT, pid);
1429         r = service_set_main_pid(s, pid);
1430         if (r < 0)
1431                 return r;
1432
1433         r = unit_watch_pid(UNIT(s), pid);
1434         if (r < 0)
1435                 /* FIXME: we need to do something here */
1436                 log_warning_unit(UNIT(s)->id,
1437                                  "Failed to watch PID "PID_FMT" from service %s",
1438                                  pid, UNIT(s)->id);
1439         return r;
1440 }
1441
1442 static void service_set_state(Service *s, ServiceState state) {
1443         ServiceState old_state;
1444         const UnitActiveState *table;
1445
1446         assert(s);
1447
1448         table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1449
1450         old_state = s->state;
1451         s->state = state;
1452
1453         service_unwatch_pid_file(s);
1454
1455         if (!IN_SET(state,
1456                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1457                     SERVICE_RELOAD,
1458                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1459                     SERVICE_STOP_POST,
1460                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
1461                     SERVICE_AUTO_RESTART))
1462                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1463
1464         if (!IN_SET(state,
1465                     SERVICE_START, SERVICE_START_POST,
1466                     SERVICE_RUNNING, SERVICE_RELOAD,
1467                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1468                     SERVICE_STOP_POST,
1469                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1470                 service_unwatch_main_pid(s);
1471                 s->main_command = NULL;
1472         }
1473
1474         if (!IN_SET(state,
1475                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1476                     SERVICE_RELOAD,
1477                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1478                     SERVICE_STOP_POST,
1479                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1480                 service_unwatch_control_pid(s);
1481                 s->control_command = NULL;
1482                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1483         }
1484
1485         if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1486                 unit_unwatch_all_pids(UNIT(s));
1487
1488         if (!IN_SET(state,
1489                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1490                     SERVICE_RUNNING, SERVICE_RELOAD,
1491                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1492                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
1493             !(state == SERVICE_DEAD && UNIT(s)->job)) {
1494                 service_close_socket_fd(s);
1495                 service_connection_unref(s);
1496         }
1497
1498         if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1499                 service_stop_watchdog(s);
1500
1501         /* For the inactive states unit_notify() will trim the cgroup,
1502          * but for exit we have to do that ourselves... */
1503         if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
1504                 unit_destroy_cgroup(UNIT(s));
1505
1506         /* For remain_after_exit services, let's see if we can "release" the
1507          * hold on the console, since unit_notify() only does that in case of
1508          * change of state */
1509         if (state == SERVICE_EXITED && s->remain_after_exit &&
1510             UNIT(s)->manager->n_on_console > 0) {
1511                 ExecContext *ec = unit_get_exec_context(UNIT(s));
1512                 if (ec && exec_context_may_touch_console(ec)) {
1513                         Manager *m = UNIT(s)->manager;
1514
1515                         m->n_on_console --;
1516                         if (m->n_on_console == 0)
1517                                 /* unset no_console_output flag, since the console is free */
1518                                 m->no_console_output = false;
1519                 }
1520         }
1521
1522         if (old_state != state)
1523                 log_debug_unit(UNIT(s)->id, "%s changed %s -> %s", UNIT(s)->id, service_state_to_string(old_state), service_state_to_string(state));
1524
1525         unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
1526         s->reload_result = SERVICE_SUCCESS;
1527 }
1528
1529 static int service_coldplug(Unit *u) {
1530         Service *s = SERVICE(u);
1531         int r;
1532
1533         assert(s);
1534         assert(s->state == SERVICE_DEAD);
1535
1536         if (s->deserialized_state != s->state) {
1537
1538                 if (IN_SET(s->deserialized_state,
1539                            SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1540                            SERVICE_RELOAD,
1541                            SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1542                            SERVICE_STOP_POST,
1543                            SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1544
1545                         usec_t k;
1546
1547                         k = IN_SET(s->deserialized_state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec;
1548
1549                         /* For the start/stop timeouts 0 means off */
1550                         if (k > 0) {
1551                                 r = service_arm_timer(s, k);
1552                                 if (r < 0)
1553                                         return r;
1554                         }
1555                 }
1556
1557                 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
1558
1559                         /* The restart timeouts 0 means immediately */
1560                         r = service_arm_timer(s, s->restart_usec);
1561                         if (r < 0)
1562                                 return r;
1563                 }
1564
1565                 if (pid_is_unwaited(s->main_pid) &&
1566                     ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
1567                      IN_SET(s->deserialized_state,
1568                             SERVICE_START, SERVICE_START_POST,
1569                             SERVICE_RUNNING, SERVICE_RELOAD,
1570                             SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1571                             SERVICE_STOP_POST,
1572                             SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
1573                         r = unit_watch_pid(UNIT(s), s->main_pid);
1574                         if (r < 0)
1575                                 return r;
1576                 }
1577
1578                 if (pid_is_unwaited(s->control_pid) &&
1579                     IN_SET(s->deserialized_state,
1580                            SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1581                            SERVICE_RELOAD,
1582                            SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1583                            SERVICE_STOP_POST,
1584                            SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1585                         r = unit_watch_pid(UNIT(s), s->control_pid);
1586                         if (r < 0)
1587                                 return r;
1588                 }
1589
1590                 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1591                         unit_watch_all_pids(UNIT(s));
1592
1593                 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1594                         service_start_watchdog(s);
1595
1596                 service_set_state(s, s->deserialized_state);
1597         }
1598
1599         return 0;
1600 }
1601
1602 static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1603         Iterator i;
1604         int r;
1605         int *rfds = NULL;
1606         unsigned rn_fds = 0;
1607         Unit *u;
1608
1609         assert(s);
1610         assert(fds);
1611         assert(n_fds);
1612
1613         if (s->socket_fd >= 0)
1614                 return 0;
1615
1616         SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
1617                 int *cfds;
1618                 unsigned cn_fds;
1619                 Socket *sock;
1620
1621                 if (u->type != UNIT_SOCKET)
1622                         continue;
1623
1624                 sock = SOCKET(u);
1625
1626                 r = socket_collect_fds(sock, &cfds, &cn_fds);
1627                 if (r < 0)
1628                         goto fail;
1629
1630                 if (!cfds)
1631                         continue;
1632
1633                 if (!rfds) {
1634                         rfds = cfds;
1635                         rn_fds = cn_fds;
1636                 } else {
1637                         int *t;
1638
1639                         t = new(int, rn_fds+cn_fds);
1640                         if (!t) {
1641                                 free(cfds);
1642                                 r = -ENOMEM;
1643                                 goto fail;
1644                         }
1645
1646                         memcpy(t, rfds, rn_fds * sizeof(int));
1647                         memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
1648                         free(rfds);
1649                         free(cfds);
1650
1651                         rfds = t;
1652                         rn_fds = rn_fds+cn_fds;
1653                 }
1654         }
1655
1656         *fds = rfds;
1657         *n_fds = rn_fds;
1658
1659         return 0;
1660
1661 fail:
1662         free(rfds);
1663
1664         return r;
1665 }
1666
1667 static int service_spawn(
1668                 Service *s,
1669                 ExecCommand *c,
1670                 bool timeout,
1671                 bool pass_fds,
1672                 bool apply_permissions,
1673                 bool apply_chroot,
1674                 bool apply_tty_stdin,
1675                 bool set_notify_socket,
1676                 bool is_control,
1677                 pid_t *_pid) {
1678
1679         pid_t pid;
1680         int r;
1681         int *fds = NULL;
1682         _cleanup_free_ int *fdsbuf = NULL;
1683         unsigned n_fds = 0, n_env = 0;
1684         _cleanup_strv_free_ char
1685                 **argv = NULL, **final_env = NULL, **our_env = NULL;
1686         const char *path;
1687
1688         assert(s);
1689         assert(c);
1690         assert(_pid);
1691
1692         unit_realize_cgroup(UNIT(s));
1693
1694         r = unit_setup_exec_runtime(UNIT(s));
1695         if (r < 0)
1696                 goto fail;
1697
1698         if (pass_fds ||
1699             s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1700             s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1701             s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1702
1703                 if (s->socket_fd >= 0) {
1704                         fds = &s->socket_fd;
1705                         n_fds = 1;
1706                 } else {
1707                         r = service_collect_fds(s, &fdsbuf, &n_fds);
1708                         if (r < 0)
1709                                 goto fail;
1710
1711                         fds = fdsbuf;
1712                 }
1713         }
1714
1715         if (timeout && s->timeout_start_usec > 0) {
1716                 r = service_arm_timer(s, s->timeout_start_usec);
1717                 if (r < 0)
1718                         goto fail;
1719         } else
1720                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1721
1722         r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
1723         if (r < 0)
1724                 goto fail;
1725
1726         our_env = new0(char*, 4);
1727         if (!our_env) {
1728                 r = -ENOMEM;
1729                 goto fail;
1730         }
1731
1732         if (set_notify_socket)
1733                 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
1734                         r = -ENOMEM;
1735                         goto fail;
1736                 }
1737
1738         if (s->main_pid > 0)
1739                 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
1740                         r = -ENOMEM;
1741                         goto fail;
1742                 }
1743
1744         if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
1745                 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
1746                         r = -ENOMEM;
1747                         goto fail;
1748                 }
1749
1750         final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
1751         if (!final_env) {
1752                 r = -ENOMEM;
1753                 goto fail;
1754         }
1755
1756         if (is_control && UNIT(s)->cgroup_path) {
1757                 path = strappenda(UNIT(s)->cgroup_path, "/control");
1758                 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
1759         } else
1760                 path = UNIT(s)->cgroup_path;
1761
1762         r = exec_spawn(c,
1763                        argv,
1764                        &s->exec_context,
1765                        fds, n_fds,
1766                        final_env,
1767                        apply_permissions,
1768                        apply_chroot,
1769                        apply_tty_stdin,
1770                        UNIT(s)->manager->confirm_spawn,
1771                        UNIT(s)->manager->cgroup_supported,
1772                        path,
1773                        manager_get_runtime_prefix(UNIT(s)->manager),
1774                        UNIT(s)->id,
1775                        s->watchdog_usec,
1776                        s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
1777                        s->exec_runtime,
1778                        &pid);
1779         if (r < 0)
1780                 goto fail;
1781
1782         r = unit_watch_pid(UNIT(s), pid);
1783         if (r < 0)
1784                 /* FIXME: we need to do something here */
1785                 goto fail;
1786
1787         *_pid = pid;
1788
1789         return 0;
1790
1791 fail:
1792         if (timeout)
1793                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1794
1795         return r;
1796 }
1797
1798 static int main_pid_good(Service *s) {
1799         assert(s);
1800
1801         /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1802          * don't know */
1803
1804         /* If we know the pid file, then lets just check if it is
1805          * still valid */
1806         if (s->main_pid_known) {
1807
1808                 /* If it's an alien child let's check if it is still
1809                  * alive ... */
1810                 if (s->main_pid_alien && s->main_pid > 0)
1811                         return pid_is_alive(s->main_pid);
1812
1813                 /* .. otherwise assume we'll get a SIGCHLD for it,
1814                  * which we really should wait for to collect exit
1815                  * status and code */
1816                 return s->main_pid > 0;
1817         }
1818
1819         /* We don't know the pid */
1820         return -EAGAIN;
1821 }
1822
1823 _pure_ static int control_pid_good(Service *s) {
1824         assert(s);
1825
1826         return s->control_pid > 0;
1827 }
1828
1829 static int cgroup_good(Service *s) {
1830         int r;
1831
1832         assert(s);
1833
1834         if (!UNIT(s)->cgroup_path)
1835                 return 0;
1836
1837         r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
1838         if (r < 0)
1839                 return r;
1840
1841         return !r;
1842 }
1843
1844 static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
1845         int r;
1846         assert(s);
1847
1848         if (f != SERVICE_SUCCESS)
1849                 s->result = f;
1850
1851         service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1852
1853         if (allow_restart &&
1854             !s->forbid_restart &&
1855             (s->restart == SERVICE_RESTART_ALWAYS ||
1856              (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1857              (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
1858              (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
1859              (s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
1860                                                          s->result == SERVICE_FAILURE_CORE_DUMP))) &&
1861             (s->result != SERVICE_FAILURE_EXIT_CODE ||
1862              !set_contains(s->restart_ignore_status.code, INT_TO_PTR(s->main_exec_status.status))) &&
1863             (s->result != SERVICE_FAILURE_SIGNAL ||
1864              !set_contains(s->restart_ignore_status.signal, INT_TO_PTR(s->main_exec_status.status)))) {
1865
1866                 r = service_arm_timer(s, s->restart_usec);
1867                 if (r < 0)
1868                         goto fail;
1869
1870                 service_set_state(s, SERVICE_AUTO_RESTART);
1871         }
1872
1873         s->forbid_restart = false;
1874
1875         /* We want fresh tmpdirs in case service is started again immediately */
1876         exec_runtime_destroy(s->exec_runtime);
1877         s->exec_runtime = exec_runtime_unref(s->exec_runtime);
1878
1879         /* Also, remove the runtime directory in */
1880         exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
1881
1882         /* Try to delete the pid file. At this point it will be
1883          * out-of-date, and some software might be confused by it, so
1884          * let's remove it. */
1885         if (s->pid_file)
1886                 unlink_noerrno(s->pid_file);
1887
1888         return;
1889
1890 fail:
1891         log_warning_unit(UNIT(s)->id,
1892                          "%s failed to run install restart timer: %s",
1893                          UNIT(s)->id, strerror(-r));
1894         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
1895 }
1896
1897 static void service_enter_stop_post(Service *s, ServiceResult f) {
1898         int r;
1899         assert(s);
1900
1901         if (f != SERVICE_SUCCESS)
1902                 s->result = f;
1903
1904         service_unwatch_control_pid(s);
1905         unit_watch_all_pids(UNIT(s));
1906
1907         s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1908         if (s->control_command) {
1909                 s->control_command_id = SERVICE_EXEC_STOP_POST;
1910
1911                 r = service_spawn(s,
1912                                   s->control_command,
1913                                   true,
1914                                   false,
1915                                   !s->permissions_start_only,
1916                                   !s->root_directory_start_only,
1917                                   true,
1918                                   false,
1919                                   true,
1920                                   &s->control_pid);
1921                 if (r < 0)
1922                         goto fail;
1923
1924                 service_set_state(s, SERVICE_STOP_POST);
1925         } else
1926                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
1927
1928         return;
1929
1930 fail:
1931         log_warning_unit(UNIT(s)->id,
1932                          "%s failed to run 'stop-post' task: %s",
1933                          UNIT(s)->id, strerror(-r));
1934         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
1935 }
1936
1937 static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
1938         int r;
1939
1940         assert(s);
1941
1942         if (f != SERVICE_SUCCESS)
1943                 s->result = f;
1944
1945         unit_watch_all_pids(UNIT(s));
1946
1947         r = unit_kill_context(
1948                         UNIT(s),
1949                         &s->kill_context,
1950                         state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1951                         s->main_pid,
1952                         s->control_pid,
1953                         s->main_pid_alien);
1954
1955         if (r < 0)
1956                 goto fail;
1957
1958         if (r > 0) {
1959                 if (s->timeout_stop_usec > 0) {
1960                         r = service_arm_timer(s, s->timeout_stop_usec);
1961                         if (r < 0)
1962                                 goto fail;
1963                 }
1964
1965                 service_set_state(s, state);
1966         } else if (state == SERVICE_STOP_SIGTERM)
1967                 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1968         else if (state == SERVICE_STOP_SIGKILL)
1969                 service_enter_stop_post(s, SERVICE_SUCCESS);
1970         else if (state == SERVICE_FINAL_SIGTERM)
1971                 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
1972         else
1973                 service_enter_dead(s, SERVICE_SUCCESS, true);
1974
1975         return;
1976
1977 fail:
1978         log_warning_unit(UNIT(s)->id,
1979                          "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
1980
1981         if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
1982                 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
1983         else
1984                 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
1985 }
1986
1987 static void service_enter_stop(Service *s, ServiceResult f) {
1988         int r;
1989
1990         assert(s);
1991
1992         if (f != SERVICE_SUCCESS)
1993                 s->result = f;
1994
1995         service_unwatch_control_pid(s);
1996         unit_watch_all_pids(UNIT(s));
1997
1998         s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1999         if (s->control_command) {
2000                 s->control_command_id = SERVICE_EXEC_STOP;
2001
2002                 r = service_spawn(s,
2003                                   s->control_command,
2004                                   true,
2005                                   false,
2006                                   !s->permissions_start_only,
2007                                   !s->root_directory_start_only,
2008                                   false,
2009                                   false,
2010                                   true,
2011                                   &s->control_pid);
2012                 if (r < 0)
2013                         goto fail;
2014
2015                 service_set_state(s, SERVICE_STOP);
2016         } else
2017                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2018
2019         return;
2020
2021 fail:
2022         log_warning_unit(UNIT(s)->id,
2023                          "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
2024         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2025 }
2026
2027 static void service_enter_running(Service *s, ServiceResult f) {
2028         int main_pid_ok, cgroup_ok;
2029         assert(s);
2030
2031         if (f != SERVICE_SUCCESS)
2032                 s->result = f;
2033
2034         main_pid_ok = main_pid_good(s);
2035         cgroup_ok = cgroup_good(s);
2036
2037         if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
2038             (s->bus_name_good || s->type != SERVICE_DBUS))
2039                 service_set_state(s, SERVICE_RUNNING);
2040         else if (s->remain_after_exit)
2041                 service_set_state(s, SERVICE_EXITED);
2042         else
2043                 service_enter_stop(s, SERVICE_SUCCESS);
2044 }
2045
2046 static void service_enter_start_post(Service *s) {
2047         int r;
2048         assert(s);
2049
2050         service_unwatch_control_pid(s);
2051         service_reset_watchdog(s);
2052
2053         s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
2054         if (s->control_command) {
2055                 s->control_command_id = SERVICE_EXEC_START_POST;
2056
2057                 r = service_spawn(s,
2058                                   s->control_command,
2059                                   true,
2060                                   false,
2061                                   !s->permissions_start_only,
2062                                   !s->root_directory_start_only,
2063                                   false,
2064                                   false,
2065                                   true,
2066                                   &s->control_pid);
2067                 if (r < 0)
2068                         goto fail;
2069
2070                 service_set_state(s, SERVICE_START_POST);
2071         } else
2072                 service_enter_running(s, SERVICE_SUCCESS);
2073
2074         return;
2075
2076 fail:
2077         log_warning_unit(UNIT(s)->id,
2078                          "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
2079         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2080 }
2081
2082 static void service_kill_control_processes(Service *s) {
2083         char *p;
2084
2085         if (!UNIT(s)->cgroup_path)
2086                 return;
2087
2088         p = strappenda(UNIT(s)->cgroup_path, "/control");
2089         cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
2090 }
2091
2092 static void service_enter_start(Service *s) {
2093         ExecCommand *c;
2094         pid_t pid;
2095         int r;
2096
2097         assert(s);
2098
2099         assert(s->exec_command[SERVICE_EXEC_START]);
2100         assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
2101
2102         service_unwatch_control_pid(s);
2103         service_unwatch_main_pid(s);
2104
2105         /* We want to ensure that nobody leaks processes from
2106          * START_PRE here, so let's go on a killing spree, People
2107          * should not spawn long running processes from START_PRE. */
2108         service_kill_control_processes(s);
2109
2110         if (s->type == SERVICE_FORKING) {
2111                 s->control_command_id = SERVICE_EXEC_START;
2112                 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2113
2114                 s->main_command = NULL;
2115         } else {
2116                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2117                 s->control_command = NULL;
2118
2119                 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2120         }
2121
2122         r = service_spawn(s,
2123                           c,
2124                           s->type == SERVICE_FORKING || s->type == SERVICE_DBUS ||
2125                             s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
2126                           true,
2127                           true,
2128                           true,
2129                           true,
2130                           s->notify_access != NOTIFY_NONE,
2131                           false,
2132                           &pid);
2133         if (r < 0)
2134                 goto fail;
2135
2136         if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
2137                 /* For simple services we immediately start
2138                  * the START_POST binaries. */
2139
2140                 service_set_main_pid(s, pid);
2141                 service_enter_start_post(s);
2142
2143         } else  if (s->type == SERVICE_FORKING) {
2144
2145                 /* For forking services we wait until the start
2146                  * process exited. */
2147
2148                 s->control_pid = pid;
2149                 service_set_state(s, SERVICE_START);
2150
2151         } else if (s->type == SERVICE_ONESHOT ||
2152                    s->type == SERVICE_DBUS ||
2153                    s->type == SERVICE_NOTIFY) {
2154
2155                 /* For oneshot services we wait until the start
2156                  * process exited, too, but it is our main process. */
2157
2158                 /* For D-Bus services we know the main pid right away,
2159                  * but wait for the bus name to appear on the
2160                  * bus. Notify services are similar. */
2161
2162                 service_set_main_pid(s, pid);
2163                 service_set_state(s, SERVICE_START);
2164         } else
2165                 assert_not_reached("Unknown service type");
2166
2167         return;
2168
2169 fail:
2170         log_warning_unit(UNIT(s)->id,
2171                          "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
2172         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2173 }
2174
2175 static void service_enter_start_pre(Service *s) {
2176         int r;
2177
2178         assert(s);
2179
2180         service_unwatch_control_pid(s);
2181
2182         s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2183         if (s->control_command) {
2184                 /* Before we start anything, let's clear up what might
2185                  * be left from previous runs. */
2186                 service_kill_control_processes(s);
2187
2188                 s->control_command_id = SERVICE_EXEC_START_PRE;
2189
2190                 r = service_spawn(s,
2191                                   s->control_command,
2192                                   true,
2193                                   false,
2194                                   !s->permissions_start_only,
2195                                   !s->root_directory_start_only,
2196                                   true,
2197                                   false,
2198                                   true,
2199                                   &s->control_pid);
2200                 if (r < 0)
2201                         goto fail;
2202
2203                 service_set_state(s, SERVICE_START_PRE);
2204         } else
2205                 service_enter_start(s);
2206
2207         return;
2208
2209 fail:
2210         log_warning_unit(UNIT(s)->id,
2211                          "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
2212         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2213 }
2214
2215 static void service_enter_restart(Service *s) {
2216         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
2217         int r;
2218
2219         assert(s);
2220
2221         if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2222                 /* Don't restart things if we are going down anyway */
2223                 log_info_unit(UNIT(s)->id,
2224                               "Stop job pending for unit, delaying automatic restart.");
2225
2226                 r = service_arm_timer(s, s->restart_usec);
2227                 if (r < 0)
2228                         goto fail;
2229
2230                 return;
2231         }
2232
2233         /* Any units that are bound to this service must also be
2234          * restarted. We use JOB_RESTART (instead of the more obvious
2235          * JOB_START) here so that those dependency jobs will be added
2236          * as well. */
2237         r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
2238         if (r < 0)
2239                 goto fail;
2240
2241         /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2242          * it will be canceled as part of the service_stop() call that
2243          * is executed as part of JOB_RESTART. */
2244
2245         log_debug_unit(UNIT(s)->id,
2246                        "%s scheduled restart job.", UNIT(s)->id);
2247         return;
2248
2249 fail:
2250         log_warning_unit(UNIT(s)->id,
2251                          "%s failed to schedule restart job: %s",
2252                          UNIT(s)->id, bus_error_message(&error, -r));
2253         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
2254 }
2255
2256 static void service_enter_reload(Service *s) {
2257         int r;
2258
2259         assert(s);
2260
2261         service_unwatch_control_pid(s);
2262
2263         s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2264         if (s->control_command) {
2265                 s->control_command_id = SERVICE_EXEC_RELOAD;
2266
2267                 r = service_spawn(s,
2268                                   s->control_command,
2269                                   true,
2270                                   false,
2271                                   !s->permissions_start_only,
2272                                   !s->root_directory_start_only,
2273                                   false,
2274                                   false,
2275                                   true,
2276                                   &s->control_pid);
2277                 if (r < 0)
2278                         goto fail;
2279
2280                 service_set_state(s, SERVICE_RELOAD);
2281         } else
2282                 service_enter_running(s, SERVICE_SUCCESS);
2283
2284         return;
2285
2286 fail:
2287         log_warning_unit(UNIT(s)->id,
2288                          "%s failed to run 'reload' task: %s",
2289                          UNIT(s)->id, strerror(-r));
2290         s->reload_result = SERVICE_FAILURE_RESOURCES;
2291         service_enter_running(s, SERVICE_SUCCESS);
2292 }
2293
2294 static void service_run_next_control(Service *s) {
2295         int r;
2296
2297         assert(s);
2298         assert(s->control_command);
2299         assert(s->control_command->command_next);
2300
2301         assert(s->control_command_id != SERVICE_EXEC_START);
2302
2303         s->control_command = s->control_command->command_next;
2304         service_unwatch_control_pid(s);
2305
2306         r = service_spawn(s,
2307                           s->control_command,
2308                           true,
2309                           false,
2310                           !s->permissions_start_only,
2311                           !s->root_directory_start_only,
2312                           s->control_command_id == SERVICE_EXEC_START_PRE ||
2313                           s->control_command_id == SERVICE_EXEC_STOP_POST,
2314                           false,
2315                           true,
2316                           &s->control_pid);
2317         if (r < 0)
2318                 goto fail;
2319
2320         return;
2321
2322 fail:
2323         log_warning_unit(UNIT(s)->id,
2324                          "%s failed to run next control task: %s",
2325                          UNIT(s)->id, strerror(-r));
2326
2327         if (s->state == SERVICE_START_PRE)
2328                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2329         else if (s->state == SERVICE_STOP)
2330                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2331         else if (s->state == SERVICE_STOP_POST)
2332                 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2333         else if (s->state == SERVICE_RELOAD) {
2334                 s->reload_result = SERVICE_FAILURE_RESOURCES;
2335                 service_enter_running(s, SERVICE_SUCCESS);
2336         } else
2337                 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2338 }
2339
2340 static void service_run_next_main(Service *s) {
2341         pid_t pid;
2342         int r;
2343
2344         assert(s);
2345         assert(s->main_command);
2346         assert(s->main_command->command_next);
2347         assert(s->type == SERVICE_ONESHOT);
2348
2349         s->main_command = s->main_command->command_next;
2350         service_unwatch_main_pid(s);
2351
2352         r = service_spawn(s,
2353                           s->main_command,
2354                           true,
2355                           true,
2356                           true,
2357                           true,
2358                           true,
2359                           s->notify_access != NOTIFY_NONE,
2360                           false,
2361                           &pid);
2362         if (r < 0)
2363                 goto fail;
2364
2365         service_set_main_pid(s, pid);
2366
2367         return;
2368
2369 fail:
2370         log_warning_unit(UNIT(s)->id,
2371                          "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
2372         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2373 }
2374
2375 static int service_start_limit_test(Service *s) {
2376         assert(s);
2377
2378         if (ratelimit_test(&s->start_limit))
2379                 return 0;
2380
2381         switch (s->start_limit_action) {
2382
2383         case SERVICE_START_LIMIT_NONE:
2384                 log_warning_unit(UNIT(s)->id,
2385                                  "%s start request repeated too quickly, refusing to start.",
2386                                  UNIT(s)->id);
2387                 break;
2388
2389         case SERVICE_START_LIMIT_REBOOT: {
2390                 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
2391                 int r;
2392
2393                 log_warning_unit(UNIT(s)->id,
2394                                  "%s start request repeated too quickly, rebooting.", UNIT(s)->id);
2395
2396                 r = manager_add_job_by_name(UNIT(s)->manager, JOB_START,
2397                                             SPECIAL_REBOOT_TARGET, JOB_REPLACE,
2398                                             true, &error, NULL);
2399                 if (r < 0)
2400                         log_error_unit(UNIT(s)->id,
2401                                        "Failed to reboot: %s.", bus_error_message(&error, r));
2402
2403                 break;
2404         }
2405
2406         case SERVICE_START_LIMIT_REBOOT_FORCE:
2407                 log_warning_unit(UNIT(s)->id,
2408                                  "%s start request repeated too quickly, forcibly rebooting.", UNIT(s)->id);
2409                 UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2410                 break;
2411
2412         case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
2413                 log_warning_unit(UNIT(s)->id,
2414                                  "%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
2415                 sync();
2416                 reboot(RB_AUTOBOOT);
2417                 break;
2418
2419         default:
2420                 log_error_unit(UNIT(s)->id,
2421                                "start limit action=%i", s->start_limit_action);
2422                 assert_not_reached("Unknown StartLimitAction.");
2423         }
2424
2425         return -ECANCELED;
2426 }
2427
2428 static int service_start(Unit *u) {
2429         Service *s = SERVICE(u);
2430         int r;
2431
2432         assert(s);
2433
2434         /* We cannot fulfill this request right now, try again later
2435          * please! */
2436         if (s->state == SERVICE_STOP ||
2437             s->state == SERVICE_STOP_SIGTERM ||
2438             s->state == SERVICE_STOP_SIGKILL ||
2439             s->state == SERVICE_STOP_POST ||
2440             s->state == SERVICE_FINAL_SIGTERM ||
2441             s->state == SERVICE_FINAL_SIGKILL)
2442                 return -EAGAIN;
2443
2444         /* Already on it! */
2445         if (s->state == SERVICE_START_PRE ||
2446             s->state == SERVICE_START ||
2447             s->state == SERVICE_START_POST)
2448                 return 0;
2449
2450         /* A service that will be restarted must be stopped first to
2451          * trigger BindsTo and/or OnFailure dependencies. If a user
2452          * does not want to wait for the holdoff time to elapse, the
2453          * service should be manually restarted, not started. We
2454          * simply return EAGAIN here, so that any start jobs stay
2455          * queued, and assume that the auto restart timer will
2456          * eventually trigger the restart. */
2457         if (s->state == SERVICE_AUTO_RESTART)
2458                 return -EAGAIN;
2459
2460         assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
2461
2462         /* Make sure we don't enter a busy loop of some kind. */
2463         r = service_start_limit_test(s);
2464         if (r < 0) {
2465                 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
2466                 return r;
2467         }
2468
2469         s->result = SERVICE_SUCCESS;
2470         s->reload_result = SERVICE_SUCCESS;
2471         s->main_pid_known = false;
2472         s->main_pid_alien = false;
2473         s->forbid_restart = false;
2474
2475         service_enter_start_pre(s);
2476         return 0;
2477 }
2478
2479 static int service_stop(Unit *u) {
2480         Service *s = SERVICE(u);
2481
2482         assert(s);
2483
2484         /* Don't create restart jobs from here. */
2485         s->forbid_restart = true;
2486
2487         /* Already on it */
2488         if (s->state == SERVICE_STOP ||
2489             s->state == SERVICE_STOP_SIGTERM ||
2490             s->state == SERVICE_STOP_SIGKILL ||
2491             s->state == SERVICE_STOP_POST ||
2492             s->state == SERVICE_FINAL_SIGTERM ||
2493             s->state == SERVICE_FINAL_SIGKILL)
2494                 return 0;
2495
2496         /* A restart will be scheduled or is in progress. */
2497         if (s->state == SERVICE_AUTO_RESTART) {
2498                 service_set_state(s, SERVICE_DEAD);
2499                 return 0;
2500         }
2501
2502         /* If there's already something running we go directly into
2503          * kill mode. */
2504         if (s->state == SERVICE_START_PRE ||
2505             s->state == SERVICE_START ||
2506             s->state == SERVICE_START_POST ||
2507             s->state == SERVICE_RELOAD) {
2508                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2509                 return 0;
2510         }
2511
2512         assert(s->state == SERVICE_RUNNING ||
2513                s->state == SERVICE_EXITED);
2514
2515         service_enter_stop(s, SERVICE_SUCCESS);
2516         return 0;
2517 }
2518
2519 static int service_reload(Unit *u) {
2520         Service *s = SERVICE(u);
2521
2522         assert(s);
2523
2524         assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
2525
2526         service_enter_reload(s);
2527         return 0;
2528 }
2529
2530 _pure_ static bool service_can_reload(Unit *u) {
2531         Service *s = SERVICE(u);
2532
2533         assert(s);
2534
2535         return !!s->exec_command[SERVICE_EXEC_RELOAD];
2536 }
2537
2538 static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2539         Service *s = SERVICE(u);
2540
2541         assert(u);
2542         assert(f);
2543         assert(fds);
2544
2545         unit_serialize_item(u, f, "state", service_state_to_string(s->state));
2546         unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2547         unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
2548
2549         if (s->control_pid > 0)
2550                 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
2551                                            s->control_pid);
2552
2553         if (s->main_pid_known && s->main_pid > 0)
2554                 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
2555
2556         unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2557
2558         if (s->status_text)
2559                 unit_serialize_item(u, f, "status-text", s->status_text);
2560
2561         /* FIXME: There's a minor uncleanliness here: if there are
2562          * multiple commands attached here, we will start from the
2563          * first one again */
2564         if (s->control_command_id >= 0)
2565                 unit_serialize_item(u, f, "control-command",
2566                                     service_exec_command_to_string(s->control_command_id));
2567
2568         if (s->socket_fd >= 0) {
2569                 int copy;
2570
2571                 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2572                         return copy;
2573
2574                 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2575         }
2576
2577         if (s->main_exec_status.pid > 0) {
2578                 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
2579                                            s->main_exec_status.pid);
2580                 dual_timestamp_serialize(f, "main-exec-status-start",
2581                                          &s->main_exec_status.start_timestamp);
2582                 dual_timestamp_serialize(f, "main-exec-status-exit",
2583                                          &s->main_exec_status.exit_timestamp);
2584
2585                 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
2586                         unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
2587                                                    s->main_exec_status.code);
2588                         unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
2589                                                    s->main_exec_status.status);
2590                 }
2591         }
2592         if (dual_timestamp_is_set(&s->watchdog_timestamp))
2593                 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
2594
2595         if (s->forbid_restart)
2596                 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
2597
2598         return 0;
2599 }
2600
2601 static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2602         Service *s = SERVICE(u);
2603
2604         assert(u);
2605         assert(key);
2606         assert(value);
2607         assert(fds);
2608
2609         if (streq(key, "state")) {
2610                 ServiceState state;
2611
2612                 state = service_state_from_string(value);
2613                 if (state < 0)
2614                         log_debug_unit(u->id, "Failed to parse state value %s", value);
2615                 else
2616                         s->deserialized_state = state;
2617         } else if (streq(key, "result")) {
2618                 ServiceResult f;
2619
2620                 f = service_result_from_string(value);
2621                 if (f < 0)
2622                         log_debug_unit(u->id, "Failed to parse result value %s", value);
2623                 else if (f != SERVICE_SUCCESS)
2624                         s->result = f;
2625
2626         } else if (streq(key, "reload-result")) {
2627                 ServiceResult f;
2628
2629                 f = service_result_from_string(value);
2630                 if (f < 0)
2631                         log_debug_unit(u->id, "Failed to parse reload result value %s", value);
2632                 else if (f != SERVICE_SUCCESS)
2633                         s->reload_result = f;
2634
2635         } else if (streq(key, "control-pid")) {
2636                 pid_t pid;
2637
2638                 if (parse_pid(value, &pid) < 0)
2639                         log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
2640                 else
2641                         s->control_pid = pid;
2642         } else if (streq(key, "main-pid")) {
2643                 pid_t pid;
2644
2645                 if (parse_pid(value, &pid) < 0)
2646                         log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
2647                 else {
2648                         service_set_main_pid(s, pid);
2649                         unit_watch_pid(UNIT(s), pid);
2650                 }
2651         } else if (streq(key, "main-pid-known")) {
2652                 int b;
2653
2654                 b = parse_boolean(value);
2655                 if (b < 0)
2656                         log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
2657                 else
2658                         s->main_pid_known = b;
2659         } else if (streq(key, "status-text")) {
2660                 char *t;
2661
2662                 t = strdup(value);
2663                 if (!t)
2664                         log_oom();
2665                 else {
2666                         free(s->status_text);
2667                         s->status_text = t;
2668                 }
2669
2670         } else if (streq(key, "control-command")) {
2671                 ServiceExecCommand id;
2672
2673                 id = service_exec_command_from_string(value);
2674                 if (id < 0)
2675                         log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
2676                 else {
2677                         s->control_command_id = id;
2678                         s->control_command = s->exec_command[id];
2679                 }
2680         } else if (streq(key, "socket-fd")) {
2681                 int fd;
2682
2683                 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2684                         log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
2685                 else {
2686
2687                         if (s->socket_fd >= 0)
2688                                 close_nointr_nofail(s->socket_fd);
2689                         s->socket_fd = fdset_remove(fds, fd);
2690                 }
2691         } else if (streq(key, "main-exec-status-pid")) {
2692                 pid_t pid;
2693
2694                 if (parse_pid(value, &pid) < 0)
2695                         log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
2696                 else
2697                         s->main_exec_status.pid = pid;
2698         } else if (streq(key, "main-exec-status-code")) {
2699                 int i;
2700
2701                 if (safe_atoi(value, &i) < 0)
2702                         log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
2703                 else
2704                         s->main_exec_status.code = i;
2705         } else if (streq(key, "main-exec-status-status")) {
2706                 int i;
2707
2708                 if (safe_atoi(value, &i) < 0)
2709                         log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
2710                 else
2711                         s->main_exec_status.status = i;
2712         } else if (streq(key, "main-exec-status-start"))
2713                 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2714         else if (streq(key, "main-exec-status-exit"))
2715                 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
2716         else if (streq(key, "watchdog-timestamp"))
2717                 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
2718         else if (streq(key, "forbid-restart")) {
2719                 int b;
2720
2721                 b = parse_boolean(value);
2722                 if (b < 0)
2723                         log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
2724                 else
2725                         s->forbid_restart = b;
2726         } else
2727                 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
2728
2729         return 0;
2730 }
2731
2732 _pure_ static UnitActiveState service_active_state(Unit *u) {
2733         const UnitActiveState *table;
2734
2735         assert(u);
2736
2737         table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2738
2739         return table[SERVICE(u)->state];
2740 }
2741
2742 static const char *service_sub_state_to_string(Unit *u) {
2743         assert(u);
2744
2745         return service_state_to_string(SERVICE(u)->state);
2746 }
2747
2748 static bool service_check_gc(Unit *u) {
2749         Service *s = SERVICE(u);
2750
2751         assert(s);
2752
2753         /* Never clean up services that still have a process around,
2754          * even if the service is formally dead. */
2755         if (cgroup_good(s) > 0 ||
2756             main_pid_good(s) > 0 ||
2757             control_pid_good(s) > 0)
2758                 return true;
2759
2760 #ifdef HAVE_SYSV_COMPAT
2761         if (s->is_sysv)
2762                 return true;
2763 #endif
2764
2765         return false;
2766 }
2767
2768 _pure_ static bool service_check_snapshot(Unit *u) {
2769         Service *s = SERVICE(u);
2770
2771         assert(s);
2772
2773         return (s->socket_fd < 0);
2774 }
2775
2776 static int service_retry_pid_file(Service *s) {
2777         int r;
2778
2779         assert(s->pid_file);
2780         assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2781
2782         r = service_load_pid_file(s, false);
2783         if (r < 0)
2784                 return r;
2785
2786         service_unwatch_pid_file(s);
2787
2788         service_enter_running(s, SERVICE_SUCCESS);
2789         return 0;
2790 }
2791
2792 static int service_watch_pid_file(Service *s) {
2793         int r;
2794
2795         log_debug_unit(UNIT(s)->id,
2796                        "Setting watch for %s's PID file %s",
2797                        UNIT(s)->id, s->pid_file_pathspec->path);
2798         r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
2799         if (r < 0)
2800                 goto fail;
2801
2802         /* the pidfile might have appeared just before we set the watch */
2803         log_debug_unit(UNIT(s)->id,
2804                        "Trying to read %s's PID file %s in case it changed",
2805                        UNIT(s)->id, s->pid_file_pathspec->path);
2806         service_retry_pid_file(s);
2807
2808         return 0;
2809 fail:
2810         log_error_unit(UNIT(s)->id,
2811                        "Failed to set a watch for %s's PID file %s: %s",
2812                        UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
2813         service_unwatch_pid_file(s);
2814         return r;
2815 }
2816
2817 static int service_demand_pid_file(Service *s) {
2818         PathSpec *ps;
2819
2820         assert(s->pid_file);
2821         assert(!s->pid_file_pathspec);
2822
2823         ps = new0(PathSpec, 1);
2824         if (!ps)
2825                 return -ENOMEM;
2826
2827         ps->unit = UNIT(s);
2828         ps->path = strdup(s->pid_file);
2829         if (!ps->path) {
2830                 free(ps);
2831                 return -ENOMEM;
2832         }
2833
2834         path_kill_slashes(ps->path);
2835
2836         /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2837          * keep their PID file open all the time. */
2838         ps->type = PATH_MODIFIED;
2839         ps->inotify_fd = -1;
2840
2841         s->pid_file_pathspec = ps;
2842
2843         return service_watch_pid_file(s);
2844 }
2845
2846 static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
2847         PathSpec *p = userdata;
2848         Service *s;
2849
2850         assert(p);
2851
2852         s = SERVICE(p->unit);
2853
2854         assert(s);
2855         assert(fd >= 0);
2856         assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2857         assert(s->pid_file_pathspec);
2858         assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
2859
2860         log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
2861
2862         if (path_spec_fd_event(p, events) < 0)
2863                 goto fail;
2864
2865         if (service_retry_pid_file(s) == 0)
2866                 return 0;
2867
2868         if (service_watch_pid_file(s) < 0)
2869                 goto fail;
2870
2871         return 0;
2872
2873 fail:
2874         service_unwatch_pid_file(s);
2875         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2876         return 0;
2877 }
2878
2879 static void service_notify_cgroup_empty_event(Unit *u) {
2880         Service *s = SERVICE(u);
2881
2882         assert(u);
2883
2884         log_debug_unit(u->id, "%s: cgroup is empty", u->id);
2885
2886         switch (s->state) {
2887
2888                 /* Waiting for SIGCHLD is usually more interesting,
2889                  * because it includes return codes/signals. Which is
2890                  * why we ignore the cgroup events for most cases,
2891                  * except when we don't know pid which to expect the
2892                  * SIGCHLD for. */
2893
2894         case SERVICE_START:
2895         case SERVICE_START_POST:
2896                 /* If we were hoping for the daemon to write its PID file,
2897                  * we can give up now. */
2898                 if (s->pid_file_pathspec) {
2899                         log_warning_unit(u->id,
2900                                          "%s never wrote its PID file. Failing.", UNIT(s)->id);
2901                         service_unwatch_pid_file(s);
2902                         if (s->state == SERVICE_START)
2903                                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2904                         else
2905                                 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2906                 }
2907                 break;
2908
2909         case SERVICE_RUNNING:
2910                 /* service_enter_running() will figure out what to do */
2911                 service_enter_running(s, SERVICE_SUCCESS);
2912                 break;
2913
2914         case SERVICE_STOP_SIGTERM:
2915         case SERVICE_STOP_SIGKILL:
2916
2917                 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2918                         service_enter_stop_post(s, SERVICE_SUCCESS);
2919
2920                 break;
2921
2922         case SERVICE_STOP_POST:
2923         case SERVICE_FINAL_SIGTERM:
2924         case SERVICE_FINAL_SIGKILL:
2925                 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2926                         service_enter_dead(s, SERVICE_SUCCESS, true);
2927
2928                 break;
2929
2930         default:
2931                 ;
2932         }
2933 }
2934
2935 static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2936         Service *s = SERVICE(u);
2937         ServiceResult f;
2938
2939         assert(s);
2940         assert(pid >= 0);
2941
2942         if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2943                                      is_clean_exit_lsb(code, status, &s->success_status))
2944                 f = SERVICE_SUCCESS;
2945         else if (code == CLD_EXITED)
2946                 f = SERVICE_FAILURE_EXIT_CODE;
2947         else if (code == CLD_KILLED)
2948                 f = SERVICE_FAILURE_SIGNAL;
2949         else if (code == CLD_DUMPED)
2950                 f = SERVICE_FAILURE_CORE_DUMP;
2951         else
2952                 assert_not_reached("Unknown code");
2953
2954         if (s->main_pid == pid) {
2955                 /* Forking services may occasionally move to a new PID.
2956                  * As long as they update the PID file before exiting the old
2957                  * PID, they're fine. */
2958                 if (service_load_pid_file(s, false) == 0)
2959                         return;
2960
2961                 s->main_pid = 0;
2962                 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
2963
2964                 if (s->main_command) {
2965                         /* If this is not a forking service than the
2966                          * main process got started and hence we copy
2967                          * the exit status so that it is recorded both
2968                          * as main and as control process exit
2969                          * status */
2970
2971                         s->main_command->exec_status = s->main_exec_status;
2972
2973                         if (s->main_command->ignore)
2974                                 f = SERVICE_SUCCESS;
2975                 } else if (s->exec_command[SERVICE_EXEC_START]) {
2976
2977                         /* If this is a forked process, then we should
2978                          * ignore the return value if this was
2979                          * configured for the starter process */
2980
2981                         if (s->exec_command[SERVICE_EXEC_START]->ignore)
2982                                 f = SERVICE_SUCCESS;
2983                 }
2984
2985                 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2986                            u->id,
2987                            "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
2988                                   u->id, sigchld_code_to_string(code), status,
2989                                   strna(code == CLD_EXITED
2990                                         ? exit_status_to_string(status, EXIT_STATUS_FULL)
2991                                         : signal_to_string(status)),
2992                            "EXIT_CODE=%s", sigchld_code_to_string(code),
2993                            "EXIT_STATUS=%i", status,
2994                            NULL);
2995
2996                 if (f != SERVICE_SUCCESS)
2997                         s->result = f;
2998
2999                 if (s->main_command &&
3000                     s->main_command->command_next &&
3001                     f == SERVICE_SUCCESS) {
3002
3003                         /* There is another command to *
3004                          * execute, so let's do that. */
3005
3006                         log_debug_unit(u->id,
3007                                        "%s running next main command for state %s",
3008                                        u->id, service_state_to_string(s->state));
3009                         service_run_next_main(s);
3010
3011                 } else {
3012
3013                         /* The service exited, so the service is officially
3014                          * gone. */
3015                         s->main_command = NULL;
3016
3017                         switch (s->state) {
3018
3019                         case SERVICE_START_POST:
3020                         case SERVICE_RELOAD:
3021                         case SERVICE_STOP:
3022                                 /* Need to wait until the operation is
3023                                  * done */
3024                                 break;
3025
3026                         case SERVICE_START:
3027                                 if (s->type == SERVICE_ONESHOT) {
3028                                         /* This was our main goal, so let's go on */
3029                                         if (f == SERVICE_SUCCESS)
3030                                                 service_enter_start_post(s);
3031                                         else
3032                                                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3033                                         break;
3034                                 }
3035
3036                                 /* Fall through */
3037
3038                         case SERVICE_RUNNING:
3039                                 service_enter_running(s, f);
3040                                 break;
3041
3042                         case SERVICE_STOP_SIGTERM:
3043                         case SERVICE_STOP_SIGKILL:
3044
3045                                 if (!control_pid_good(s))
3046                                         service_enter_stop_post(s, f);
3047
3048                                 /* If there is still a control process, wait for that first */
3049                                 break;
3050
3051                         case SERVICE_STOP_POST:
3052                         case SERVICE_FINAL_SIGTERM:
3053                         case SERVICE_FINAL_SIGKILL:
3054
3055                                 if (!control_pid_good(s))
3056                                         service_enter_dead(s, f, true);
3057                                 break;
3058
3059                         default:
3060                                 assert_not_reached("Uh, main process died at wrong time.");
3061                         }
3062                 }
3063
3064         } else if (s->control_pid == pid) {
3065                 s->control_pid = 0;
3066
3067                 if (s->control_command) {
3068                         exec_status_exit(&s->control_command->exec_status,
3069                                          &s->exec_context, pid, code, status);
3070
3071                         if (s->control_command->ignore)
3072                                 f = SERVICE_SUCCESS;
3073                 }
3074
3075                 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
3076                               "%s: control process exited, code=%s status=%i",
3077                               u->id, sigchld_code_to_string(code), status);
3078
3079                 if (f != SERVICE_SUCCESS)
3080                         s->result = f;
3081
3082                 /* Immediately get rid of the cgroup, so that the
3083                  * kernel doesn't delay the cgroup empty messages for
3084                  * the service cgroup any longer than necessary */
3085                 service_kill_control_processes(s);
3086
3087                 if (s->control_command &&
3088                     s->control_command->command_next &&
3089                     f == SERVICE_SUCCESS) {
3090
3091                         /* There is another command to *
3092                          * execute, so let's do that. */
3093
3094                         log_debug_unit(u->id,
3095                                        "%s running next control command for state %s",
3096                                        u->id, service_state_to_string(s->state));
3097                         service_run_next_control(s);
3098
3099                 } else {
3100                         /* No further commands for this step, so let's
3101                          * figure out what to do next */
3102
3103                         s->control_command = NULL;
3104                         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3105
3106                         log_debug_unit(u->id,
3107                                        "%s got final SIGCHLD for state %s",
3108                                        u->id, service_state_to_string(s->state));
3109
3110                         switch (s->state) {
3111
3112                         case SERVICE_START_PRE:
3113                                 if (f == SERVICE_SUCCESS)
3114                                         service_enter_start(s);
3115                                 else
3116                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3117                                 break;
3118
3119                         case SERVICE_START:
3120                                 if (s->type != SERVICE_FORKING)
3121                                         /* Maybe spurious event due to a reload that changed the type? */
3122                                         break;
3123
3124                                 if (f != SERVICE_SUCCESS) {
3125                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3126                                         break;
3127                                 }
3128
3129                                 if (s->pid_file) {
3130                                         bool has_start_post;
3131                                         int r;
3132
3133                                         /* Let's try to load the pid file here if we can.
3134                                          * The PID file might actually be created by a START_POST
3135                                          * script. In that case don't worry if the loading fails. */
3136
3137                                         has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3138                                         r = service_load_pid_file(s, !has_start_post);
3139                                         if (!has_start_post && r < 0) {
3140                                                 r = service_demand_pid_file(s);
3141                                                 if (r < 0 || !cgroup_good(s))
3142                                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3143                                                 break;
3144                                         }
3145                                 } else
3146                                         service_search_main_pid(s);
3147
3148                                 service_enter_start_post(s);
3149                                 break;
3150
3151                         case SERVICE_START_POST:
3152                                 if (f != SERVICE_SUCCESS) {
3153                                         service_enter_stop(s, f);
3154                                         break;
3155                                 }
3156
3157                                 if (s->pid_file) {
3158                                         int r;
3159
3160                                         r = service_load_pid_file(s, true);
3161                                         if (r < 0) {
3162                                                 r = service_demand_pid_file(s);
3163                                                 if (r < 0 || !cgroup_good(s))
3164                                                         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
3165                                                 break;
3166                                         }
3167                                 } else
3168                                         service_search_main_pid(s);
3169
3170                                 service_enter_running(s, SERVICE_SUCCESS);
3171                                 break;
3172
3173                         case SERVICE_RELOAD:
3174                                 if (f == SERVICE_SUCCESS) {
3175                                         service_load_pid_file(s, true);
3176                                         service_search_main_pid(s);
3177                                 }
3178
3179                                 s->reload_result = f;
3180                                 service_enter_running(s, SERVICE_SUCCESS);
3181                                 break;
3182
3183                         case SERVICE_STOP:
3184                                 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3185                                 break;
3186
3187                         case SERVICE_STOP_SIGTERM:
3188                         case SERVICE_STOP_SIGKILL:
3189                                 if (main_pid_good(s) <= 0)
3190                                         service_enter_stop_post(s, f);
3191
3192                                 /* If there is still a service
3193                                  * process around, wait until
3194                                  * that one quit, too */
3195                                 break;
3196
3197                         case SERVICE_STOP_POST:
3198                         case SERVICE_FINAL_SIGTERM:
3199                         case SERVICE_FINAL_SIGKILL:
3200                                 if (main_pid_good(s) <= 0)
3201                                         service_enter_dead(s, f, true);
3202                                 break;
3203
3204                         default:
3205                                 assert_not_reached("Uh, control process died at wrong time.");
3206                         }
3207                 }
3208         }
3209
3210         /* Notify clients about changed exit status */
3211         unit_add_to_dbus_queue(u);
3212
3213         /* We got one SIGCHLD for the service, let's watch all
3214          * processes that are now running of the service, and watch
3215          * that. Among the PIDs we then watch will be children
3216          * reassigned to us, which hopefully allows us to identify
3217          * when all children are gone */
3218         unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
3219         unit_watch_all_pids(u);
3220
3221         /* If the PID set is empty now, then let's finish this off */
3222         if (set_isempty(u->pids))
3223                 service_notify_cgroup_empty_event(u);
3224 }
3225
3226 static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3227         Service *s = SERVICE(userdata);
3228
3229         assert(s);
3230         assert(source == s->timer_event_source);
3231
3232         switch (s->state) {
3233
3234         case SERVICE_START_PRE:
3235         case SERVICE_START:
3236                 log_warning_unit(UNIT(s)->id,
3237                                  "%s %s operation timed out. Terminating.",
3238                                  UNIT(s)->id,
3239                                  s->state == SERVICE_START ? "start" : "start-pre");
3240                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3241                 break;
3242
3243         case SERVICE_START_POST:
3244                 log_warning_unit(UNIT(s)->id,
3245                                  "%s start-post operation timed out. Stopping.", UNIT(s)->id);
3246                 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
3247                 break;
3248
3249         case SERVICE_RELOAD:
3250                 log_warning_unit(UNIT(s)->id,
3251                                  "%s reload operation timed out. Stopping.", UNIT(s)->id);
3252                 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3253                 service_enter_running(s, SERVICE_SUCCESS);
3254                 break;
3255
3256         case SERVICE_STOP:
3257                 log_warning_unit(UNIT(s)->id,
3258                                  "%s stopping timed out. Terminating.", UNIT(s)->id);
3259                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3260                 break;
3261
3262         case SERVICE_STOP_SIGTERM:
3263                 if (s->kill_context.send_sigkill) {
3264                         log_warning_unit(UNIT(s)->id,
3265                                          "%s stop-sigterm timed out. Killing.", UNIT(s)->id);
3266                         service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3267                 } else {
3268                         log_warning_unit(UNIT(s)->id,
3269                                          "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s)->id);
3270                         service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3271                 }
3272
3273                 break;
3274
3275         case SERVICE_STOP_SIGKILL:
3276                 /* Uh, we sent a SIGKILL and it is still not gone?
3277                  * Must be something we cannot kill, so let's just be
3278                  * weirded out and continue */
3279
3280                 log_warning_unit(UNIT(s)->id,
3281                                  "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
3282                 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3283                 break;
3284
3285         case SERVICE_STOP_POST:
3286                 log_warning_unit(UNIT(s)->id,
3287                                  "%s stop-post timed out. Terminating.", UNIT(s)->id);
3288                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3289                 break;
3290
3291         case SERVICE_FINAL_SIGTERM:
3292                 if (s->kill_context.send_sigkill) {
3293                         log_warning_unit(UNIT(s)->id,
3294                                          "%s stop-final-sigterm timed out. Killing.", UNIT(s)->id);
3295                         service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3296                 } else {
3297                         log_warning_unit(UNIT(s)->id,
3298                                          "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.",
3299                                          UNIT(s)->id);
3300                         service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
3301                 }
3302
3303                 break;
3304
3305         case SERVICE_FINAL_SIGKILL:
3306                 log_warning_unit(UNIT(s)->id,
3307                                  "%s still around after final SIGKILL. Entering failed mode.", UNIT(s)->id);
3308                 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
3309                 break;
3310
3311         case SERVICE_AUTO_RESTART:
3312                 log_info_unit(UNIT(s)->id,
3313                               s->restart_usec > 0 ?
3314                               "%s holdoff time over, scheduling restart." :
3315                               "%s has no holdoff time, scheduling restart.",
3316                               UNIT(s)->id);
3317                 service_enter_restart(s);
3318                 break;
3319
3320         default:
3321                 assert_not_reached("Timeout at wrong time.");
3322         }
3323
3324         return 0;
3325 }
3326
3327 static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3328         Service *s = SERVICE(userdata);
3329
3330         assert(s);
3331         assert(source == s->watchdog_event_source);
3332
3333         log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
3334         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
3335
3336         return 0;
3337 }
3338
3339 static void service_notify_message(Unit *u, pid_t pid, char **tags) {
3340         Service *s = SERVICE(u);
3341         const char *e;
3342         bool notify_dbus = false;
3343
3344         assert(u);
3345
3346         log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT" (%s...)",
3347                        u->id, pid, tags && *tags ? tags[0] : "(empty)");
3348
3349         if (s->notify_access == NOTIFY_NONE) {
3350                 log_warning_unit(u->id,
3351                                  "%s: Got notification message from PID "PID_FMT", but reception is disabled.",
3352                                  u->id, pid);
3353                 return;
3354         }
3355
3356         if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
3357
3358                 if (s->main_pid != 0)
3359                         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);
3360                 else
3361                         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);
3362                 return;
3363         }
3364
3365         /* Interpret MAINPID= */
3366         if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3367             (s->state == SERVICE_START ||
3368              s->state == SERVICE_START_POST ||
3369              s->state == SERVICE_RUNNING ||
3370              s->state == SERVICE_RELOAD)) {
3371
3372                 if (parse_pid(e + 8, &pid) < 0)
3373                         log_warning_unit(u->id, "Failed to parse notification message %s", e);
3374                 else {
3375                         log_debug_unit(u->id, "%s: got %s", u->id, e);
3376                         service_set_main_pid(s, pid);
3377                         unit_watch_pid(UNIT(s), pid);
3378                         notify_dbus = true;
3379                 }
3380         }
3381
3382         /* Interpret READY= */
3383         if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START && strv_find(tags, "READY=1")) {
3384                 log_debug_unit(u->id, "%s: got READY=1", u->id);
3385                 service_enter_start_post(s);
3386                 notify_dbus = true;
3387         }
3388
3389         /* Interpret STATUS= */
3390         e = strv_find_prefix(tags, "STATUS=");
3391         if (e) {
3392                 char *t;
3393
3394                 if (e[7]) {
3395                         if (!utf8_is_valid(e+7)) {
3396                                 log_warning_unit(u->id, "Status message in notification is not UTF-8 clean.");
3397                                 return;
3398                         }
3399
3400                         log_debug_unit(u->id, "%s: got %s", u->id, e);
3401
3402                         t = strdup(e+7);
3403                         if (!t) {
3404                                 log_oom();
3405                                 return;
3406                         }
3407
3408                 } else
3409                         t = NULL;
3410
3411                 if (!streq_ptr(s->status_text, t)) {
3412                         free(s->status_text);
3413                         s->status_text = t;
3414                         notify_dbus = true;
3415                 } else
3416                         free(t);
3417         }
3418
3419         /* Interpret WATCHDOG= */
3420         if (strv_find(tags, "WATCHDOG=1")) {
3421                 log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
3422                 service_reset_watchdog(s);
3423         }
3424
3425         /* Notify clients about changed status or main pid */
3426         if (notify_dbus)
3427                 unit_add_to_dbus_queue(u);
3428 }
3429
3430 static int service_get_timeout(Unit *u, uint64_t *timeout) {
3431         Service *s = SERVICE(u);
3432         int r;
3433
3434         if (!s->timer_event_source)
3435                 return 0;
3436
3437         r = sd_event_source_get_time(s->timer_event_source, timeout);
3438         if (r < 0)
3439                 return r;
3440
3441         return 1;
3442 }
3443
3444 #ifdef HAVE_SYSV_COMPAT
3445
3446 static int service_enumerate(Manager *m) {
3447         char **p;
3448         unsigned i;
3449         _cleanup_closedir_ DIR *d = NULL;
3450         _cleanup_free_ char *path = NULL, *fpath = NULL, *name = NULL;
3451         Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
3452         _cleanup_set_free_ Set *shutdown_services = NULL;
3453         Unit *service;
3454         Iterator j;
3455         int r;
3456
3457         assert(m);
3458
3459         if (m->running_as != SYSTEMD_SYSTEM)
3460                 return 0;
3461
3462         STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
3463                 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
3464                         struct dirent *de;
3465
3466                         free(path);
3467                         path = strjoin(*p, "/", rcnd_table[i].path, NULL);
3468                         if (!path) {
3469                                 r = -ENOMEM;
3470                                 goto finish;
3471                         }
3472
3473                         if (d)
3474                                 closedir(d);
3475
3476                         d = opendir(path);
3477                         if (!d) {
3478                                 if (errno != ENOENT)
3479                                         log_warning("opendir(%s) failed: %m", path);
3480
3481                                 continue;
3482                         }
3483
3484                         while ((de = readdir(d))) {
3485                                 int a, b;
3486
3487                                 if (ignore_file(de->d_name))
3488                                         continue;
3489
3490                                 if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3491                                         continue;
3492
3493                                 if (strlen(de->d_name) < 4)
3494                                         continue;
3495
3496                                 a = undecchar(de->d_name[1]);
3497                                 b = undecchar(de->d_name[2]);
3498
3499                                 if (a < 0 || b < 0)
3500                                         continue;
3501
3502                                 free(fpath);
3503                                 fpath = strjoin(path, "/", de->d_name, NULL);
3504                                 if (!fpath) {
3505                                         r = -ENOMEM;
3506                                         goto finish;
3507                                 }
3508
3509                                 if (access(fpath, X_OK) < 0) {
3510
3511                                         if (errno != ENOENT)
3512                                                 log_warning("access() failed on %s: %m", fpath);
3513
3514                                         continue;
3515                                 }
3516
3517                                 free(name);
3518                                 name = sysv_translate_name(de->d_name + 3);
3519                                 if (!name) {
3520                                         r = log_oom();
3521                                         goto finish;
3522                                 }
3523
3524                                 r = manager_load_unit_prepare(m, name, NULL, NULL, &service);
3525                                 if (r < 0) {
3526                                         log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3527                                         continue;
3528                                 }
3529
3530                                 if (de->d_name[0] == 'S')  {
3531
3532                                         if (rcnd_table[i].type == RUNLEVEL_UP) {
3533                                                 SERVICE(service)->sysv_start_priority_from_rcnd =
3534                                                         MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
3535
3536                                                 SERVICE(service)->sysv_enabled = true;
3537                                         }
3538
3539                                         r = set_ensure_allocated(&runlevel_services[i],
3540                                                                  trivial_hash_func, trivial_compare_func);
3541                                         if (r < 0)
3542                                                 goto finish;
3543
3544                                         r = set_put(runlevel_services[i], service);
3545                                         if (r < 0)
3546                                                 goto finish;
3547
3548                                 } else if (de->d_name[0] == 'K' &&
3549                                            (rcnd_table[i].type == RUNLEVEL_DOWN)) {
3550
3551                                         r = set_ensure_allocated(&shutdown_services,
3552                                                                  trivial_hash_func, trivial_compare_func);
3553                                         if (r < 0)
3554                                                 goto finish;
3555
3556                                         r = set_put(shutdown_services, service);
3557                                         if (r < 0)
3558                                                 goto finish;
3559                                 }
3560                         }
3561                 }
3562
3563         /* Now we loaded all stubs and are aware of the lowest
3564         start-up priority for all services, not let's actually load
3565         the services, this will also tell us which services are
3566         actually native now */
3567         manager_dispatch_load_queue(m);
3568
3569         /* If this is a native service, rely on native ways to pull in
3570          * a service, don't pull it in via sysv rcN.d links. */
3571         for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
3572                 SET_FOREACH(service, runlevel_services[i], j) {
3573                         service = unit_follow_merge(service);
3574
3575   &nbs