chiark / gitweb /
ca71788d220a55b40349025b65298237a7bb57a7
[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_event_source, s->watchdog_timestamp.monotonic + s->watchdog_usec, 0, service_dispatch_watchdog, s);
268                 if (r < 0) {
269                         log_warning_unit(UNIT(s)->id, "%s failed to add watchdog timer: %s", UNIT(s)->id, strerror(-r));
270                         return;
271                 }
272
273                 /* Let's process everything else which might be a sign
274                  * of living before we consider a service died. */
275                 r = sd_event_source_set_priority(s->watchdog_event_source, SD_EVENT_PRIORITY_IDLE);
276         }
277
278         if (r < 0)
279                 log_warning_unit(UNIT(s)->id, "%s failed to install watchdog timer: %s", UNIT(s)->id, strerror(-r));
280 }
281
282 static void service_reset_watchdog(Service *s) {
283         assert(s);
284
285         dual_timestamp_get(&s->watchdog_timestamp);
286         service_start_watchdog(s);
287 }
288
289 static void service_done(Unit *u) {
290         Service *s = SERVICE(u);
291
292         assert(s);
293
294         free(s->pid_file);
295         s->pid_file = NULL;
296
297 #ifdef HAVE_SYSV_COMPAT
298         free(s->sysv_runlevels);
299         s->sysv_runlevels = NULL;
300 #endif
301
302         free(s->status_text);
303         s->status_text = NULL;
304
305         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, &s->timer_event_source, now(CLOCK_MONOTONIC) + usec, 0, service_dispatch_timer, s);
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 (!pid_is_alive(pid)) {
1372                 if (may_warn)
1373                         log_info_unit(UNIT(s)->id, "PID "PID_FMT" read from file %s does not exist or is a zombie.", pid, s->pid_file);
1374
1375                 return -ESRCH;
1376         }
1377
1378         if (s->main_pid_known) {
1379                 if (pid == s->main_pid)
1380                         return 0;
1381
1382                 log_debug_unit(UNIT(s)->id,
1383                                "Main PID changing: "PID_FMT" -> "PID_FMT,
1384                                s->main_pid, pid);
1385                 service_unwatch_main_pid(s);
1386                 s->main_pid_known = false;
1387         } else
1388                 log_debug_unit(UNIT(s)->id,
1389                                "Main PID loaded: "PID_FMT, pid);
1390
1391         r = service_set_main_pid(s, pid);
1392         if (r < 0)
1393                 return r;
1394
1395         r = unit_watch_pid(UNIT(s), pid);
1396         if (r < 0) {
1397                 /* FIXME: we need to do something here */
1398                 log_warning_unit(UNIT(s)->id,
1399                                  "Failed to watch PID "PID_FMT" from service %s",
1400                                  pid, UNIT(s)->id);
1401                 return r;
1402         }
1403
1404         return 0;
1405 }
1406
1407 static int service_search_main_pid(Service *s) {
1408         pid_t pid;
1409         int r;
1410
1411         assert(s);
1412
1413         /* If we know it anyway, don't ever fallback to unreliable
1414          * heuristics */
1415         if (s->main_pid_known)
1416                 return 0;
1417
1418         if (!s->guess_main_pid)
1419                 return 0;
1420
1421         assert(s->main_pid <= 0);
1422
1423         pid = unit_search_main_pid(UNIT(s));
1424         if (pid <= 0)
1425                 return -ENOENT;
1426
1427         log_debug_unit(UNIT(s)->id,
1428                        "Main PID guessed: "PID_FMT, pid);
1429         r = service_set_main_pid(s, pid);
1430         if (r < 0)
1431                 return r;
1432
1433         r = unit_watch_pid(UNIT(s), pid);
1434         if (r < 0)
1435                 /* FIXME: we need to do something here */
1436                 log_warning_unit(UNIT(s)->id,
1437                                  "Failed to watch PID "PID_FMT" from service %s",
1438                                  pid, UNIT(s)->id);
1439                 return r;
1440
1441         return 0;
1442 }
1443
1444 static void service_set_state(Service *s, ServiceState state) {
1445         ServiceState old_state;
1446         const UnitActiveState *table;
1447
1448         assert(s);
1449
1450         table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1451
1452         old_state = s->state;
1453         s->state = state;
1454
1455         service_unwatch_pid_file(s);
1456
1457         if (!IN_SET(state,
1458                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1459                     SERVICE_RELOAD,
1460                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1461                     SERVICE_STOP_POST,
1462                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
1463                     SERVICE_AUTO_RESTART))
1464                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1465
1466         if (!IN_SET(state,
1467                     SERVICE_START, SERVICE_START_POST,
1468                     SERVICE_RUNNING, SERVICE_RELOAD,
1469                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1470                     SERVICE_STOP_POST,
1471                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1472                 service_unwatch_main_pid(s);
1473                 s->main_command = NULL;
1474         }
1475
1476         if (!IN_SET(state,
1477                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1478                     SERVICE_RELOAD,
1479                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1480                     SERVICE_STOP_POST,
1481                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1482                 service_unwatch_control_pid(s);
1483                 s->control_command = NULL;
1484                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1485         }
1486
1487         if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1488                 unit_unwatch_all_pids(UNIT(s));
1489
1490         if (!IN_SET(state,
1491                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1492                     SERVICE_RUNNING, SERVICE_RELOAD,
1493                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1494                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
1495             !(state == SERVICE_DEAD && UNIT(s)->job)) {
1496                 service_close_socket_fd(s);
1497                 service_connection_unref(s);
1498         }
1499
1500         if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1501                 service_stop_watchdog(s);
1502
1503         /* For the inactive states unit_notify() will trim the cgroup,
1504          * but for exit we have to do that ourselves... */
1505         if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
1506                 unit_destroy_cgroup(UNIT(s));
1507
1508         /* For remain_after_exit services, let's see if we can "release" the
1509          * hold on the console, since unit_notify() only does that in case of
1510          * change of state */
1511         if (state == SERVICE_EXITED && s->remain_after_exit &&
1512             UNIT(s)->manager->n_on_console > 0) {
1513                 ExecContext *ec = unit_get_exec_context(UNIT(s));
1514                 if (ec && exec_context_may_touch_console(ec)) {
1515                         Manager *m = UNIT(s)->manager;
1516
1517                         m->n_on_console --;
1518                         if (m->n_on_console == 0)
1519                                 /* unset no_console_output flag, since the console is free */
1520                                 m->no_console_output = false;
1521                 }
1522         }
1523
1524         if (old_state != state)
1525                 log_debug_unit(UNIT(s)->id, "%s changed %s -> %s", UNIT(s)->id, service_state_to_string(old_state), service_state_to_string(state));
1526
1527         unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
1528         s->reload_result = SERVICE_SUCCESS;
1529 }
1530
1531 static int service_coldplug(Unit *u) {
1532         Service *s = SERVICE(u);
1533         int r;
1534
1535         assert(s);
1536         assert(s->state == SERVICE_DEAD);
1537
1538         if (s->deserialized_state != s->state) {
1539
1540                 if (IN_SET(s->deserialized_state,
1541                            SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1542                            SERVICE_RELOAD,
1543                            SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1544                            SERVICE_STOP_POST,
1545                            SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1546
1547                         usec_t k;
1548
1549                         k = IN_SET(s->deserialized_state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec;
1550
1551                         /* For the start/stop timeouts 0 means off */
1552                         if (k > 0) {
1553                                 r = service_arm_timer(s, k);
1554                                 if (r < 0)
1555                                         return r;
1556                         }
1557                 }
1558
1559                 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
1560
1561                         /* The restart timeouts 0 means immediately */
1562                         r = service_arm_timer(s, s->restart_usec);
1563                         if (r < 0)
1564                                 return r;
1565                 }
1566
1567                 if (pid_is_unwaited(s->main_pid) &&
1568                     ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
1569                      IN_SET(s->deserialized_state,
1570                             SERVICE_START, SERVICE_START_POST,
1571                             SERVICE_RUNNING, SERVICE_RELOAD,
1572                             SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1573                             SERVICE_STOP_POST,
1574                             SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
1575                         r = unit_watch_pid(UNIT(s), s->main_pid);
1576                         if (r < 0)
1577                                 return r;
1578                 }
1579
1580                 if (pid_is_unwaited(s->control_pid) &&
1581                     IN_SET(s->deserialized_state,
1582                            SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1583                            SERVICE_RELOAD,
1584                            SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1585                            SERVICE_STOP_POST,
1586                            SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1587                         r = unit_watch_pid(UNIT(s), s->control_pid);
1588                         if (r < 0)
1589                                 return r;
1590                 }
1591
1592                 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1593                         unit_watch_all_pids(UNIT(s));
1594
1595                 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1596                         service_start_watchdog(s);
1597
1598                 service_set_state(s, s->deserialized_state);
1599         }
1600
1601         return 0;
1602 }
1603
1604 static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1605         Iterator i;
1606         int r;
1607         int *rfds = NULL;
1608         unsigned rn_fds = 0;
1609         Unit *u;
1610
1611         assert(s);
1612         assert(fds);
1613         assert(n_fds);
1614
1615         if (s->socket_fd >= 0)
1616                 return 0;
1617
1618         SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
1619                 int *cfds;
1620                 unsigned cn_fds;
1621                 Socket *sock;
1622
1623                 if (u->type != UNIT_SOCKET)
1624                         continue;
1625
1626                 sock = SOCKET(u);
1627
1628                 r = socket_collect_fds(sock, &cfds, &cn_fds);
1629                 if (r < 0)
1630                         goto fail;
1631
1632                 if (!cfds)
1633                         continue;
1634
1635                 if (!rfds) {
1636                         rfds = cfds;
1637                         rn_fds = cn_fds;
1638                 } else {
1639                         int *t;
1640
1641                         t = new(int, rn_fds+cn_fds);
1642                         if (!t) {
1643                                 free(cfds);
1644                                 r = -ENOMEM;
1645                                 goto fail;
1646                         }
1647
1648                         memcpy(t, rfds, rn_fds * sizeof(int));
1649                         memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
1650                         free(rfds);
1651                         free(cfds);
1652
1653                         rfds = t;
1654                         rn_fds = rn_fds+cn_fds;
1655                 }
1656         }
1657
1658         *fds = rfds;
1659         *n_fds = rn_fds;
1660
1661         return 0;
1662
1663 fail:
1664         free(rfds);
1665
1666         return r;
1667 }
1668
1669 static int service_spawn(
1670                 Service *s,
1671                 ExecCommand *c,
1672                 bool timeout,
1673                 bool pass_fds,
1674                 bool apply_permissions,
1675                 bool apply_chroot,
1676                 bool apply_tty_stdin,
1677                 bool set_notify_socket,
1678                 bool is_control,
1679                 pid_t *_pid) {
1680
1681         pid_t pid;
1682         int r;
1683         int *fds = NULL;
1684         _cleanup_free_ int *fdsbuf = NULL;
1685         unsigned n_fds = 0, n_env = 0;
1686         _cleanup_strv_free_ char
1687                 **argv = NULL, **final_env = NULL, **our_env = NULL;
1688         const char *path;
1689
1690         assert(s);
1691         assert(c);
1692         assert(_pid);
1693
1694         unit_realize_cgroup(UNIT(s));
1695
1696         r = unit_setup_exec_runtime(UNIT(s));
1697         if (r < 0)
1698                 goto fail;
1699
1700         if (pass_fds ||
1701             s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1702             s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1703             s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1704
1705                 if (s->socket_fd >= 0) {
1706                         fds = &s->socket_fd;
1707                         n_fds = 1;
1708                 } else {
1709                         r = service_collect_fds(s, &fdsbuf, &n_fds);
1710                         if (r < 0)
1711                                 goto fail;
1712
1713                         fds = fdsbuf;
1714                 }
1715         }
1716
1717         if (timeout && s->timeout_start_usec > 0) {
1718                 r = service_arm_timer(s, s->timeout_start_usec);
1719                 if (r < 0)
1720                         goto fail;
1721         } else
1722                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1723
1724         r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
1725         if (r < 0)
1726                 goto fail;
1727
1728         our_env = new0(char*, 4);
1729         if (!our_env) {
1730                 r = -ENOMEM;
1731                 goto fail;
1732         }
1733
1734         if (set_notify_socket)
1735                 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
1736                         r = -ENOMEM;
1737                         goto fail;
1738                 }
1739
1740         if (s->main_pid > 0)
1741                 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
1742                         r = -ENOMEM;
1743                         goto fail;
1744                 }
1745
1746         if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
1747                 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
1748                         r = -ENOMEM;
1749                         goto fail;
1750                 }
1751
1752         final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
1753         if (!final_env) {
1754                 r = -ENOMEM;
1755                 goto fail;
1756         }
1757
1758         if (is_control && UNIT(s)->cgroup_path) {
1759                 path = strappenda(UNIT(s)->cgroup_path, "/control");
1760                 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
1761         } else
1762                 path = UNIT(s)->cgroup_path;
1763
1764         r = exec_spawn(c,
1765                        argv,
1766                        &s->exec_context,
1767                        fds, n_fds,
1768                        final_env,
1769                        apply_permissions,
1770                        apply_chroot,
1771                        apply_tty_stdin,
1772                        UNIT(s)->manager->confirm_spawn,
1773                        UNIT(s)->manager->cgroup_supported,
1774                        path,
1775                        UNIT(s)->id,
1776                        s->watchdog_usec,
1777                        s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
1778                        s->exec_runtime,
1779                        &pid);
1780         if (r < 0)
1781                 goto fail;
1782
1783         r = unit_watch_pid(UNIT(s), pid);
1784         if (r < 0)
1785                 /* FIXME: we need to do something here */
1786                 goto fail;
1787
1788         *_pid = pid;
1789
1790         return 0;
1791
1792 fail:
1793         if (timeout)
1794                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1795
1796         return r;
1797 }
1798
1799 static int main_pid_good(Service *s) {
1800         assert(s);
1801
1802         /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1803          * don't know */
1804
1805         /* If we know the pid file, then lets just check if it is
1806          * still valid */
1807         if (s->main_pid_known) {
1808
1809                 /* If it's an alien child let's check if it is still
1810                  * alive ... */
1811                 if (s->main_pid_alien && s->main_pid > 0)
1812                         return pid_is_alive(s->main_pid);
1813
1814                 /* .. otherwise assume we'll get a SIGCHLD for it,
1815                  * which we really should wait for to collect exit
1816                  * status and code */
1817                 return s->main_pid > 0;
1818         }
1819
1820         /* We don't know the pid */
1821         return -EAGAIN;
1822 }
1823
1824 _pure_ static int control_pid_good(Service *s) {
1825         assert(s);
1826
1827         return s->control_pid > 0;
1828 }
1829
1830 static int cgroup_good(Service *s) {
1831         int r;
1832
1833         assert(s);
1834
1835         if (!UNIT(s)->cgroup_path)
1836                 return 0;
1837
1838         r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
1839         if (r < 0)
1840                 return r;
1841
1842         return !r;
1843 }
1844
1845 static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
1846         int r;
1847         assert(s);
1848
1849         if (f != SERVICE_SUCCESS)
1850                 s->result = f;
1851
1852         service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1853
1854         if (allow_restart &&
1855             !s->forbid_restart &&
1856             (s->restart == SERVICE_RESTART_ALWAYS ||
1857              (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1858              (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
1859              (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
1860              (s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
1861                                                          s->result == SERVICE_FAILURE_CORE_DUMP))) &&
1862             (s->result != SERVICE_FAILURE_EXIT_CODE ||
1863              !set_contains(s->restart_ignore_status.code, INT_TO_PTR(s->main_exec_status.status))) &&
1864             (s->result != SERVICE_FAILURE_SIGNAL ||
1865              !set_contains(s->restart_ignore_status.signal, INT_TO_PTR(s->main_exec_status.status)))) {
1866
1867                 r = service_arm_timer(s, s->restart_usec);
1868                 if (r < 0)
1869                         goto fail;
1870
1871                 service_set_state(s, SERVICE_AUTO_RESTART);
1872         }
1873
1874         s->forbid_restart = false;
1875
1876         /* we want fresh tmpdirs in case service is started again immediately */
1877         exec_runtime_destroy(s->exec_runtime);
1878         s->exec_runtime = exec_runtime_unref(s->exec_runtime);
1879
1880         /* Try to delete the pid file. At this point it will be
1881          * out-of-date, and some software might be confused by it, so
1882          * let's remove it. */
1883         if (s->pid_file)
1884                 unlink_noerrno(s->pid_file);
1885
1886         return;
1887
1888 fail:
1889         log_warning_unit(UNIT(s)->id,
1890                          "%s failed to run install restart timer: %s",
1891                          UNIT(s)->id, strerror(-r));
1892         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
1893 }
1894
1895 static void service_enter_stop_post(Service *s, ServiceResult f) {
1896         int r;
1897         assert(s);
1898
1899         if (f != SERVICE_SUCCESS)
1900                 s->result = f;
1901
1902         service_unwatch_control_pid(s);
1903         unit_watch_all_pids(UNIT(s));
1904
1905         s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1906         if (s->control_command) {
1907                 s->control_command_id = SERVICE_EXEC_STOP_POST;
1908
1909                 r = service_spawn(s,
1910                                   s->control_command,
1911                                   true,
1912                                   false,
1913                                   !s->permissions_start_only,
1914                                   !s->root_directory_start_only,
1915                                   true,
1916                                   false,
1917                                   true,
1918                                   &s->control_pid);
1919                 if (r < 0)
1920                         goto fail;
1921
1922                 service_set_state(s, SERVICE_STOP_POST);
1923         } else
1924                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
1925
1926         return;
1927
1928 fail:
1929         log_warning_unit(UNIT(s)->id,
1930                          "%s failed to run 'stop-post' task: %s",
1931                          UNIT(s)->id, strerror(-r));
1932         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
1933 }
1934
1935 static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
1936         int r;
1937
1938         assert(s);
1939
1940         if (f != SERVICE_SUCCESS)
1941                 s->result = f;
1942
1943         unit_watch_all_pids(UNIT(s));
1944
1945         r = unit_kill_context(
1946                         UNIT(s),
1947                         &s->kill_context,
1948                         state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1949                         s->main_pid,
1950                         s->control_pid,
1951                         s->main_pid_alien);
1952
1953         if (r < 0)
1954                 goto fail;
1955
1956         if (r > 0) {
1957                 if (s->timeout_stop_usec > 0) {
1958                         r = service_arm_timer(s, s->timeout_stop_usec);
1959                         if (r < 0)
1960                                 goto fail;
1961                 }
1962
1963                 service_set_state(s, state);
1964         } else if (state == SERVICE_STOP_SIGTERM)
1965                 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1966         else if (state == SERVICE_STOP_SIGKILL)
1967                 service_enter_stop_post(s, SERVICE_SUCCESS);
1968         else if (state == SERVICE_FINAL_SIGTERM)
1969                 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
1970         else
1971                 service_enter_dead(s, SERVICE_SUCCESS, true);
1972
1973         return;
1974
1975 fail:
1976         log_warning_unit(UNIT(s)->id,
1977                          "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
1978
1979         if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
1980                 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
1981         else
1982                 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
1983 }
1984
1985 static void service_enter_stop(Service *s, ServiceResult f) {
1986         int r;
1987
1988         assert(s);
1989
1990         if (f != SERVICE_SUCCESS)
1991                 s->result = f;
1992
1993         service_unwatch_control_pid(s);
1994         unit_watch_all_pids(UNIT(s));
1995
1996         s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1997         if (s->control_command) {
1998                 s->control_command_id = SERVICE_EXEC_STOP;
1999
2000                 r = service_spawn(s,
2001                                   s->control_command,
2002                                   true,
2003                                   false,
2004                                   !s->permissions_start_only,
2005                                   !s->root_directory_start_only,
2006                                   false,
2007                                   false,
2008                                   true,
2009                                   &s->control_pid);
2010                 if (r < 0)
2011                         goto fail;
2012
2013                 service_set_state(s, SERVICE_STOP);
2014         } else
2015                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2016
2017         return;
2018
2019 fail:
2020         log_warning_unit(UNIT(s)->id,
2021                          "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
2022         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2023 }
2024
2025 static void service_enter_running(Service *s, ServiceResult f) {
2026         int main_pid_ok, cgroup_ok;
2027         assert(s);
2028
2029         if (f != SERVICE_SUCCESS)
2030                 s->result = f;
2031
2032         main_pid_ok = main_pid_good(s);
2033         cgroup_ok = cgroup_good(s);
2034
2035         if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
2036             (s->bus_name_good || s->type != SERVICE_DBUS))
2037                 service_set_state(s, SERVICE_RUNNING);
2038         else if (s->remain_after_exit)
2039                 service_set_state(s, SERVICE_EXITED);
2040         else
2041                 service_enter_stop(s, SERVICE_SUCCESS);
2042 }
2043
2044 static void service_enter_start_post(Service *s) {
2045         int r;
2046         assert(s);
2047
2048         service_unwatch_control_pid(s);
2049         service_reset_watchdog(s);
2050
2051         s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
2052         if (s->control_command) {
2053                 s->control_command_id = SERVICE_EXEC_START_POST;
2054
2055                 r = service_spawn(s,
2056                                   s->control_command,
2057                                   true,
2058                                   false,
2059                                   !s->permissions_start_only,
2060                                   !s->root_directory_start_only,
2061                                   false,
2062                                   false,
2063                                   true,
2064                                   &s->control_pid);
2065                 if (r < 0)
2066                         goto fail;
2067
2068                 service_set_state(s, SERVICE_START_POST);
2069         } else
2070                 service_enter_running(s, SERVICE_SUCCESS);
2071
2072         return;
2073
2074 fail:
2075         log_warning_unit(UNIT(s)->id,
2076                          "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
2077         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2078 }
2079
2080 static void service_kill_control_processes(Service *s) {
2081         char *p;
2082
2083         if (!UNIT(s)->cgroup_path)
2084                 return;
2085
2086         p = strappenda(UNIT(s)->cgroup_path, "/control");
2087         cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
2088 }
2089
2090 static void service_enter_start(Service *s) {
2091         ExecCommand *c;
2092         pid_t pid;
2093         int r;
2094
2095         assert(s);
2096
2097         assert(s->exec_command[SERVICE_EXEC_START]);
2098         assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
2099
2100         service_unwatch_control_pid(s);
2101         service_unwatch_main_pid(s);
2102
2103         /* We want to ensure that nobody leaks processes from
2104          * START_PRE here, so let's go on a killing spree, People
2105          * should not spawn long running processes from START_PRE. */
2106         service_kill_control_processes(s);
2107
2108         if (s->type == SERVICE_FORKING) {
2109                 s->control_command_id = SERVICE_EXEC_START;
2110                 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2111
2112                 s->main_command = NULL;
2113         } else {
2114                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2115                 s->control_command = NULL;
2116
2117                 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2118         }
2119
2120         r = service_spawn(s,
2121                           c,
2122                           s->type == SERVICE_FORKING || s->type == SERVICE_DBUS ||
2123                             s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
2124                           true,
2125                           true,
2126                           true,
2127                           true,
2128                           s->notify_access != NOTIFY_NONE,
2129                           false,
2130                           &pid);
2131         if (r < 0)
2132                 goto fail;
2133
2134         if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
2135                 /* For simple services we immediately start
2136                  * the START_POST binaries. */
2137
2138                 service_set_main_pid(s, pid);
2139                 service_enter_start_post(s);
2140
2141         } else  if (s->type == SERVICE_FORKING) {
2142
2143                 /* For forking services we wait until the start
2144                  * process exited. */
2145
2146                 s->control_pid = pid;
2147                 service_set_state(s, SERVICE_START);
2148
2149         } else if (s->type == SERVICE_ONESHOT ||
2150                    s->type == SERVICE_DBUS ||
2151                    s->type == SERVICE_NOTIFY) {
2152
2153                 /* For oneshot services we wait until the start
2154                  * process exited, too, but it is our main process. */
2155
2156                 /* For D-Bus services we know the main pid right away,
2157                  * but wait for the bus name to appear on the
2158                  * bus. Notify services are similar. */
2159
2160                 service_set_main_pid(s, pid);
2161                 service_set_state(s, SERVICE_START);
2162         } else
2163                 assert_not_reached("Unknown service type");
2164
2165         return;
2166
2167 fail:
2168         log_warning_unit(UNIT(s)->id,
2169                          "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
2170         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2171 }
2172
2173 static void service_enter_start_pre(Service *s) {
2174         int r;
2175
2176         assert(s);
2177
2178         service_unwatch_control_pid(s);
2179
2180         s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2181         if (s->control_command) {
2182                 /* Before we start anything, let's clear up what might
2183                  * be left from previous runs. */
2184                 service_kill_control_processes(s);
2185
2186                 s->control_command_id = SERVICE_EXEC_START_PRE;
2187
2188                 r = service_spawn(s,
2189                                   s->control_command,
2190                                   true,
2191                                   false,
2192                                   !s->permissions_start_only,
2193                                   !s->root_directory_start_only,
2194                                   true,
2195                                   false,
2196                                   true,
2197                                   &s->control_pid);
2198                 if (r < 0)
2199                         goto fail;
2200
2201                 service_set_state(s, SERVICE_START_PRE);
2202         } else
2203                 service_enter_start(s);
2204
2205         return;
2206
2207 fail:
2208         log_warning_unit(UNIT(s)->id,
2209                          "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
2210         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2211 }
2212
2213 static void service_enter_restart(Service *s) {
2214         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
2215         int r;
2216
2217         assert(s);
2218
2219         if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2220                 /* Don't restart things if we are going down anyway */
2221                 log_info_unit(UNIT(s)->id,
2222                               "Stop job pending for unit, delaying automatic restart.");
2223
2224                 r = service_arm_timer(s, s->restart_usec);
2225                 if (r < 0)
2226                         goto fail;
2227
2228                 return;
2229         }
2230
2231         /* Any units that are bound to this service must also be
2232          * restarted. We use JOB_RESTART (instead of the more obvious
2233          * JOB_START) here so that those dependency jobs will be added
2234          * as well. */
2235         r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
2236         if (r < 0)
2237                 goto fail;
2238
2239         /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2240          * it will be canceled as part of the service_stop() call that
2241          * is executed as part of JOB_RESTART. */
2242
2243         log_debug_unit(UNIT(s)->id,
2244                        "%s scheduled restart job.", UNIT(s)->id);
2245         return;
2246
2247 fail:
2248         log_warning_unit(UNIT(s)->id,
2249                          "%s failed to schedule restart job: %s",
2250                          UNIT(s)->id, bus_error_message(&error, -r));
2251         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
2252 }
2253
2254 static void service_enter_reload(Service *s) {
2255         int r;
2256
2257         assert(s);
2258
2259         service_unwatch_control_pid(s);
2260
2261         s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2262         if (s->control_command) {
2263                 s->control_command_id = SERVICE_EXEC_RELOAD;
2264
2265                 r = service_spawn(s,
2266                                   s->control_command,
2267                                   true,
2268                                   false,
2269                                   !s->permissions_start_only,
2270                                   !s->root_directory_start_only,
2271                                   false,
2272                                   false,
2273                                   true,
2274                                   &s->control_pid);
2275                 if (r < 0)
2276                         goto fail;
2277
2278                 service_set_state(s, SERVICE_RELOAD);
2279         } else
2280                 service_enter_running(s, SERVICE_SUCCESS);
2281
2282         return;
2283
2284 fail:
2285         log_warning_unit(UNIT(s)->id,
2286                          "%s failed to run 'reload' task: %s",
2287                          UNIT(s)->id, strerror(-r));
2288         s->reload_result = SERVICE_FAILURE_RESOURCES;
2289         service_enter_running(s, SERVICE_SUCCESS);
2290 }
2291
2292 static void service_run_next_control(Service *s) {
2293         int r;
2294
2295         assert(s);
2296         assert(s->control_command);
2297         assert(s->control_command->command_next);
2298
2299         assert(s->control_command_id != SERVICE_EXEC_START);
2300
2301         s->control_command = s->control_command->command_next;
2302         service_unwatch_control_pid(s);
2303
2304         r = service_spawn(s,
2305                           s->control_command,
2306                           true,
2307                           false,
2308                           !s->permissions_start_only,
2309                           !s->root_directory_start_only,
2310                           s->control_command_id == SERVICE_EXEC_START_PRE ||
2311                           s->control_command_id == SERVICE_EXEC_STOP_POST,
2312                           false,
2313                           true,
2314                           &s->control_pid);
2315         if (r < 0)
2316                 goto fail;
2317
2318         return;
2319
2320 fail:
2321         log_warning_unit(UNIT(s)->id,
2322                          "%s failed to run next control task: %s",
2323                          UNIT(s)->id, strerror(-r));
2324
2325         if (s->state == SERVICE_START_PRE)
2326                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2327         else if (s->state == SERVICE_STOP)
2328                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2329         else if (s->state == SERVICE_STOP_POST)
2330                 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2331         else if (s->state == SERVICE_RELOAD) {
2332                 s->reload_result = SERVICE_FAILURE_RESOURCES;
2333                 service_enter_running(s, SERVICE_SUCCESS);
2334         } else
2335                 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2336 }
2337
2338 static void service_run_next_main(Service *s) {
2339         pid_t pid;
2340         int r;
2341
2342         assert(s);
2343         assert(s->main_command);
2344         assert(s->main_command->command_next);
2345         assert(s->type == SERVICE_ONESHOT);
2346
2347         s->main_command = s->main_command->command_next;
2348         service_unwatch_main_pid(s);
2349
2350         r = service_spawn(s,
2351                           s->main_command,
2352                           true,
2353                           true,
2354                           true,
2355                           true,
2356                           true,
2357                           s->notify_access != NOTIFY_NONE,
2358                           false,
2359                           &pid);
2360         if (r < 0)
2361                 goto fail;
2362
2363         service_set_main_pid(s, pid);
2364
2365         return;
2366
2367 fail:
2368         log_warning_unit(UNIT(s)->id,
2369                          "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
2370         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2371 }
2372
2373 static int service_start_limit_test(Service *s) {
2374         assert(s);
2375
2376         if (ratelimit_test(&s->start_limit))
2377                 return 0;
2378
2379         switch (s->start_limit_action) {
2380
2381         case SERVICE_START_LIMIT_NONE:
2382                 log_warning_unit(UNIT(s)->id,
2383                                  "%s start request repeated too quickly, refusing to start.",
2384                                  UNIT(s)->id);
2385                 break;
2386
2387         case SERVICE_START_LIMIT_REBOOT: {
2388                 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
2389                 int r;
2390
2391                 log_warning_unit(UNIT(s)->id,
2392                                  "%s start request repeated too quickly, rebooting.", UNIT(s)->id);
2393
2394                 r = manager_add_job_by_name(UNIT(s)->manager, JOB_START,
2395                                             SPECIAL_REBOOT_TARGET, JOB_REPLACE,
2396                                             true, &error, NULL);
2397                 if (r < 0)
2398                         log_error_unit(UNIT(s)->id,
2399                                        "Failed to reboot: %s.", bus_error_message(&error, r));
2400
2401                 break;
2402         }
2403
2404         case SERVICE_START_LIMIT_REBOOT_FORCE:
2405                 log_warning_unit(UNIT(s)->id,
2406                                  "%s start request repeated too quickly, forcibly rebooting.", UNIT(s)->id);
2407                 UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2408                 break;
2409
2410         case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
2411                 log_warning_unit(UNIT(s)->id,
2412                                  "%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
2413                 sync();
2414                 reboot(RB_AUTOBOOT);
2415                 break;
2416
2417         default:
2418                 log_error_unit(UNIT(s)->id,
2419                                "start limit action=%i", s->start_limit_action);
2420                 assert_not_reached("Unknown StartLimitAction.");
2421         }
2422
2423         return -ECANCELED;
2424 }
2425
2426 static int service_start(Unit *u) {
2427         Service *s = SERVICE(u);
2428         int r;
2429
2430         assert(s);
2431
2432         /* We cannot fulfill this request right now, try again later
2433          * please! */
2434         if (s->state == SERVICE_STOP ||
2435             s->state == SERVICE_STOP_SIGTERM ||
2436             s->state == SERVICE_STOP_SIGKILL ||
2437             s->state == SERVICE_STOP_POST ||
2438             s->state == SERVICE_FINAL_SIGTERM ||
2439             s->state == SERVICE_FINAL_SIGKILL)
2440                 return -EAGAIN;
2441
2442         /* Already on it! */
2443         if (s->state == SERVICE_START_PRE ||
2444             s->state == SERVICE_START ||
2445             s->state == SERVICE_START_POST)
2446                 return 0;
2447
2448         /* A service that will be restarted must be stopped first to
2449          * trigger BindsTo and/or OnFailure dependencies. If a user
2450          * does not want to wait for the holdoff time to elapse, the
2451          * service should be manually restarted, not started. We
2452          * simply return EAGAIN here, so that any start jobs stay
2453          * queued, and assume that the auto restart timer will
2454          * eventually trigger the restart. */
2455         if (s->state == SERVICE_AUTO_RESTART)
2456                 return -EAGAIN;
2457
2458         assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
2459
2460         /* Make sure we don't enter a busy loop of some kind. */
2461         r = service_start_limit_test(s);
2462         if (r < 0) {
2463                 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
2464                 return r;
2465         }
2466
2467         s->result = SERVICE_SUCCESS;
2468         s->reload_result = SERVICE_SUCCESS;
2469         s->main_pid_known = false;
2470         s->main_pid_alien = false;
2471         s->forbid_restart = false;
2472
2473         service_enter_start_pre(s);
2474         return 0;
2475 }
2476
2477 static int service_stop(Unit *u) {
2478         Service *s = SERVICE(u);
2479
2480         assert(s);
2481
2482         /* Don't create restart jobs from here. */
2483         s->forbid_restart = true;
2484
2485         /* Already on it */
2486         if (s->state == SERVICE_STOP ||
2487             s->state == SERVICE_STOP_SIGTERM ||
2488             s->state == SERVICE_STOP_SIGKILL ||
2489             s->state == SERVICE_STOP_POST ||
2490             s->state == SERVICE_FINAL_SIGTERM ||
2491             s->state == SERVICE_FINAL_SIGKILL)
2492                 return 0;
2493
2494         /* A restart will be scheduled or is in progress. */
2495         if (s->state == SERVICE_AUTO_RESTART) {
2496                 service_set_state(s, SERVICE_DEAD);
2497                 return 0;
2498         }
2499
2500         /* If there's already something running we go directly into
2501          * kill mode. */
2502         if (s->state == SERVICE_START_PRE ||
2503             s->state == SERVICE_START ||
2504             s->state == SERVICE_START_POST ||
2505             s->state == SERVICE_RELOAD) {
2506                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2507                 return 0;
2508         }
2509
2510         assert(s->state == SERVICE_RUNNING ||
2511                s->state == SERVICE_EXITED);
2512
2513         service_enter_stop(s, SERVICE_SUCCESS);
2514         return 0;
2515 }
2516
2517 static int service_reload(Unit *u) {
2518         Service *s = SERVICE(u);
2519
2520         assert(s);
2521
2522         assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
2523
2524         service_enter_reload(s);
2525         return 0;
2526 }
2527
2528 _pure_ static bool service_can_reload(Unit *u) {
2529         Service *s = SERVICE(u);
2530
2531         assert(s);
2532
2533         return !!s->exec_command[SERVICE_EXEC_RELOAD];
2534 }
2535
2536 static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2537         Service *s = SERVICE(u);
2538
2539         assert(u);
2540         assert(f);
2541         assert(fds);
2542
2543         unit_serialize_item(u, f, "state", service_state_to_string(s->state));
2544         unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2545         unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
2546
2547         if (s->control_pid > 0)
2548                 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
2549                                            s->control_pid);
2550
2551         if (s->main_pid_known && s->main_pid > 0)
2552                 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
2553
2554         unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2555
2556         if (s->status_text)
2557                 unit_serialize_item(u, f, "status-text", s->status_text);
2558
2559         /* FIXME: There's a minor uncleanliness here: if there are
2560          * multiple commands attached here, we will start from the
2561          * first one again */
2562         if (s->control_command_id >= 0)
2563                 unit_serialize_item(u, f, "control-command",
2564                                     service_exec_command_to_string(s->control_command_id));
2565
2566         if (s->socket_fd >= 0) {
2567                 int copy;
2568
2569                 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2570                         return copy;
2571
2572                 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2573         }
2574
2575         if (s->main_exec_status.pid > 0) {
2576                 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
2577                                            s->main_exec_status.pid);
2578                 dual_timestamp_serialize(f, "main-exec-status-start",
2579                                          &s->main_exec_status.start_timestamp);
2580                 dual_timestamp_serialize(f, "main-exec-status-exit",
2581                                          &s->main_exec_status.exit_timestamp);
2582
2583                 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
2584                         unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
2585                                                    s->main_exec_status.code);
2586                         unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
2587                                                    s->main_exec_status.status);
2588                 }
2589         }
2590         if (dual_timestamp_is_set(&s->watchdog_timestamp))
2591                 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
2592
2593         if (s->forbid_restart)
2594                 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
2595
2596         return 0;
2597 }
2598
2599 static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2600         Service *s = SERVICE(u);
2601
2602         assert(u);
2603         assert(key);
2604         assert(value);
2605         assert(fds);
2606
2607         if (streq(key, "state")) {
2608                 ServiceState state;
2609
2610                 state = service_state_from_string(value);
2611                 if (state < 0)
2612                         log_debug_unit(u->id, "Failed to parse state value %s", value);
2613                 else
2614                         s->deserialized_state = state;
2615         } else if (streq(key, "result")) {
2616                 ServiceResult f;
2617
2618                 f = service_result_from_string(value);
2619                 if (f < 0)
2620                         log_debug_unit(u->id, "Failed to parse result value %s", value);
2621                 else if (f != SERVICE_SUCCESS)
2622                         s->result = f;
2623
2624         } else if (streq(key, "reload-result")) {
2625                 ServiceResult f;
2626
2627                 f = service_result_from_string(value);
2628                 if (f < 0)
2629                         log_debug_unit(u->id, "Failed to parse reload result value %s", value);
2630                 else if (f != SERVICE_SUCCESS)
2631                         s->reload_result = f;
2632
2633         } else if (streq(key, "control-pid")) {
2634                 pid_t pid;
2635
2636                 if (parse_pid(value, &pid) < 0)
2637                         log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
2638                 else
2639                         s->control_pid = pid;
2640         } else if (streq(key, "main-pid")) {
2641                 pid_t pid;
2642
2643                 if (parse_pid(value, &pid) < 0)
2644                         log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
2645                 else {
2646                         service_set_main_pid(s, pid);
2647                         unit_watch_pid(UNIT(s), pid);
2648                 }
2649         } else if (streq(key, "main-pid-known")) {
2650                 int b;
2651
2652                 b = parse_boolean(value);
2653                 if (b < 0)
2654                         log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
2655                 else
2656                         s->main_pid_known = b;
2657         } else if (streq(key, "status-text")) {
2658                 char *t;
2659
2660                 t = strdup(value);
2661                 if (!t)
2662                         log_oom();
2663                 else {
2664                         free(s->status_text);
2665                         s->status_text = t;
2666                 }
2667
2668         } else if (streq(key, "control-command")) {
2669                 ServiceExecCommand id;
2670
2671                 id = service_exec_command_from_string(value);
2672                 if (id < 0)
2673                         log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
2674                 else {
2675                         s->control_command_id = id;
2676                         s->control_command = s->exec_command[id];
2677                 }
2678         } else if (streq(key, "socket-fd")) {
2679                 int fd;
2680
2681                 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2682                         log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
2683                 else {
2684
2685                         if (s->socket_fd >= 0)
2686                                 close_nointr_nofail(s->socket_fd);
2687                         s->socket_fd = fdset_remove(fds, fd);
2688                 }
2689         } else if (streq(key, "main-exec-status-pid")) {
2690                 pid_t pid;
2691
2692                 if (parse_pid(value, &pid) < 0)
2693                         log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
2694                 else
2695                         s->main_exec_status.pid = pid;
2696         } else if (streq(key, "main-exec-status-code")) {
2697                 int i;
2698
2699                 if (safe_atoi(value, &i) < 0)
2700                         log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
2701                 else
2702                         s->main_exec_status.code = i;
2703         } else if (streq(key, "main-exec-status-status")) {
2704                 int i;
2705
2706                 if (safe_atoi(value, &i) < 0)
2707                         log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
2708                 else
2709                         s->main_exec_status.status = i;
2710         } else if (streq(key, "main-exec-status-start"))
2711                 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2712         else if (streq(key, "main-exec-status-exit"))
2713                 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
2714         else if (streq(key, "watchdog-timestamp"))
2715                 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
2716         else if (streq(key, "forbid-restart")) {
2717                 int b;
2718
2719                 b = parse_boolean(value);
2720                 if (b < 0)
2721                         log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
2722                 else
2723                         s->forbid_restart = b;
2724         } else
2725                 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
2726
2727         return 0;
2728 }
2729
2730 _pure_ static UnitActiveState service_active_state(Unit *u) {
2731         const UnitActiveState *table;
2732
2733         assert(u);
2734
2735         table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2736
2737         return table[SERVICE(u)->state];
2738 }
2739
2740 static const char *service_sub_state_to_string(Unit *u) {
2741         assert(u);
2742
2743         return service_state_to_string(SERVICE(u)->state);
2744 }
2745
2746 static bool service_check_gc(Unit *u) {
2747         Service *s = SERVICE(u);
2748
2749         assert(s);
2750
2751         /* Never clean up services that still have a process around,
2752          * even if the service is formally dead. */
2753         if (cgroup_good(s) > 0 ||
2754             main_pid_good(s) > 0 ||
2755             control_pid_good(s) > 0)
2756                 return true;
2757
2758 #ifdef HAVE_SYSV_COMPAT
2759         if (s->is_sysv)
2760                 return true;
2761 #endif
2762
2763         return false;
2764 }
2765
2766 _pure_ static bool service_check_snapshot(Unit *u) {
2767         Service *s = SERVICE(u);
2768
2769         assert(s);
2770
2771         return (s->socket_fd < 0);
2772 }
2773
2774 static int service_retry_pid_file(Service *s) {
2775         int r;
2776
2777         assert(s->pid_file);
2778         assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2779
2780         r = service_load_pid_file(s, false);
2781         if (r < 0)
2782                 return r;
2783
2784         service_unwatch_pid_file(s);
2785
2786         service_enter_running(s, SERVICE_SUCCESS);
2787         return 0;
2788 }
2789
2790 static int service_watch_pid_file(Service *s) {
2791         int r;
2792
2793         log_debug_unit(UNIT(s)->id,
2794                        "Setting watch for %s's PID file %s",
2795                        UNIT(s)->id, s->pid_file_pathspec->path);
2796         r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
2797         if (r < 0)
2798                 goto fail;
2799
2800         /* the pidfile might have appeared just before we set the watch */
2801         log_debug_unit(UNIT(s)->id,
2802                        "Trying to read %s's PID file %s in case it changed",
2803                        UNIT(s)->id, s->pid_file_pathspec->path);
2804         service_retry_pid_file(s);
2805
2806         return 0;
2807 fail:
2808         log_error_unit(UNIT(s)->id,
2809                        "Failed to set a watch for %s's PID file %s: %s",
2810                        UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
2811         service_unwatch_pid_file(s);
2812         return r;
2813 }
2814
2815 static int service_demand_pid_file(Service *s) {
2816         PathSpec *ps;
2817
2818         assert(s->pid_file);
2819         assert(!s->pid_file_pathspec);
2820
2821         ps = new0(PathSpec, 1);
2822         if (!ps)
2823                 return -ENOMEM;
2824
2825         ps->unit = UNIT(s);
2826         ps->path = strdup(s->pid_file);
2827         if (!ps->path) {
2828                 free(ps);
2829                 return -ENOMEM;
2830         }
2831
2832         path_kill_slashes(ps->path);
2833
2834         /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2835          * keep their PID file open all the time. */
2836         ps->type = PATH_MODIFIED;
2837         ps->inotify_fd = -1;
2838
2839         s->pid_file_pathspec = ps;
2840
2841         return service_watch_pid_file(s);
2842 }
2843
2844 static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
2845         PathSpec *p = userdata;
2846         Service *s;
2847
2848         assert(p);
2849
2850         s = SERVICE(p->unit);
2851
2852         assert(s);
2853         assert(fd >= 0);
2854         assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2855         assert(s->pid_file_pathspec);
2856         assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
2857
2858         log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
2859
2860         if (path_spec_fd_event(p, events) < 0)
2861                 goto fail;
2862
2863         if (service_retry_pid_file(s) == 0)
2864                 return 0;
2865
2866         if (service_watch_pid_file(s) < 0)
2867                 goto fail;
2868
2869         return 0;
2870
2871 fail:
2872         service_unwatch_pid_file(s);
2873         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2874         return 0;
2875 }
2876
2877 static void service_notify_cgroup_empty_event(Unit *u) {
2878         Service *s = SERVICE(u);
2879
2880         assert(u);
2881
2882         log_debug_unit(u->id, "%s: cgroup is empty", u->id);
2883
2884         switch (s->state) {
2885
2886                 /* Waiting for SIGCHLD is usually more interesting,
2887                  * because it includes return codes/signals. Which is
2888                  * why we ignore the cgroup events for most cases,
2889                  * except when we don't know pid which to expect the
2890                  * SIGCHLD for. */
2891
2892         case SERVICE_START:
2893         case SERVICE_START_POST:
2894                 /* If we were hoping for the daemon to write its PID file,
2895                  * we can give up now. */
2896                 if (s->pid_file_pathspec) {
2897                         log_warning_unit(u->id,
2898                                          "%s never wrote its PID file. Failing.", UNIT(s)->id);
2899                         service_unwatch_pid_file(s);
2900                         if (s->state == SERVICE_START)
2901                                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2902                         else
2903                                 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2904                 }
2905                 break;
2906
2907         case SERVICE_RUNNING:
2908                 /* service_enter_running() will figure out what to do */
2909                 service_enter_running(s, SERVICE_SUCCESS);
2910                 break;
2911
2912         case SERVICE_STOP_SIGTERM:
2913         case SERVICE_STOP_SIGKILL:
2914
2915                 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2916                         service_enter_stop_post(s, SERVICE_SUCCESS);
2917
2918                 break;
2919
2920         case SERVICE_STOP_POST:
2921         case SERVICE_FINAL_SIGTERM:
2922         case SERVICE_FINAL_SIGKILL:
2923                 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2924                         service_enter_dead(s, SERVICE_SUCCESS, true);
2925
2926                 break;
2927
2928         default:
2929                 ;
2930         }
2931 }
2932
2933 static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2934         Service *s = SERVICE(u);
2935         ServiceResult f;
2936
2937         assert(s);
2938         assert(pid >= 0);
2939
2940         if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2941                                      is_clean_exit_lsb(code, status, &s->success_status))
2942                 f = SERVICE_SUCCESS;
2943         else if (code == CLD_EXITED)
2944                 f = SERVICE_FAILURE_EXIT_CODE;
2945         else if (code == CLD_KILLED)
2946                 f = SERVICE_FAILURE_SIGNAL;
2947         else if (code == CLD_DUMPED)
2948                 f = SERVICE_FAILURE_CORE_DUMP;
2949         else
2950                 assert_not_reached("Unknown code");
2951
2952         if (s->main_pid == pid) {
2953                 /* Forking services may occasionally move to a new PID.
2954                  * As long as they update the PID file before exiting the old
2955                  * PID, they're fine. */
2956                 if (service_load_pid_file(s, false) == 0)
2957                         return;
2958
2959                 s->main_pid = 0;
2960                 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
2961
2962                 if (s->main_command) {
2963                         /* If this is not a forking service than the
2964                          * main process got started and hence we copy
2965                          * the exit status so that it is recorded both
2966                          * as main and as control process exit
2967                          * status */
2968
2969                         s->main_command->exec_status = s->main_exec_status;
2970
2971                         if (s->main_command->ignore)
2972                                 f = SERVICE_SUCCESS;
2973                 } else if (s->exec_command[SERVICE_EXEC_START]) {
2974
2975                         /* If this is a forked process, then we should
2976                          * ignore the return value if this was
2977                          * configured for the starter process */
2978
2979                         if (s->exec_command[SERVICE_EXEC_START]->ignore)
2980                                 f = SERVICE_SUCCESS;
2981                 }
2982
2983                 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2984                            u->id,
2985                            "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
2986                                   u->id, sigchld_code_to_string(code), status,
2987                                   strna(code == CLD_EXITED
2988                                         ? exit_status_to_string(status, EXIT_STATUS_FULL)
2989                                         : signal_to_string(status)),
2990                            "EXIT_CODE=%s", sigchld_code_to_string(code),
2991                            "EXIT_STATUS=%i", status,
2992                            NULL);
2993
2994                 if (f != SERVICE_SUCCESS)
2995                         s->result = f;
2996
2997                 if (s->main_command &&
2998                     s->main_command->command_next &&
2999                     f == SERVICE_SUCCESS) {
3000
3001                         /* There is another command to *
3002                          * execute, so let's do that. */
3003
3004                         log_debug_unit(u->id,
3005                                        "%s running next main command for state %s",
3006                                        u->id, service_state_to_string(s->state));
3007                         service_run_next_main(s);
3008
3009                 } else {
3010
3011                         /* The service exited, so the service is officially
3012                          * gone. */
3013                         s->main_command = NULL;
3014
3015                         switch (s->state) {
3016
3017                         case SERVICE_START_POST:
3018                         case SERVICE_RELOAD:
3019                         case SERVICE_STOP:
3020                                 /* Need to wait until the operation is
3021                                  * done */
3022                                 break;
3023
3024                         case SERVICE_START:
3025                                 if (s->type == SERVICE_ONESHOT) {
3026                                         /* This was our main goal, so let's go on */
3027                                         if (f == SERVICE_SUCCESS)
3028                                                 service_enter_start_post(s);
3029                                         else
3030                                                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3031                                         break;
3032                                 }
3033
3034                                 /* Fall through */
3035
3036                         case SERVICE_RUNNING:
3037                                 service_enter_running(s, f);
3038                                 break;
3039
3040                         case SERVICE_STOP_SIGTERM:
3041                         case SERVICE_STOP_SIGKILL:
3042
3043                                 if (!control_pid_good(s))
3044                                         service_enter_stop_post(s, f);
3045
3046                                 /* If there is still a control process, wait for that first */
3047                                 break;
3048
3049                         case SERVICE_STOP_POST:
3050                         case SERVICE_FINAL_SIGTERM:
3051                         case SERVICE_FINAL_SIGKILL:
3052
3053                                 if (!control_pid_good(s))
3054                                         service_enter_dead(s, f, true);
3055                                 break;
3056
3057                         default:
3058                                 assert_not_reached("Uh, main process died at wrong time.");
3059                         }
3060                 }
3061
3062         } else if (s->control_pid == pid) {
3063                 s->control_pid = 0;
3064
3065                 if (s->control_command) {
3066                         exec_status_exit(&s->control_command->exec_status,
3067                                          &s->exec_context, pid, code, status);
3068
3069                         if (s->control_command->ignore)
3070                                 f = SERVICE_SUCCESS;
3071                 }
3072
3073                 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
3074                               "%s: control process exited, code=%s status=%i",
3075                               u->id, sigchld_code_to_string(code), status);
3076
3077                 if (f != SERVICE_SUCCESS)
3078                         s->result = f;
3079
3080                 /* Immediately get rid of the cgroup, so that the
3081                  * kernel doesn't delay the cgroup empty messages for
3082                  * the service cgroup any longer than necessary */
3083                 service_kill_control_processes(s);
3084
3085                 if (s->control_command &&
3086                     s->control_command->command_next &&
3087                     f == SERVICE_SUCCESS) {
3088
3089                         /* There is another command to *
3090                          * execute, so let's do that. */
3091
3092                         log_debug_unit(u->id,
3093                                        "%s running next control command for state %s",
3094                                        u->id, service_state_to_string(s->state));
3095                         service_run_next_control(s);
3096
3097                 } else {
3098                         /* No further commands for this step, so let's
3099                          * figure out what to do next */
3100
3101                         s->control_command = NULL;
3102                         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3103
3104                         log_debug_unit(u->id,
3105                                        "%s got final SIGCHLD for state %s",
3106                                        u->id, service_state_to_string(s->state));
3107
3108                         switch (s->state) {
3109
3110                         case SERVICE_START_PRE:
3111                                 if (f == SERVICE_SUCCESS)
3112                                         service_enter_start(s);
3113                                 else
3114                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3115                                 break;
3116
3117                         case SERVICE_START:
3118                                 if (s->type != SERVICE_FORKING)
3119                                         /* Maybe spurious event due to a reload that changed the type? */
3120                                         break;
3121
3122                                 if (f != SERVICE_SUCCESS) {
3123                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3124                                         break;
3125                                 }
3126
3127                                 if (s->pid_file) {
3128                                         bool has_start_post;
3129                                         int r;
3130
3131                                         /* Let's try to load the pid file here if we can.
3132                                          * The PID file might actually be created by a START_POST
3133                                          * script. In that case don't worry if the loading fails. */
3134
3135                                         has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3136                                         r = service_load_pid_file(s, !has_start_post);
3137                                         if (!has_start_post && r < 0) {
3138                                                 r = service_demand_pid_file(s);
3139                                                 if (r < 0 || !cgroup_good(s))
3140                                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3141                                                 break;
3142     &nb