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