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