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