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