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