chiark / gitweb /
core: add new RestrictAddressFamilies= switch
[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         unit_cgroup_context_init_defaults(u, &s->cgroup_context);
151
152         RATELIMIT_INIT(s->start_limit, u->manager->default_start_limit_interval, 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_patch_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
1442 static void service_set_state(Service *s, ServiceState state) {
1443         ServiceState old_state;
1444         const UnitActiveState *table;
1445
1446         assert(s);
1447
1448         table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1449
1450         old_state = s->state;
1451         s->state = state;
1452
1453         service_unwatch_pid_file(s);
1454
1455         if (!IN_SET(state,
1456                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1457                     SERVICE_RELOAD,
1458                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1459                     SERVICE_STOP_POST,
1460                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
1461                     SERVICE_AUTO_RESTART))
1462                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1463
1464         if (!IN_SET(state,
1465                     SERVICE_START, SERVICE_START_POST,
1466                     SERVICE_RUNNING, SERVICE_RELOAD,
1467                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1468                     SERVICE_STOP_POST,
1469                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1470                 service_unwatch_main_pid(s);
1471                 s->main_command = NULL;
1472         }
1473
1474         if (!IN_SET(state,
1475                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1476                     SERVICE_RELOAD,
1477                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1478                     SERVICE_STOP_POST,
1479                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1480                 service_unwatch_control_pid(s);
1481                 s->control_command = NULL;
1482                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1483         }
1484
1485         if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1486                 unit_unwatch_all_pids(UNIT(s));
1487
1488         if (!IN_SET(state,
1489                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1490                     SERVICE_RUNNING, SERVICE_RELOAD,
1491                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1492                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
1493             !(state == SERVICE_DEAD && UNIT(s)->job)) {
1494                 service_close_socket_fd(s);
1495                 service_connection_unref(s);
1496         }
1497
1498         if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1499                 service_stop_watchdog(s);
1500
1501         /* For the inactive states unit_notify() will trim the cgroup,
1502          * but for exit we have to do that ourselves... */
1503         if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
1504                 unit_destroy_cgroup(UNIT(s));
1505
1506         /* For remain_after_exit services, let's see if we can "release" the
1507          * hold on the console, since unit_notify() only does that in case of
1508          * change of state */
1509         if (state == SERVICE_EXITED && s->remain_after_exit &&
1510             UNIT(s)->manager->n_on_console > 0) {
1511                 ExecContext *ec = unit_get_exec_context(UNIT(s));
1512                 if (ec && exec_context_may_touch_console(ec)) {
1513                         Manager *m = UNIT(s)->manager;
1514
1515                         m->n_on_console --;
1516                         if (m->n_on_console == 0)
1517                                 /* unset no_console_output flag, since the console is free */
1518                                 m->no_console_output = false;
1519                 }
1520         }
1521
1522         if (old_state != state)
1523                 log_debug_unit(UNIT(s)->id, "%s changed %s -> %s", UNIT(s)->id, service_state_to_string(old_state), service_state_to_string(state));
1524
1525         unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
1526         s->reload_result = SERVICE_SUCCESS;
1527 }
1528
1529 static int service_coldplug(Unit *u) {
1530         Service *s = SERVICE(u);
1531         int r;
1532
1533         assert(s);
1534         assert(s->state == SERVICE_DEAD);
1535
1536         if (s->deserialized_state != s->state) {
1537
1538                 if (IN_SET(s->deserialized_state,
1539                            SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1540                            SERVICE_RELOAD,
1541                            SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1542                            SERVICE_STOP_POST,
1543                            SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1544
1545                         usec_t k;
1546
1547                         k = IN_SET(s->deserialized_state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec;
1548
1549                         /* For the start/stop timeouts 0 means off */
1550                         if (k > 0) {
1551                                 r = service_arm_timer(s, k);
1552                                 if (r < 0)
1553                                         return r;
1554                         }
1555                 }
1556
1557                 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
1558
1559                         /* The restart timeouts 0 means immediately */
1560                         r = service_arm_timer(s, s->restart_usec);
1561                         if (r < 0)
1562                                 return r;
1563                 }
1564
1565                 if (pid_is_unwaited(s->main_pid) &&
1566                     ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
1567                      IN_SET(s->deserialized_state,
1568                             SERVICE_START, SERVICE_START_POST,
1569                             SERVICE_RUNNING, SERVICE_RELOAD,
1570                             SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1571                             SERVICE_STOP_POST,
1572                             SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
1573                         r = unit_watch_pid(UNIT(s), s->main_pid);
1574                         if (r < 0)
1575                                 return r;
1576                 }
1577
1578                 if (pid_is_unwaited(s->control_pid) &&
1579                     IN_SET(s->deserialized_state,
1580                            SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1581                            SERVICE_RELOAD,
1582                            SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
1583                            SERVICE_STOP_POST,
1584                            SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1585                         r = unit_watch_pid(UNIT(s), s->control_pid);
1586                         if (r < 0)
1587                                 return r;
1588                 }
1589
1590                 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1591                         unit_watch_all_pids(UNIT(s));
1592
1593                 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1594                         service_start_watchdog(s);
1595
1596                 service_set_state(s, s->deserialized_state);
1597         }
1598
1599         return 0;
1600 }
1601
1602 static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1603         Iterator i;
1604         int r;
1605         int *rfds = NULL;
1606         unsigned rn_fds = 0;
1607         Unit *u;
1608
1609         assert(s);
1610         assert(fds);
1611         assert(n_fds);
1612
1613         if (s->socket_fd >= 0)
1614                 return 0;
1615
1616         SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
1617                 int *cfds;
1618                 unsigned cn_fds;
1619                 Socket *sock;
1620
1621                 if (u->type != UNIT_SOCKET)
1622                         continue;
1623
1624                 sock = SOCKET(u);
1625
1626                 r = socket_collect_fds(sock, &cfds, &cn_fds);
1627                 if (r < 0)
1628                         goto fail;
1629
1630                 if (!cfds)
1631                         continue;
1632
1633                 if (!rfds) {
1634                         rfds = cfds;
1635                         rn_fds = cn_fds;
1636                 } else {
1637                         int *t;
1638
1639                         t = new(int, rn_fds+cn_fds);
1640                         if (!t) {
1641                                 free(cfds);
1642                                 r = -ENOMEM;
1643                                 goto fail;
1644                         }
1645
1646                         memcpy(t, rfds, rn_fds * sizeof(int));
1647                         memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
1648                         free(rfds);
1649                         free(cfds);
1650
1651                         rfds = t;
1652                         rn_fds = rn_fds+cn_fds;
1653                 }
1654         }
1655
1656         *fds = rfds;
1657         *n_fds = rn_fds;
1658
1659         return 0;
1660
1661 fail:
1662         free(rfds);
1663
1664         return r;
1665 }
1666
1667 static int service_spawn(
1668                 Service *s,
1669                 ExecCommand *c,
1670                 bool timeout,
1671                 bool pass_fds,
1672                 bool apply_permissions,
1673                 bool apply_chroot,
1674                 bool apply_tty_stdin,
1675                 bool set_notify_socket,
1676                 bool is_control,
1677                 pid_t *_pid) {
1678
1679         pid_t pid;
1680         int r;
1681         int *fds = NULL;
1682         _cleanup_free_ int *fdsbuf = NULL;
1683         unsigned n_fds = 0, n_env = 0;
1684         _cleanup_strv_free_ char
1685                 **argv = NULL, **final_env = NULL, **our_env = NULL;
1686         const char *path;
1687
1688         assert(s);
1689         assert(c);
1690         assert(_pid);
1691
1692         unit_realize_cgroup(UNIT(s));
1693
1694         r = unit_setup_exec_runtime(UNIT(s));
1695         if (r < 0)
1696                 goto fail;
1697
1698         if (pass_fds ||
1699             s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1700             s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1701             s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1702
1703                 if (s->socket_fd >= 0) {
1704                         fds = &s->socket_fd;
1705                         n_fds = 1;
1706                 } else {
1707                         r = service_collect_fds(s, &fdsbuf, &n_fds);
1708                         if (r < 0)
1709                                 goto fail;
1710
1711                         fds = fdsbuf;
1712                 }
1713         }
1714
1715         if (timeout && s->timeout_start_usec > 0) {
1716                 r = service_arm_timer(s, s->timeout_start_usec);
1717                 if (r < 0)
1718                         goto fail;
1719         } else
1720                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1721
1722         r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
1723         if (r < 0)
1724                 goto fail;
1725
1726         our_env = new0(char*, 4);
1727         if (!our_env) {
1728                 r = -ENOMEM;
1729                 goto fail;
1730         }
1731
1732         if (set_notify_socket)
1733                 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
1734                         r = -ENOMEM;
1735                         goto fail;
1736                 }
1737
1738         if (s->main_pid > 0)
1739                 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
1740                         r = -ENOMEM;
1741                         goto fail;
1742                 }
1743
1744         if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
1745                 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
1746                         r = -ENOMEM;
1747                         goto fail;
1748                 }
1749
1750         final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
1751         if (!final_env) {
1752                 r = -ENOMEM;
1753                 goto fail;
1754         }
1755
1756         if (is_control && UNIT(s)->cgroup_path) {
1757                 path = strappenda(UNIT(s)->cgroup_path, "/control");
1758                 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
1759         } else
1760                 path = UNIT(s)->cgroup_path;
1761
1762         r = exec_spawn(c,
1763                        argv,
1764                        &s->exec_context,
1765                        fds, n_fds,
1766                        final_env,
1767                        apply_permissions,
1768                        apply_chroot,
1769                        apply_tty_stdin,
1770                        UNIT(s)->manager->confirm_spawn,
1771                        UNIT(s)->manager->cgroup_supported,
1772                        path,
1773                        UNIT(s)->id,
1774                        s->watchdog_usec,
1775                        s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
1776                        s->exec_runtime,
1777                        &pid);
1778         if (r < 0)
1779                 goto fail;
1780
1781         r = unit_watch_pid(UNIT(s), pid);
1782         if (r < 0)
1783                 /* FIXME: we need to do something here */
1784                 goto fail;
1785
1786         *_pid = pid;
1787
1788         return 0;
1789
1790 fail:
1791         if (timeout)
1792                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
1793
1794         return r;
1795 }
1796
1797 static int main_pid_good(Service *s) {
1798         assert(s);
1799
1800         /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1801          * don't know */
1802
1803         /* If we know the pid file, then lets just check if it is
1804          * still valid */
1805         if (s->main_pid_known) {
1806
1807                 /* If it's an alien child let's check if it is still
1808                  * alive ... */
1809                 if (s->main_pid_alien && s->main_pid > 0)
1810                         return pid_is_alive(s->main_pid);
1811
1812                 /* .. otherwise assume we'll get a SIGCHLD for it,
1813                  * which we really should wait for to collect exit
1814                  * status and code */
1815                 return s->main_pid > 0;
1816         }
1817
1818         /* We don't know the pid */
1819         return -EAGAIN;
1820 }
1821
1822 _pure_ static int control_pid_good(Service *s) {
1823         assert(s);
1824
1825         return s->control_pid > 0;
1826 }
1827
1828 static int cgroup_good(Service *s) {
1829         int r;
1830
1831         assert(s);
1832
1833         if (!UNIT(s)->cgroup_path)
1834                 return 0;
1835
1836         r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
1837         if (r < 0)
1838                 return r;
1839
1840         return !r;
1841 }
1842
1843 static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
1844         int r;
1845         assert(s);
1846
1847         if (f != SERVICE_SUCCESS)
1848                 s->result = f;
1849
1850         service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1851
1852         if (allow_restart &&
1853             !s->forbid_restart &&
1854             (s->restart == SERVICE_RESTART_ALWAYS ||
1855              (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1856              (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
1857              (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
1858              (s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
1859                                                          s->result == SERVICE_FAILURE_CORE_DUMP))) &&
1860             (s->result != SERVICE_FAILURE_EXIT_CODE ||
1861              !set_contains(s->restart_ignore_status.code, INT_TO_PTR(s->main_exec_status.status))) &&
1862             (s->result != SERVICE_FAILURE_SIGNAL ||
1863              !set_contains(s->restart_ignore_status.signal, INT_TO_PTR(s->main_exec_status.status)))) {
1864
1865                 r = service_arm_timer(s, s->restart_usec);
1866                 if (r < 0)
1867                         goto fail;
1868
1869                 service_set_state(s, SERVICE_AUTO_RESTART);
1870         }
1871
1872         s->forbid_restart = false;
1873
1874         /* we want fresh tmpdirs in case service is started again immediately */
1875         exec_runtime_destroy(s->exec_runtime);
1876         s->exec_runtime = exec_runtime_unref(s->exec_runtime);
1877
1878         /* Try to delete the pid file. At this point it will be
1879          * out-of-date, and some software might be confused by it, so
1880          * let's remove it. */
1881         if (s->pid_file)
1882                 unlink_noerrno(s->pid_file);
1883
1884         return;
1885
1886 fail:
1887         log_warning_unit(UNIT(s)->id,
1888                          "%s failed to run install restart timer: %s",
1889                          UNIT(s)->id, strerror(-r));
1890         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
1891 }
1892
1893 static void service_enter_stop_post(Service *s, ServiceResult f) {
1894         int r;
1895         assert(s);
1896
1897         if (f != SERVICE_SUCCESS)
1898                 s->result = f;
1899
1900         service_unwatch_control_pid(s);
1901         unit_watch_all_pids(UNIT(s));
1902
1903         s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1904         if (s->control_command) {
1905                 s->control_command_id = SERVICE_EXEC_STOP_POST;
1906
1907                 r = service_spawn(s,
1908                                   s->control_command,
1909                                   true,
1910                                   false,
1911                                   !s->permissions_start_only,
1912                                   !s->root_directory_start_only,
1913                                   true,
1914                                   false,
1915                                   true,
1916                                   &s->control_pid);
1917                 if (r < 0)
1918                         goto fail;
1919
1920                 service_set_state(s, SERVICE_STOP_POST);
1921         } else
1922                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
1923
1924         return;
1925
1926 fail:
1927         log_warning_unit(UNIT(s)->id,
1928                          "%s failed to run 'stop-post' task: %s",
1929                          UNIT(s)->id, strerror(-r));
1930         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
1931 }
1932
1933 static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
1934         int r;
1935
1936         assert(s);
1937
1938         if (f != SERVICE_SUCCESS)
1939                 s->result = f;
1940
1941         unit_watch_all_pids(UNIT(s));
1942
1943         r = unit_kill_context(
1944                         UNIT(s),
1945                         &s->kill_context,
1946                         state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1947                         s->main_pid,
1948                         s->control_pid,
1949                         s->main_pid_alien);
1950
1951         if (r < 0)
1952                 goto fail;
1953
1954         if (r > 0) {
1955                 if (s->timeout_stop_usec > 0) {
1956                         r = service_arm_timer(s, s->timeout_stop_usec);
1957                         if (r < 0)
1958                                 goto fail;
1959                 }
1960
1961                 service_set_state(s, state);
1962         } else if (state == SERVICE_STOP_SIGTERM)
1963                 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1964         else if (state == SERVICE_STOP_SIGKILL)
1965                 service_enter_stop_post(s, SERVICE_SUCCESS);
1966         else if (state == SERVICE_FINAL_SIGTERM)
1967                 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
1968         else
1969                 service_enter_dead(s, SERVICE_SUCCESS, true);
1970
1971         return;
1972
1973 fail:
1974         log_warning_unit(UNIT(s)->id,
1975                          "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
1976
1977         if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
1978                 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
1979         else
1980                 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
1981 }
1982
1983 static void service_enter_stop(Service *s, ServiceResult f) {
1984         int r;
1985
1986         assert(s);
1987
1988         if (f != SERVICE_SUCCESS)
1989                 s->result = f;
1990
1991         service_unwatch_control_pid(s);
1992         unit_watch_all_pids(UNIT(s));
1993
1994         s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1995         if (s->control_command) {
1996                 s->control_command_id = SERVICE_EXEC_STOP;
1997
1998                 r = service_spawn(s,
1999                                   s->control_command,
2000                                   true,
2001                                   false,
2002                                   !s->permissions_start_only,
2003                                   !s->root_directory_start_only,
2004                                   false,
2005                                   false,
2006                                   true,
2007                                   &s->control_pid);
2008                 if (r < 0)
2009                         goto fail;
2010
2011                 service_set_state(s, SERVICE_STOP);
2012         } else
2013                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2014
2015         return;
2016
2017 fail:
2018         log_warning_unit(UNIT(s)->id,
2019                          "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
2020         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2021 }
2022
2023 static void service_enter_running(Service *s, ServiceResult f) {
2024         int main_pid_ok, cgroup_ok;
2025         assert(s);
2026
2027         if (f != SERVICE_SUCCESS)
2028                 s->result = f;
2029
2030         main_pid_ok = main_pid_good(s);
2031         cgroup_ok = cgroup_good(s);
2032
2033         if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
2034             (s->bus_name_good || s->type != SERVICE_DBUS))
2035                 service_set_state(s, SERVICE_RUNNING);
2036         else if (s->remain_after_exit)
2037                 service_set_state(s, SERVICE_EXITED);
2038         else
2039                 service_enter_stop(s, SERVICE_SUCCESS);
2040 }
2041
2042 static void service_enter_start_post(Service *s) {
2043         int r;
2044         assert(s);
2045
2046         service_unwatch_control_pid(s);
2047         service_reset_watchdog(s);
2048
2049         s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
2050         if (s->control_command) {
2051                 s->control_command_id = SERVICE_EXEC_START_POST;
2052
2053                 r = service_spawn(s,
2054                                   s->control_command,
2055                                   true,
2056                                   false,
2057                                   !s->permissions_start_only,
2058                                   !s->root_directory_start_only,
2059                                   false,
2060                                   false,
2061                                   true,
2062                                   &s->control_pid);
2063                 if (r < 0)
2064                         goto fail;
2065
2066                 service_set_state(s, SERVICE_START_POST);
2067         } else
2068                 service_enter_running(s, SERVICE_SUCCESS);
2069
2070         return;
2071
2072 fail:
2073         log_warning_unit(UNIT(s)->id,
2074                          "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
2075         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2076 }
2077
2078 static void service_kill_control_processes(Service *s) {
2079         char *p;
2080
2081         if (!UNIT(s)->cgroup_path)
2082                 return;
2083
2084         p = strappenda(UNIT(s)->cgroup_path, "/control");
2085         cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
2086 }
2087
2088 static void service_enter_start(Service *s) {
2089         ExecCommand *c;
2090         pid_t pid;
2091         int r;
2092
2093         assert(s);
2094
2095         assert(s->exec_command[SERVICE_EXEC_START]);
2096         assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
2097
2098         service_unwatch_control_pid(s);
2099         service_unwatch_main_pid(s);
2100
2101         /* We want to ensure that nobody leaks processes from
2102          * START_PRE here, so let's go on a killing spree, People
2103          * should not spawn long running processes from START_PRE. */
2104         service_kill_control_processes(s);
2105
2106         if (s->type == SERVICE_FORKING) {
2107                 s->control_command_id = SERVICE_EXEC_START;
2108                 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2109
2110                 s->main_command = NULL;
2111         } else {
2112                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2113                 s->control_command = NULL;
2114
2115                 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2116         }
2117
2118         r = service_spawn(s,
2119                           c,
2120                           s->type == SERVICE_FORKING || s->type == SERVICE_DBUS ||
2121                             s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
2122                           true,
2123                           true,
2124                           true,
2125                           true,
2126                           s->notify_access != NOTIFY_NONE,
2127                           false,
2128                           &pid);
2129         if (r < 0)
2130                 goto fail;
2131
2132         if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
2133                 /* For simple services we immediately start
2134                  * the START_POST binaries. */
2135
2136                 service_set_main_pid(s, pid);
2137                 service_enter_start_post(s);
2138
2139         } else  if (s->type == SERVICE_FORKING) {
2140
2141                 /* For forking services we wait until the start
2142                  * process exited. */
2143
2144                 s->control_pid = pid;
2145                 service_set_state(s, SERVICE_START);
2146
2147         } else if (s->type == SERVICE_ONESHOT ||
2148                    s->type == SERVICE_DBUS ||
2149                    s->type == SERVICE_NOTIFY) {
2150
2151                 /* For oneshot services we wait until the start
2152                  * process exited, too, but it is our main process. */
2153
2154                 /* For D-Bus services we know the main pid right away,
2155                  * but wait for the bus name to appear on the
2156                  * bus. Notify services are similar. */
2157
2158                 service_set_main_pid(s, pid);
2159                 service_set_state(s, SERVICE_START);
2160         } else
2161                 assert_not_reached("Unknown service type");
2162
2163         return;
2164
2165 fail:
2166         log_warning_unit(UNIT(s)->id,
2167                          "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
2168         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2169 }
2170
2171 static void service_enter_start_pre(Service *s) {
2172         int r;
2173
2174         assert(s);
2175
2176         service_unwatch_control_pid(s);
2177
2178         s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2179         if (s->control_command) {
2180                 /* Before we start anything, let's clear up what might
2181                  * be left from previous runs. */
2182                 service_kill_control_processes(s);
2183
2184                 s->control_command_id = SERVICE_EXEC_START_PRE;
2185
2186                 r = service_spawn(s,
2187                                   s->control_command,
2188                                   true,
2189                                   false,
2190                                   !s->permissions_start_only,
2191                                   !s->root_directory_start_only,
2192                                   true,
2193                                   false,
2194                                   true,
2195                                   &s->control_pid);
2196                 if (r < 0)
2197                         goto fail;
2198
2199                 service_set_state(s, SERVICE_START_PRE);
2200         } else
2201                 service_enter_start(s);
2202
2203         return;
2204
2205 fail:
2206         log_warning_unit(UNIT(s)->id,
2207                          "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
2208         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2209 }
2210
2211 static void service_enter_restart(Service *s) {
2212         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
2213         int r;
2214
2215         assert(s);
2216
2217         if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2218                 /* Don't restart things if we are going down anyway */
2219                 log_info_unit(UNIT(s)->id,
2220                               "Stop job pending for unit, delaying automatic restart.");
2221
2222                 r = service_arm_timer(s, s->restart_usec);
2223                 if (r < 0)
2224                         goto fail;
2225
2226                 return;
2227         }
2228
2229         /* Any units that are bound to this service must also be
2230          * restarted. We use JOB_RESTART (instead of the more obvious
2231          * JOB_START) here so that those dependency jobs will be added
2232          * as well. */
2233         r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
2234         if (r < 0)
2235                 goto fail;
2236
2237         /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2238          * it will be canceled as part of the service_stop() call that
2239          * is executed as part of JOB_RESTART. */
2240
2241         log_debug_unit(UNIT(s)->id,
2242                        "%s scheduled restart job.", UNIT(s)->id);
2243         return;
2244
2245 fail:
2246         log_warning_unit(UNIT(s)->id,
2247                          "%s failed to schedule restart job: %s",
2248                          UNIT(s)->id, bus_error_message(&error, -r));
2249         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
2250 }
2251
2252 static void service_enter_reload(Service *s) {
2253         int r;
2254
2255         assert(s);
2256
2257         service_unwatch_control_pid(s);
2258
2259         s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2260         if (s->control_command) {
2261                 s->control_command_id = SERVICE_EXEC_RELOAD;
2262
2263                 r = service_spawn(s,
2264                                   s->control_command,
2265                                   true,
2266                                   false,
2267                                   !s->permissions_start_only,
2268                                   !s->root_directory_start_only,
2269                                   false,
2270                                   false,
2271                                   true,
2272                                   &s->control_pid);
2273                 if (r < 0)
2274                         goto fail;
2275
2276                 service_set_state(s, SERVICE_RELOAD);
2277         } else
2278                 service_enter_running(s, SERVICE_SUCCESS);
2279
2280         return;
2281
2282 fail:
2283         log_warning_unit(UNIT(s)->id,
2284                          "%s failed to run 'reload' task: %s",
2285                          UNIT(s)->id, strerror(-r));
2286         s->reload_result = SERVICE_FAILURE_RESOURCES;
2287         service_enter_running(s, SERVICE_SUCCESS);
2288 }
2289
2290 static void service_run_next_control(Service *s) {
2291         int r;
2292
2293         assert(s);
2294         assert(s->control_command);
2295         assert(s->control_command->command_next);
2296
2297         assert(s->control_command_id != SERVICE_EXEC_START);
2298
2299         s->control_command = s->control_command->command_next;
2300         service_unwatch_control_pid(s);
2301
2302         r = service_spawn(s,
2303                           s->control_command,
2304                           true,
2305                           false,
2306                           !s->permissions_start_only,
2307                           !s->root_directory_start_only,
2308                           s->control_command_id == SERVICE_EXEC_START_PRE ||
2309                           s->control_command_id == SERVICE_EXEC_STOP_POST,
2310                           false,
2311                           true,
2312                           &s->control_pid);
2313         if (r < 0)
2314                 goto fail;
2315
2316         return;
2317
2318 fail:
2319         log_warning_unit(UNIT(s)->id,
2320                          "%s failed to run next control task: %s",
2321                          UNIT(s)->id, strerror(-r));
2322
2323         if (s->state == SERVICE_START_PRE)
2324                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2325         else if (s->state == SERVICE_STOP)
2326                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2327         else if (s->state == SERVICE_STOP_POST)
2328                 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2329         else if (s->state == SERVICE_RELOAD) {
2330                 s->reload_result = SERVICE_FAILURE_RESOURCES;
2331                 service_enter_running(s, SERVICE_SUCCESS);
2332         } else
2333                 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2334 }
2335
2336 static void service_run_next_main(Service *s) {
2337         pid_t pid;
2338         int r;
2339
2340         assert(s);
2341         assert(s->main_command);
2342         assert(s->main_command->command_next);
2343         assert(s->type == SERVICE_ONESHOT);
2344
2345         s->main_command = s->main_command->command_next;
2346         service_unwatch_main_pid(s);
2347
2348         r = service_spawn(s,
2349                           s->main_command,
2350                           true,
2351                           true,
2352                           true,
2353                           true,
2354                           true,
2355                           s->notify_access != NOTIFY_NONE,
2356                           false,
2357                           &pid);
2358         if (r < 0)
2359                 goto fail;
2360
2361         service_set_main_pid(s, pid);
2362
2363         return;
2364
2365 fail:
2366         log_warning_unit(UNIT(s)->id,
2367                          "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
2368         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2369 }
2370
2371 static int service_start_limit_test(Service *s) {
2372         assert(s);
2373
2374         if (ratelimit_test(&s->start_limit))
2375                 return 0;
2376
2377         switch (s->start_limit_action) {
2378
2379         case SERVICE_START_LIMIT_NONE:
2380                 log_warning_unit(UNIT(s)->id,
2381                                  "%s start request repeated too quickly, refusing to start.",
2382                                  UNIT(s)->id);
2383                 break;
2384
2385         case SERVICE_START_LIMIT_REBOOT: {
2386                 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
2387                 int r;
2388
2389                 log_warning_unit(UNIT(s)->id,
2390                                  "%s start request repeated too quickly, rebooting.", UNIT(s)->id);
2391
2392                 r = manager_add_job_by_name(UNIT(s)->manager, JOB_START,
2393                                             SPECIAL_REBOOT_TARGET, JOB_REPLACE,
2394                                             true, &error, NULL);
2395                 if (r < 0)
2396                         log_error_unit(UNIT(s)->id,
2397                                        "Failed to reboot: %s.", bus_error_message(&error, r));
2398
2399                 break;
2400         }
2401
2402         case SERVICE_START_LIMIT_REBOOT_FORCE:
2403                 log_warning_unit(UNIT(s)->id,
2404                                  "%s start request repeated too quickly, forcibly rebooting.", UNIT(s)->id);
2405                 UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2406                 break;
2407
2408         case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
2409                 log_warning_unit(UNIT(s)->id,
2410                                  "%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
2411                 sync();
2412                 reboot(RB_AUTOBOOT);
2413                 break;
2414
2415         default:
2416                 log_error_unit(UNIT(s)->id,
2417                                "start limit action=%i", s->start_limit_action);
2418                 assert_not_reached("Unknown StartLimitAction.");
2419         }
2420
2421         return -ECANCELED;
2422 }
2423
2424 static int service_start(Unit *u) {
2425         Service *s = SERVICE(u);
2426         int r;
2427
2428         assert(s);
2429
2430         /* We cannot fulfill this request right now, try again later
2431          * please! */
2432         if (s->state == SERVICE_STOP ||
2433             s->state == SERVICE_STOP_SIGTERM ||
2434             s->state == SERVICE_STOP_SIGKILL ||
2435             s->state == SERVICE_STOP_POST ||
2436             s->state == SERVICE_FINAL_SIGTERM ||
2437             s->state == SERVICE_FINAL_SIGKILL)
2438                 return -EAGAIN;
2439
2440         /* Already on it! */
2441         if (s->state == SERVICE_START_PRE ||
2442             s->state == SERVICE_START ||
2443             s->state == SERVICE_START_POST)
2444                 return 0;
2445
2446         /* A service that will be restarted must be stopped first to
2447          * trigger BindsTo and/or OnFailure dependencies. If a user
2448          * does not want to wait for the holdoff time to elapse, the
2449          * service should be manually restarted, not started. We
2450          * simply return EAGAIN here, so that any start jobs stay
2451          * queued, and assume that the auto restart timer will
2452          * eventually trigger the restart. */
2453         if (s->state == SERVICE_AUTO_RESTART)
2454                 return -EAGAIN;
2455
2456         assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
2457
2458         /* Make sure we don't enter a busy loop of some kind. */
2459         r = service_start_limit_test(s);
2460         if (r < 0) {
2461                 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
2462                 return r;
2463         }
2464
2465         s->result = SERVICE_SUCCESS;
2466         s->reload_result = SERVICE_SUCCESS;
2467         s->main_pid_known = false;
2468         s->main_pid_alien = false;
2469         s->forbid_restart = false;
2470
2471         service_enter_start_pre(s);
2472         return 0;
2473 }
2474
2475 static int service_stop(Unit *u) {
2476         Service *s = SERVICE(u);
2477
2478         assert(s);
2479
2480         /* Don't create restart jobs from here. */
2481         s->forbid_restart = true;
2482
2483         /* Already on it */
2484         if (s->state == SERVICE_STOP ||
2485             s->state == SERVICE_STOP_SIGTERM ||
2486             s->state == SERVICE_STOP_SIGKILL ||
2487             s->state == SERVICE_STOP_POST ||
2488             s->state == SERVICE_FINAL_SIGTERM ||
2489             s->state == SERVICE_FINAL_SIGKILL)
2490                 return 0;
2491
2492         /* A restart will be scheduled or is in progress. */
2493         if (s->state == SERVICE_AUTO_RESTART) {
2494                 service_set_state(s, SERVICE_DEAD);
2495                 return 0;
2496         }
2497
2498         /* If there's already something running we go directly into
2499          * kill mode. */
2500         if (s->state == SERVICE_START_PRE ||
2501             s->state == SERVICE_START ||
2502             s->state == SERVICE_START_POST ||
2503             s->state == SERVICE_RELOAD) {
2504                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2505                 return 0;
2506         }
2507
2508         assert(s->state == SERVICE_RUNNING ||
2509                s->state == SERVICE_EXITED);
2510
2511         service_enter_stop(s, SERVICE_SUCCESS);
2512         return 0;
2513 }
2514
2515 static int service_reload(Unit *u) {
2516         Service *s = SERVICE(u);
2517
2518         assert(s);
2519
2520         assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
2521
2522         service_enter_reload(s);
2523         return 0;
2524 }
2525
2526 _pure_ static bool service_can_reload(Unit *u) {
2527         Service *s = SERVICE(u);
2528
2529         assert(s);
2530
2531         return !!s->exec_command[SERVICE_EXEC_RELOAD];
2532 }
2533
2534 static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2535         Service *s = SERVICE(u);
2536
2537         assert(u);
2538         assert(f);
2539         assert(fds);
2540
2541         unit_serialize_item(u, f, "state", service_state_to_string(s->state));
2542         unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2543         unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
2544
2545         if (s->control_pid > 0)
2546                 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
2547                                            s->control_pid);
2548
2549         if (s->main_pid_known && s->main_pid > 0)
2550                 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
2551
2552         unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2553
2554         if (s->status_text)
2555                 unit_serialize_item(u, f, "status-text", s->status_text);
2556
2557         /* FIXME: There's a minor uncleanliness here: if there are
2558          * multiple commands attached here, we will start from the
2559          * first one again */
2560         if (s->control_command_id >= 0)
2561                 unit_serialize_item(u, f, "control-command",
2562                                     service_exec_command_to_string(s->control_command_id));
2563
2564         if (s->socket_fd >= 0) {
2565                 int copy;
2566
2567                 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2568                         return copy;
2569
2570                 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2571         }
2572
2573         if (s->main_exec_status.pid > 0) {
2574                 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
2575                                            s->main_exec_status.pid);
2576                 dual_timestamp_serialize(f, "main-exec-status-start",
2577                                          &s->main_exec_status.start_timestamp);
2578                 dual_timestamp_serialize(f, "main-exec-status-exit",
2579                                          &s->main_exec_status.exit_timestamp);
2580
2581                 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
2582                         unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
2583                                                    s->main_exec_status.code);
2584                         unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
2585                                                    s->main_exec_status.status);
2586                 }
2587         }
2588         if (dual_timestamp_is_set(&s->watchdog_timestamp))
2589                 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
2590
2591         if (s->forbid_restart)
2592                 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
2593
2594         return 0;
2595 }
2596
2597 static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2598         Service *s = SERVICE(u);
2599
2600         assert(u);
2601         assert(key);
2602         assert(value);
2603         assert(fds);
2604
2605         if (streq(key, "state")) {
2606                 ServiceState state;
2607
2608                 state = service_state_from_string(value);
2609                 if (state < 0)
2610                         log_debug_unit(u->id, "Failed to parse state value %s", value);
2611                 else
2612                         s->deserialized_state = state;
2613         } else if (streq(key, "result")) {
2614                 ServiceResult f;
2615
2616                 f = service_result_from_string(value);
2617                 if (f < 0)
2618                         log_debug_unit(u->id, "Failed to parse result value %s", value);
2619                 else if (f != SERVICE_SUCCESS)
2620                         s->result = f;
2621
2622         } else if (streq(key, "reload-result")) {
2623                 ServiceResult f;
2624
2625                 f = service_result_from_string(value);
2626                 if (f < 0)
2627                         log_debug_unit(u->id, "Failed to parse reload result value %s", value);
2628                 else if (f != SERVICE_SUCCESS)
2629                         s->reload_result = f;
2630
2631         } else if (streq(key, "control-pid")) {
2632                 pid_t pid;
2633
2634                 if (parse_pid(value, &pid) < 0)
2635                         log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
2636                 else
2637                         s->control_pid = pid;
2638         } else if (streq(key, "main-pid")) {
2639                 pid_t pid;
2640
2641                 if (parse_pid(value, &pid) < 0)
2642                         log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
2643                 else {
2644                         service_set_main_pid(s, pid);
2645                         unit_watch_pid(UNIT(s), pid);
2646                 }
2647         } else if (streq(key, "main-pid-known")) {
2648                 int b;
2649
2650                 b = parse_boolean(value);
2651                 if (b < 0)
2652                         log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
2653                 else
2654                         s->main_pid_known = b;
2655         } else if (streq(key, "status-text")) {
2656                 char *t;
2657
2658                 t = strdup(value);
2659                 if (!t)
2660                         log_oom();
2661                 else {
2662                         free(s->status_text);
2663                         s->status_text = t;
2664                 }
2665
2666         } else if (streq(key, "control-command")) {
2667                 ServiceExecCommand id;
2668
2669                 id = service_exec_command_from_string(value);
2670                 if (id < 0)
2671                         log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
2672                 else {
2673                         s->control_command_id = id;
2674                         s->control_command = s->exec_command[id];
2675                 }
2676         } else if (streq(key, "socket-fd")) {
2677                 int fd;
2678
2679                 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2680                         log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
2681                 else {
2682
2683                         if (s->socket_fd >= 0)
2684                                 close_nointr_nofail(s->socket_fd);
2685                         s->socket_fd = fdset_remove(fds, fd);
2686                 }
2687         } else if (streq(key, "main-exec-status-pid")) {
2688                 pid_t pid;
2689
2690                 if (parse_pid(value, &pid) < 0)
2691                         log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
2692                 else
2693                         s->main_exec_status.pid = pid;
2694         } else if (streq(key, "main-exec-status-code")) {
2695                 int i;
2696
2697                 if (safe_atoi(value, &i) < 0)
2698                         log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
2699                 else
2700                         s->main_exec_status.code = i;
2701         } else if (streq(key, "main-exec-status-status")) {
2702                 int i;
2703
2704                 if (safe_atoi(value, &i) < 0)
2705                         log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
2706                 else
2707                         s->main_exec_status.status = i;
2708         } else if (streq(key, "main-exec-status-start"))
2709                 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2710         else if (streq(key, "main-exec-status-exit"))
2711                 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
2712         else if (streq(key, "watchdog-timestamp"))
2713                 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
2714         else if (streq(key, "forbid-restart")) {
2715                 int b;
2716
2717                 b = parse_boolean(value);
2718                 if (b < 0)
2719                         log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
2720                 else
2721                         s->forbid_restart = b;
2722         } else
2723                 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
2724
2725         return 0;
2726 }
2727
2728 _pure_ static UnitActiveState service_active_state(Unit *u) {
2729         const UnitActiveState *table;
2730
2731         assert(u);
2732
2733         table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2734
2735         return table[SERVICE(u)->state];
2736 }
2737
2738 static const char *service_sub_state_to_string(Unit *u) {
2739         assert(u);
2740
2741         return service_state_to_string(SERVICE(u)->state);
2742 }
2743
2744 static bool service_check_gc(Unit *u) {
2745         Service *s = SERVICE(u);
2746
2747         assert(s);
2748
2749         /* Never clean up services that still have a process around,
2750          * even if the service is formally dead. */
2751         if (cgroup_good(s) > 0 ||
2752             main_pid_good(s) > 0 ||
2753             control_pid_good(s) > 0)
2754                 return true;
2755
2756 #ifdef HAVE_SYSV_COMPAT
2757         if (s->is_sysv)
2758                 return true;
2759 #endif
2760
2761         return false;
2762 }
2763
2764 _pure_ static bool service_check_snapshot(Unit *u) {
2765         Service *s = SERVICE(u);
2766
2767         assert(s);
2768
2769         return (s->socket_fd < 0);
2770 }
2771
2772 static int service_retry_pid_file(Service *s) {
2773         int r;
2774
2775         assert(s->pid_file);
2776         assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2777
2778         r = service_load_pid_file(s, false);
2779         if (r < 0)
2780                 return r;
2781
2782         service_unwatch_pid_file(s);
2783
2784         service_enter_running(s, SERVICE_SUCCESS);
2785         return 0;
2786 }
2787
2788 static int service_watch_pid_file(Service *s) {
2789         int r;
2790
2791         log_debug_unit(UNIT(s)->id,
2792                        "Setting watch for %s's PID file %s",
2793                        UNIT(s)->id, s->pid_file_pathspec->path);
2794         r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
2795         if (r < 0)
2796                 goto fail;
2797
2798         /* the pidfile might have appeared just before we set the watch */
2799         log_debug_unit(UNIT(s)->id,
2800                        "Trying to read %s's PID file %s in case it changed",
2801                        UNIT(s)->id, s->pid_file_pathspec->path);
2802         service_retry_pid_file(s);
2803
2804         return 0;
2805 fail:
2806         log_error_unit(UNIT(s)->id,
2807                        "Failed to set a watch for %s's PID file %s: %s",
2808                        UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
2809         service_unwatch_pid_file(s);
2810         return r;
2811 }
2812
2813 static int service_demand_pid_file(Service *s) {
2814         PathSpec *ps;
2815
2816         assert(s->pid_file);
2817         assert(!s->pid_file_pathspec);
2818
2819         ps = new0(PathSpec, 1);
2820         if (!ps)
2821                 return -ENOMEM;
2822
2823         ps->unit = UNIT(s);
2824         ps->path = strdup(s->pid_file);
2825         if (!ps->path) {
2826                 free(ps);
2827                 return -ENOMEM;
2828         }
2829
2830         path_kill_slashes(ps->path);
2831
2832         /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2833          * keep their PID file open all the time. */
2834         ps->type = PATH_MODIFIED;
2835         ps->inotify_fd = -1;
2836
2837         s->pid_file_pathspec = ps;
2838
2839         return service_watch_pid_file(s);
2840 }
2841
2842 static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
2843         PathSpec *p = userdata;
2844         Service *s;
2845
2846         assert(p);
2847
2848         s = SERVICE(p->unit);
2849
2850         assert(s);
2851         assert(fd >= 0);
2852         assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2853         assert(s->pid_file_pathspec);
2854         assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
2855
2856         log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
2857
2858         if (path_spec_fd_event(p, events) < 0)
2859                 goto fail;
2860
2861         if (service_retry_pid_file(s) == 0)
2862                 return 0;
2863
2864         if (service_watch_pid_file(s) < 0)
2865                 goto fail;
2866
2867         return 0;
2868
2869 fail:
2870         service_unwatch_pid_file(s);
2871         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2872         return 0;
2873 }
2874
2875 static void service_notify_cgroup_empty_event(Unit *u) {
2876         Service *s = SERVICE(u);
2877
2878         assert(u);
2879
2880         log_debug_unit(u->id, "%s: cgroup is empty", u->id);
2881
2882         switch (s->state) {
2883
2884                 /* Waiting for SIGCHLD is usually more interesting,
2885                  * because it includes return codes/signals. Which is
2886                  * why we ignore the cgroup events for most cases,
2887                  * except when we don't know pid which to expect the
2888                  * SIGCHLD for. */
2889
2890         case SERVICE_START:
2891         case SERVICE_START_POST:
2892                 /* If we were hoping for the daemon to write its PID file,
2893                  * we can give up now. */
2894                 if (s->pid_file_pathspec) {
2895                         log_warning_unit(u->id,
2896                                          "%s never wrote its PID file. Failing.", UNIT(s)->id);
2897                         service_unwatch_pid_file(s);
2898                         if (s->state == SERVICE_START)
2899                                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2900                         else
2901                                 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2902                 }
2903                 break;
2904
2905         case SERVICE_RUNNING:
2906                 /* service_enter_running() will figure out what to do */
2907                 service_enter_running(s, SERVICE_SUCCESS);
2908                 break;
2909
2910         case SERVICE_STOP_SIGTERM:
2911         case SERVICE_STOP_SIGKILL:
2912
2913                 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2914                         service_enter_stop_post(s, SERVICE_SUCCESS);
2915
2916                 break;
2917
2918         case SERVICE_STOP_POST:
2919         case SERVICE_FINAL_SIGTERM:
2920         case SERVICE_FINAL_SIGKILL:
2921                 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2922                         service_enter_dead(s, SERVICE_SUCCESS, true);
2923
2924                 break;
2925
2926         default:
2927                 ;
2928         }
2929 }
2930
2931 static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2932         Service *s = SERVICE(u);
2933         ServiceResult f;
2934
2935         assert(s);
2936         assert(pid >= 0);
2937
2938         if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2939                                      is_clean_exit_lsb(code, status, &s->success_status))
2940                 f = SERVICE_SUCCESS;
2941         else if (code == CLD_EXITED)
2942                 f = SERVICE_FAILURE_EXIT_CODE;
2943         else if (code == CLD_KILLED)
2944                 f = SERVICE_FAILURE_SIGNAL;
2945         else if (code == CLD_DUMPED)
2946                 f = SERVICE_FAILURE_CORE_DUMP;
2947         else
2948                 assert_not_reached("Unknown code");
2949
2950         if (s->main_pid == pid) {
2951                 /* Forking services may occasionally move to a new PID.
2952                  * As long as they update the PID file before exiting the old
2953                  * PID, they're fine. */
2954                 if (service_load_pid_file(s, false) == 0)
2955                         return;
2956
2957                 s->main_pid = 0;
2958                 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
2959
2960                 if (s->main_command) {
2961                         /* If this is not a forking service than the
2962                          * main process got started and hence we copy
2963                          * the exit status so that it is recorded both
2964                          * as main and as control process exit
2965                          * status */
2966
2967                         s->main_command->exec_status = s->main_exec_status;
2968
2969                         if (s->main_command->ignore)
2970                                 f = SERVICE_SUCCESS;
2971                 } else if (s->exec_command[SERVICE_EXEC_START]) {
2972
2973                         /* If this is a forked process, then we should
2974                          * ignore the return value if this was
2975                          * configured for the starter process */
2976
2977                         if (s->exec_command[SERVICE_EXEC_START]->ignore)
2978                                 f = SERVICE_SUCCESS;
2979                 }
2980
2981                 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2982                            u->id,
2983                            "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
2984                                   u->id, sigchld_code_to_string(code), status,
2985                                   strna(code == CLD_EXITED
2986                                         ? exit_status_to_string(status, EXIT_STATUS_FULL)
2987                                         : signal_to_string(status)),
2988                            "EXIT_CODE=%s", sigchld_code_to_string(code),
2989                            "EXIT_STATUS=%i", status,
2990                            NULL);
2991
2992                 if (f != SERVICE_SUCCESS)
2993                         s->result = f;
2994
2995                 if (s->main_command &&
2996                     s->main_command->command_next &&
2997                     f == SERVICE_SUCCESS) {
2998
2999                         /* There is another command to *
3000                          * execute, so let's do that. */
3001
3002                         log_debug_unit(u->id,
3003                                        "%s running next main command for state %s",
3004                                        u->id, service_state_to_string(s->state));
3005                         service_run_next_main(s);
3006
3007                 } else {
3008
3009                         /* The service exited, so the service is officially
3010                          * gone. */
3011                         s->main_command = NULL;
3012
3013                         switch (s->state) {
3014
3015                         case SERVICE_START_POST:
3016                         case SERVICE_RELOAD:
3017                         case SERVICE_STOP:
3018                                 /* Need to wait until the operation is
3019                                  * done */
3020                                 break;
3021
3022                         case SERVICE_START:
3023                                 if (s->type == SERVICE_ONESHOT) {
3024                                         /* This was our main goal, so let's go on */
3025                                         if (f == SERVICE_SUCCESS)
3026                                                 service_enter_start_post(s);
3027                                         else
3028                                                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3029                                         break;
3030                                 }
3031
3032                                 /* Fall through */
3033
3034                         case SERVICE_RUNNING:
3035                                 service_enter_running(s, f);
3036                                 break;
3037
3038                         case SERVICE_STOP_SIGTERM:
3039                         case SERVICE_STOP_SIGKILL:
3040
3041                                 if (!control_pid_good(s))
3042                                         service_enter_stop_post(s, f);
3043
3044                                 /* If there is still a control process, wait for that first */
3045                                 break;
3046
3047                         case SERVICE_STOP_POST:
3048                         case SERVICE_FINAL_SIGTERM:
3049                         case SERVICE_FINAL_SIGKILL:
3050
3051                                 if (!control_pid_good(s))
3052                                         service_enter_dead(s, f, true);
3053                                 break;
3054
3055                         default:
3056                                 assert_not_reached("Uh, main process died at wrong time.");
3057                         }
3058                 }
3059
3060         } else if (s->control_pid == pid) {
3061                 s->control_pid = 0;
3062
3063                 if (s->control_command) {
3064                         exec_status_exit(&s->control_command->exec_status,
3065                                          &s->exec_context, pid, code, status);
3066
3067                         if (s->control_command->ignore)
3068                                 f = SERVICE_SUCCESS;
3069                 }
3070
3071                 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
3072                               "%s: control process exited, code=%s status=%i",
3073                               u->id, sigchld_code_to_string(code), status);
3074
3075                 if (f != SERVICE_SUCCESS)
3076                         s->result = f;
3077
3078                 /* Immediately get rid of the cgroup, so that the
3079                  * kernel doesn't delay the cgroup empty messages for
3080                  * the service cgroup any longer than necessary */
3081                 service_kill_control_processes(s);
3082
3083                 if (s->control_command &&
3084                     s->control_command->command_next &&
3085                     f == SERVICE_SUCCESS) {
3086
3087                         /* There is another command to *
3088                          * execute, so let's do that. */
3089
3090                         log_debug_unit(u->id,
3091                                        "%s running next control command for state %s",
3092                                        u->id, service_state_to_string(s->state));
3093                         service_run_next_control(s);
3094
3095                 } else {
3096                         /* No further commands for this step, so let's
3097                          * figure out what to do next */
3098
3099                         s->control_command = NULL;
3100                         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3101
3102                         log_debug_unit(u->id,
3103                                        "%s got final SIGCHLD for state %s",
3104                                        u->id, service_state_to_string(s->state));
3105
3106                         switch (s->state) {
3107
3108                         case SERVICE_START_PRE:
3109                                 if (f == SERVICE_SUCCESS)
3110                                         service_enter_start(s);
3111                                 else
3112                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3113                                 break;
3114
3115                         case SERVICE_START:
3116                                 if (s->type != SERVICE_FORKING)
3117                                         /* Maybe spurious event due to a reload that changed the type? */
3118                                         break;
3119
3120                                 if (f != SERVICE_SUCCESS) {
3121                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3122                                         break;
3123                                 }
3124
3125                                 if (s->pid_file) {
3126                                         bool has_start_post;
3127                                         int r;
3128
3129                                         /* Let's try to load the pid file here if we can.
3130                                          * The PID file might actually be created by a START_POST
3131                                          * script. In that case don't worry if the loading fails. */
3132
3133                                         has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3134                                         r = service_load_pid_file(s, !has_start_post);
3135                                         if (!has_start_post && r < 0) {
3136                                                 r = service_demand_pid_file(s);
3137                                                 if (r < 0 || !cgroup_good(s))
3138                                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3139                                                 break;
3140                                         }
3141                                 } else
3142                                         service_search_main_pid(s);
3143
3144                                 service_enter_start_post(s);
3145                                 break;
3146
3147                         case SERVICE_START_POST:
3148                                 if (f != SERVICE_SUCCESS) {
3149                                         service_enter_stop(s, f);
3150                                         break;
3151                                 }
3152
3153                                 if (s->pid_file) {
3154                                         int r;
3155
3156                                         r = service_load_pid_file(s, true);
3157                                         if (r < 0) {
3158                                                 r = service_demand_pid_file(s);
3159                                                 if (r < 0 || !cgroup_good(s))
3160                                                         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
3161                                                 break;
3162                                         }
3163                                 } else
3164                                         service_search_main_pid(s);
3165
3166                                 service_enter_running(s, SERVICE_SUCCESS);
3167                                 break;
3168
3169                         case SERVICE_RELOAD:
3170                                 if (f == SERVICE_SUCCESS) {
3171                                         service_load_pid_file(s, true);
3172                                         service_search_main_pid(s);
3173                                 }
3174
3175                                 s->reload_result = f;
3176                                 service_enter_running(s, SERVICE_SUCCESS);
3177                                 break;
3178
3179                         case SERVICE_STOP:
3180                                 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3181                                 break;
3182
3183                         case SERVICE_STOP_SIGTERM:
3184                         case SERVICE_STOP_SIGKILL:
3185                                 if (main_pid_good(s) <= 0)
3186                                         service_enter_stop_post(s, f);
3187
3188                                 /* If there is still a service
3189                                  * process around, wait until
3190                                  * that one quit, too */
3191                                 break;
3192
3193                         case SERVICE_STOP_POST:
3194                         case SERVICE_FINAL_SIGTERM:
3195                         case SERVICE_FINAL_SIGKILL:
3196                                 if (main_pid_good(s) <= 0)
3197                                         service_enter_dead(s, f, true);
3198                                 break;
3199
3200                         default:
3201                                 assert_not_reached("Uh, control process died at wrong time.");
3202                         }
3203                 }
3204         }
3205
3206         /* Notify clients about changed exit status */
3207         unit_add_to_dbus_queue(u);
3208
3209         /* We got one SIGCHLD for the service, let's watch all
3210          * processes that are now running of the service, and watch
3211          * that. Among the PIDs we then watch will be children
3212          * reassigned to us, which hopefully allows us to identify
3213          * when all children are gone */
3214         unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
3215         unit_watch_all_pids(u);
3216
3217         /* If the PID set is empty now, then let's finish this off */
3218         if (set_isempty(u->pids))
3219                 service_notify_cgroup_empty_event(u);
3220 }
3221
3222 static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3223         Service *s = SERVICE(userdata);
3224
3225         assert(s);
3226         assert(source == s->timer_event_source);
3227
3228         switch (s->state) {
3229
3230         case SERVICE_START_PRE:
3231         case SERVICE_START:
3232                 log_warning_unit(UNIT(s)->id,
3233                                  "%s %s operation timed out. Terminating.",
3234                                  UNIT(s)->id,
3235                                  s->state == SERVICE_START ? "start" : "start-pre");
3236                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3237                 break;
3238
3239         case SERVICE_START_POST:
3240                 log_warning_unit(UNIT(s)->id,
3241                                  "%s start-post operation timed out. Stopping.", UNIT(s)->id);
3242                 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
3243                 break;
3244
3245         case SERVICE_RELOAD:
3246                 log_warning_unit(UNIT(s)->id,
3247                                  "%s reload operation timed out. Stopping.", UNIT(s)->id);
3248                 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3249                 service_enter_running(s, SERVICE_SUCCESS);
3250                 break;
3251
3252         case SERVICE_STOP:
3253                 log_warning_unit(UNIT(s)->id,
3254                                  "%s stopping timed out. Terminating.", UNIT(s)->id);
3255                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3256                 break;
3257
3258         case SERVICE_STOP_SIGTERM:
3259                 if (s->kill_context.send_sigkill) {
3260                         log_warning_unit(UNIT(s)->id,
3261                                          "%s stop-sigterm timed out. Killing.", UNIT(s)->id);
3262                         service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3263                 } else {
3264                         log_warning_unit(UNIT(s)->id,
3265                                          "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s)->id);
3266                         service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3267                 }
3268
3269                 break;
3270
3271         case SERVICE_STOP_SIGKILL:
3272                 /* Uh, we sent a SIGKILL and it is still not gone?
3273                  * Must be something we cannot kill, so let's just be
3274                  * weirded out and continue */
3275
3276                 log_warning_unit(UNIT(s)->id,
3277                                  "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
3278                 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3279                 break;
3280
3281         case SERVICE_STOP_POST:
3282                 log_warning_unit(UNIT(s)->id,
3283                                  "%s stop-post timed out. Terminating.", UNIT(s)->id);
3284                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3285                 break;
3286
3287         case SERVICE_FINAL_SIGTERM:
3288                 if (s->kill_context.send_sigkill) {
3289                         log_warning_unit(UNIT(s)->id,
3290                                          "%s stop-final-sigterm timed out. Killing.", UNIT(s)->id);
3291                         service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3292                 } else {
3293                         log_warning_unit(UNIT(s)->id,
3294                                          "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.",
3295                                          UNIT(s)->id);
3296                         service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
3297                 }
3298
3299                 break;
3300
3301         case SERVICE_FINAL_SIGKILL:
3302                 log_warning_unit(UNIT(s)->id,
3303                                  "%s still around after final SIGKILL. Entering failed mode.", UNIT(s)->id);
3304                 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
3305                 break;
3306
3307         case SERVICE_AUTO_RESTART:
3308                 log_info_unit(UNIT(s)->id,
3309                               s->restart_usec > 0 ?
3310                               "%s holdoff time over, scheduling restart." :
3311                               "%s has no holdoff time, scheduling restart.",
3312                               UNIT(s)->id);
3313                 service_enter_restart(s);
3314                 break;
3315
3316         default:
3317                 assert_not_reached("Timeout at wrong time.");
3318         }
3319
3320         return 0;
3321 }
3322
3323 static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3324         Service *s = SERVICE(userdata);
3325
3326         assert(s);
3327         assert(source == s->watchdog_event_source);
3328
3329         log_error_unit(UNIT(s)->id, "%s watchdog timeout!", UNIT(s)->id);
3330         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
3331
3332         return 0;
3333 }
3334
3335 static void service_notify_message(Unit *u, pid_t pid, char **tags) {
3336         Service *s = SERVICE(u);
3337         const char *e;
3338         bool notify_dbus = false;
3339
3340         assert(u);
3341
3342         log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT" (%s...)",
3343                        u->id, pid, tags && *tags ? tags[0] : "(empty)");
3344
3345         if (s->notify_access == NOTIFY_NONE) {
3346                 log_warning_unit(u->id,
3347                                  "%s: Got notification message from PID "PID_FMT", but reception is disabled.",
3348                                  u->id, pid);
3349                 return;
3350         }
3351
3352         if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
3353
3354                 if (s->main_pid != 0)
3355                         log_warning_unit(u->id, "%s: Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT, u->id, pid, s->main_pid);
3356                 else
3357                         log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT", but reception only permitted for main PID which is currently not known", u->id, pid);
3358                 return;
3359         }
3360
3361         /* Interpret MAINPID= */
3362         if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3363             (s->state == SERVICE_START ||
3364              s->state == SERVICE_START_POST ||
3365              s->state == SERVICE_RUNNING ||
3366              s->state == SERVICE_RELOAD)) {
3367
3368                 if (parse_pid(e + 8, &pid) < 0)
3369                         log_warning_unit(u->id, "Failed to parse notification message %s", e);
3370                 else {
3371                         log_debug_unit(u->id, "%s: got %s", u->id, e);
3372                         service_set_main_pid(s, pid);
3373                         unit_watch_pid(UNIT(s), pid);
3374                         notify_dbus = true;
3375                 }
3376         }
3377
3378         /* Interpret READY= */
3379         if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START && strv_find(tags, "READY=1")) {
3380                 log_debug_unit(u->id, "%s: got READY=1", u->id);
3381                 service_enter_start_post(s);
3382                 notify_dbus = true;
3383         }
3384
3385         /* Interpret STATUS= */
3386         e = strv_find_prefix(tags, "STATUS=");
3387         if (e) {
3388                 char *t;
3389
3390                 if (e[7]) {
3391                         if (!utf8_is_valid(e+7)) {
3392                                 log_warning_unit(u->id, "Status message in notification is not UTF-8 clean.");
3393                                 return;
3394                         }
3395
3396                         log_debug_unit(u->id, "%s: got %s", u->id, e);
3397
3398                         t = strdup(e+7);
3399                         if (!t) {
3400                                 log_oom();
3401                                 return;
3402                         }
3403
3404                 } else
3405                         t = NULL;
3406
3407                 if (!streq_ptr(s->status_text, t)) {
3408                         free(s->status_text);
3409                         s->status_text = t;
3410                         notify_dbus = true;
3411                 } else
3412                         free(t);
3413         }
3414
3415         /* Interpet WATCHDOG= */
3416         if (strv_find(tags, "WATCHDOG=1")) {
3417                 log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
3418                 service_reset_watchdog(s);
3419         }
3420
3421         /* Notify clients about changed status or main pid */
3422         if (notify_dbus)
3423                 unit_add_to_dbus_queue(u);
3424 }
3425
3426 static int service_get_timeout(Unit *u, uint64_t *timeout) {
3427         Service *s = SERVICE(u);
3428         int r;
3429
3430         if (!s->timer_event_source)
3431                 return 0;
3432
3433         r = sd_event_source_get_time(s->timer_event_source, timeout);
3434         if (r < 0)
3435                 return r;
3436
3437         return 1;
3438 }
3439
3440 #ifdef HAVE_SYSV_COMPAT
3441
3442 static int service_enumerate(Manager *m) {
3443         char **p;
3444         unsigned i;
3445         _cleanup_closedir_ DIR *d = NULL;
3446         _cleanup_free_ char *path = NULL, *fpath = NULL, *name = NULL;
3447         Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
3448         _cleanup_set_free_ Set *shutdown_services = NULL;
3449         Unit *service;
3450         Iterator j;
3451         int r;
3452
3453         assert(m);
3454
3455         if (m->running_as != SYSTEMD_SYSTEM)
3456                 return 0;
3457
3458         STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
3459                 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
3460                         struct dirent *de;
3461
3462                         free(path);
3463                         path = strjoin(*p, "/", rcnd_table[i].path, NULL);
3464                         if (!path) {
3465                                 r = -ENOMEM;
3466                                 goto finish;
3467                         }
3468
3469                         if (d)
3470                                 closedir(d);
3471
3472                         d = opendir(path);
3473                         if (!d) {
3474                                 if (errno != ENOENT)
3475                                         log_warning("opendir(%s) failed: %m", path);
3476
3477                                 continue;
3478                         }
3479
3480                         while ((de = readdir(d))) {
3481                                 int a, b;
3482
3483                                 if (ignore_file(de->d_name))
3484                                         continue;
3485
3486                                 if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3487                                         continue;
3488
3489                                 if (strlen(de->d_name) < 4)
3490                                         continue;
3491
3492                                 a = undecchar(de->d_name[1]);
3493                                 b = undecchar(de->d_name[2]);
3494
3495                                 if (a < 0 || b < 0)
3496                                         continue;
3497
3498                                 free(fpath);
3499                                 fpath = strjoin(path, "/", de->d_name, NULL);
3500                                 if (!fpath) {
3501                                         r = -ENOMEM;
3502                                         goto finish;
3503                                 }
3504
3505                                 if (access(fpath, X_OK) < 0) {
3506
3507                                         if (errno != ENOENT)
3508                                                 log_warning("access() failed on %s: %m", fpath);
3509
3510                                         continue;
3511                                 }
3512
3513                                 free(name);
3514                                 name = sysv_translate_name(de->d_name + 3);
3515                                 if (!name) {
3516                                         r = log_oom();
3517                                         goto finish;
3518                                 }
3519
3520                                 r = manager_load_unit_prepare(m, name, NULL, NULL, &service);
3521                                 if (r < 0) {
3522                                         log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3523                                         continue;
3524                                 }
3525
3526                                 if (de->d_name[0] == 'S')  {
3527
3528                                         if (rcnd_table[i].type == RUNLEVEL_UP) {
3529                                                 SERVICE(service)->sysv_start_priority_from_rcnd =
3530                                                         MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
3531
3532                                                 SERVICE(service)->sysv_enabled = true;
3533                                         }
3534
3535                                         r = set_ensure_allocated(&runlevel_services[i],
3536                                                                  trivial_hash_func, trivial_compare_func);
3537                                         if (r < 0)
3538                                                 goto finish;
3539
3540                                         r = set_put(runlevel_services[i], service);
3541                                         if (r < 0)
3542                                                 goto finish;
3543
3544                                 } else if (de->d_name[0] == 'K' &&
3545                                            (rcnd_table[i].type == RUNLEVEL_DOWN)) {
3546
3547                                         r = set_ensure_allocated(&shutdown_services,
3548                                                                  trivial_hash_func, trivial_compare_func);
3549                                         if (r < 0)
3550                                                 goto finish;
3551
3552                                         r = set_put(shutdown_services, service);
3553                                         if (r < 0)
3554                                                 goto finish;
3555                                 }
3556                         }
3557                 }
3558
3559         /* Now we loaded all stubs and are aware of the lowest
3560         start-up priority for all services, not let's actually load
3561         the services, this will also tell us which services are
3562         actually native now */
3563         manager_dispatch_load_queue(m);
3564
3565         /* If this is a native service, rely on native ways to pull in
3566          * a service, don't pull it in via sysv rcN.d links. */
3567         for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
3568                 SET_FOREACH(service, runlevel_services[i], j) {
3569                         service = unit_follow_merge(service);
3570
3571                         if (service->fragment_path)
3572                                 continue;
3573
3574                         r = unit_add_two_dependencies_by_name_inverse(
3575                                 service, UNIT_AFTER, UNIT_WANTS,
3576                                 rcnd_table[i].target, NULL, true);
3577                         if (r < 0)
3578                                 goto finish;
3579                 }
3580
3581         /* We honour K links only for halt/reboot. For the normal
3582          * runlevels we assume the stop jobs will be implicitly added
3583          * by the core logic. Also, we don't really distinguish here
3584          * between the runlevels 0 and 6 and just add them to the
3585          * special shutdown target. */
3586         SET_FOREACH(service, shutdown_services, j) {
3587                 service = unit_follow_merge(service);
3588
3589                 if (service->fragment_path)
3590                         continue;
3591
3592                 r = unit_add_two_dependencies_by_name(
3593                         service, UNIT_BEFORE, UNIT_CONFLICTS,
3594                         SPECIAL_SHUTDOWN_TARGET, NULL, true);
3595                 if (r < 0)
3596                         goto finish;
3597         }
3598
3599         r = 0;
3600
3601 finish:
3602
3603         for (i = 0; i < ELEMENTSOF(rcnd_table); i++)
3604                 set_free(runlevel_services[i]);
3605
3606         return r;
3607 }
3608 #endif
3609
3610 static void service_bus_name_owner_change(
3611                 Unit *u,
3612                 const char *name,
3613                 const char *old_owner,
3614                 const char *new_owner) {
3615
3616         Service *s = SERVICE(u);
3617         int r;
3618
3619         assert(s);
3620         assert(name);
3621
3622         assert(streq(s->bus_name, name));
3623         assert(old_owner || new_owner);
3624
3625         if (old_owner && new_owner)
3626                 log_debug_unit(u->id,
3627                                "%s's D-Bus name %s changed owner from %s to %s",
3628                                u->id, name, old_owner, new_owner);
3629         else if (old_owner)
3630                 log_debug_unit(u->id,
3631                                "%s's D-Bus name %s no longer registered by %s",
3632                                u->id, name, old_owner);
3633         else
3634                 log_debug_unit(u->id,
3635                                "%s's D-Bus name %s now registered by %s",
3636                                u->id, name, new_owner);
3637
3638         s->bus_name_good = !!new_owner;
3639
3640         if (s->type == SERVICE_DBUS) {
3641
3642                 /* service_enter_running() will figure out what to
3643                  * do */
3644                 if (s->state == SERVICE_RUNNING)
3645                         service_enter_running(s, SERVICE_SUCCESS);
3646                 else if (s->state == SERVICE_START && new_owner)
3647                         service_enter_start_post(s);
3648
3649         } else if (new_owner &&
3650                    s->main_pid <= 0 &&
3651                    (s->state == SERVICE_START ||
3652                     s->state == SERVICE_START_POST ||
3653                     s->state == SERVICE_RUNNING ||
3654                     s->state == SERVICE_RELOAD)) {
3655
3656                 _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
3657                 pid_t pid;
3658
3659                 /* Try to acquire PID from bus service */
3660
3661                 r = sd_bus_get_owner(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
3662                 if (r >= 0)
3663                         r = sd_bus_creds_get_pid(creds, &pid);
3664                 if (r >= 0) {
3665                         log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
3666
3667                         service_set_main_pid(s, pid);
3668                         unit_watch_pid(UNIT(s), pid);
3669                 }
3670         }
3671 }
3672
3673 int service_set_socket_fd(Service *s, int fd, Socket *sock) {
3674         _cleanup_free_ char *peer = NULL;
3675         int r;
3676
3677         assert(s);
3678         assert(fd >= 0);
3679
3680         /* This is called by the socket code when instantiating a new
3681          * service for a stream socket and the socket needs to be
3682          * configured. */
3683
3684         if (UNIT(s)->load_state != UNIT_LOADED)
3685                 return -EINVAL;
3686
3687         if (s->socket_fd >= 0)
3688                 return -EBUSY;
3689
3690         if (s->state != SERVICE_DEAD)
3691                 return -EAGAIN;
3692
3693         if (getpeername_pretty(fd, &peer) >= 0) {
3694
3695                 if (UNIT(s)->description) {
3696                         _cleanup_free_ char *a;
3697
3698                         a = strjoin(UNIT(s)->description, " (", peer, ")", NULL);
3699                         if (!a)
3700                                 return -ENOMEM;
3701
3702                         r = unit_set_description(UNIT(s), a);
3703                 }  else
3704                         r = unit_set_description(UNIT(s), peer);
3705
3706                 if (r < 0)
3707                         return r;
3708         }
3709
3710         s->socket_fd = fd;
3711
3712         unit_ref_set(&s->accept_socket, UNIT(sock));
3713
3714         return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
3715 }
3716
3717 static void service_reset_failed(Unit *u) {
3718         Service *s = SERVICE(u);
3719
3720         assert(s);
3721
3722         if (s->state == SERVICE_FAILED)
3723                 service_set_state(s, SERVICE_DEAD);
3724
3725         s->result = SERVICE_SUCCESS;
3726         s->reload_result = SERVICE_SUCCESS;
3727
3728         RATELIMIT_RESET(s->start_limit);
3729 }
3730
3731 static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
3732         Service *s = SERVICE(u);
3733
3734         return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
3735 }
3736
3737 static const char* const service_state_table[_SERVICE_STATE_MAX] = {
3738         [SERVICE_DEAD] = "dead",
3739         [SERVICE_START_PRE] = "start-pre",
3740         [SERVICE_START] = "start",
3741         [SERVICE_START_POST] = "start-post",
3742         [SERVICE_RUNNING] = "running",
3743         [SERVICE_EXITED] = "exited",
3744         [SERVICE_RELOAD] = "reload",
3745         [SERVICE_STOP] = "stop",
3746         [SERVICE_STOP_SIGTERM] = "stop-sigterm",
3747         [SERVICE_STOP_SIGKILL] = "stop-sigkill",
3748         [SERVICE_STOP_POST] = "stop-post",
3749         [SERVICE_FINAL_SIGTERM] = "final-sigterm",
3750         [SERVICE_FINAL_SIGKILL] = "final-sigkill",
3751         [SERVICE_FAILED] = "failed",
3752         [SERVICE_AUTO_RESTART] = "auto-restart",
3753 };
3754
3755 DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
3756
3757 static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
3758         [SERVICE_RESTART_NO] = "no",
3759         [SERVICE_RESTART_ON_SUCCESS] = "on-success",
3760         [SERVICE_RESTART_ON_FAILURE] = "on-failure",
3761         [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
3762         [SERVICE_RESTART_ON_ABORT] = "on-abort",
3763         [SERVICE_RESTART_ALWAYS] = "always"
3764 };
3765
3766 DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3767
3768 static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
3769         [SERVICE_SIMPLE] = "simple",
3770         [SERVICE_FORKING] = "forking",
3771         [SERVICE_ONESHOT] = "oneshot",
3772         [SERVICE_DBUS] = "dbus",
3773         [SERVICE_NOTIFY] = "notify",
3774         [SERVICE_IDLE] = "idle"
3775 };
3776
3777 DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3778
3779 static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
3780         [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3781         [SERVICE_EXEC_START] = "ExecStart",
3782         [SERVICE_EXEC_START_POST] = "ExecStartPost",
3783         [SERVICE_EXEC_RELOAD] = "ExecReload",
3784         [SERVICE_EXEC_STOP] = "ExecStop",
3785         [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3786 };
3787
3788 DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3789
3790 static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
3791         [NOTIFY_NONE] = "none",
3792         [NOTIFY_MAIN] = "main",
3793         [NOTIFY_ALL] = "all"
3794 };
3795
3796 DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
3797
3798 static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3799         [SERVICE_SUCCESS] = "success",
3800         [SERVICE_FAILURE_RESOURCES] = "resources",
3801         [SERVICE_FAILURE_TIMEOUT] = "timeout",
3802         [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3803         [SERVICE_FAILURE_SIGNAL] = "signal",
3804         [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
3805         [SERVICE_FAILURE_WATCHDOG] = "watchdog",
3806         [SERVICE_FAILURE_START_LIMIT] = "start-limit"
3807 };
3808
3809 DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3810
3811 static const char* const start_limit_action_table[_SERVICE_START_LIMIT_MAX] = {
3812         [SERVICE_START_LIMIT_NONE] = "none",
3813         [SERVICE_START_LIMIT_REBOOT] = "reboot",
3814         [SERVICE_START_LIMIT_REBOOT_FORCE] = "reboot-force",
3815         [SERVICE_START_LIMIT_REBOOT_IMMEDIATE] = "reboot-immediate"
3816 };
3817 DEFINE_STRING_TABLE_LOOKUP(start_limit_action, StartLimitAction);
3818
3819 const UnitVTable service_vtable = {
3820         .object_size = sizeof(Service),
3821         .exec_context_offset = offsetof(Service, exec_context),
3822         .cgroup_context_offset = offsetof(Service, cgroup_context),
3823         .kill_context_offset = offsetof(Service, kill_context),
3824         .exec_runtime_offset = offsetof(Service, exec_runtime),
3825
3826         .sections =
3827                 "Unit\0"
3828                 "Service\0"
3829                 "Install\0",
3830         .private_section = "Service",
3831
3832         .init = service_init,
3833         .done = service_done,
3834         .load = service_load,
3835
3836         .coldplug = service_coldplug,
3837
3838         .dump = service_dump,
3839
3840         .start = service_start,
3841         .stop = service_stop,
3842         .reload = service_reload,
3843
3844         .can_reload = service_can_reload,
3845
3846         .kill = service_kill,
3847
3848         .serialize = service_serialize,
3849         .deserialize_item = service_deserialize_item,
3850
3851         .active_state = service_active_state,
3852         .sub_state_to_string = service_sub_state_to_string,
3853
3854         .check_gc = service_check_gc,
3855         .check_snapshot = service_check_snapshot,
3856
3857         .sigchld_event = service_sigchld_event,
3858
3859         .reset_failed = service_reset_failed,
3860
3861         .notify_cgroup_empty = service_notify_cgroup_empty_event,
3862         .notify_message = service_notify_message,
3863
3864         .bus_name_owner_change = service_bus_name_owner_change,
3865
3866         .bus_interface = "org.freedesktop.systemd1.Service",
3867         .bus_vtable = bus_service_vtable,
3868         .bus_set_property = bus_service_set_property,
3869         .bus_commit_properties = bus_service_commit_properties,
3870
3871         .get_timeout = service_get_timeout,
3872
3873 #ifdef HAVE_SYSV_COMPAT
3874         .enumerate = service_enumerate,
3875 #endif
3876
3877         .can_transient = true,
3878
3879         .status_message_formats = {
3880                 .starting_stopping = {
3881                         [0] = "Starting %s...",
3882                         [1] = "Stopping %s...",
3883                 },
3884                 .finished_start_job = {
3885                         [JOB_DONE]       = "Started %s.",
3886                         [JOB_FAILED]     = "Failed to start %s.",
3887                         [JOB_DEPENDENCY] = "Dependency failed for %s.",
3888                         [JOB_TIMEOUT]    = "Timed out starting %s.",
3889                 },
3890                 .finished_stop_job = {
3891                         [JOB_DONE]       = "Stopped %s.",
3892                         [JOB_FAILED]     = "Stopped (with error) %s.",
3893                         [JOB_TIMEOUT]    = "Timed out stopping %s.",
3894                 },
3895         },
3896 };