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