chiark / gitweb /
322193879320d982f2044f3f673f55458b6abb9b
[elogind.git] / src / core / service.c
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 /***
4   This file is part of systemd.
5
6   Copyright 2010 Lennart Poettering
7
8   systemd is free software; you can redistribute it and/or modify it
9   under the terms of the GNU Lesser General Public License as published by
10   the Free Software Foundation; either version 2.1 of the License, or
11   (at your option) any later version.
12
13   systemd is distributed in the hope that it will be useful, but
14   WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16   Lesser General Public License for more details.
17
18   You should have received a copy of the GNU Lesser General Public License
19   along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 ***/
21
22 #include <errno.h>
23 #include <signal.h>
24 #include <dirent.h>
25 #include <unistd.h>
26 #include <sys/reboot.h>
27 #include <linux/reboot.h>
28 #include <sys/syscall.h>
29
30 #include "async.h"
31 #include "manager.h"
32 #include "unit.h"
33 #include "service.h"
34 #include "load-fragment.h"
35 #include "load-dropin.h"
36 #include "log.h"
37 #include "strv.h"
38 #include "unit-name.h"
39 #include "unit-printf.h"
40 #include "dbus-service.h"
41 #include "special.h"
42 #include "exit-status.h"
43 #include "def.h"
44 #include "path-util.h"
45 #include "util.h"
46 #include "utf8.h"
47 #include "env-util.h"
48 #include "fileio.h"
49 #include "bus-error.h"
50 #include "bus-util.h"
51
52 static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
53         [SERVICE_DEAD] = UNIT_INACTIVE,
54         [SERVICE_START_PRE] = UNIT_ACTIVATING,
55         [SERVICE_START] = UNIT_ACTIVATING,
56         [SERVICE_START_POST] = UNIT_ACTIVATING,
57         [SERVICE_RUNNING] = UNIT_ACTIVE,
58         [SERVICE_EXITED] = UNIT_ACTIVE,
59         [SERVICE_RELOAD] = UNIT_RELOADING,
60         [SERVICE_STOP] = UNIT_DEACTIVATING,
61         [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
62         [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
63         [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
64         [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
65         [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
66         [SERVICE_FAILED] = UNIT_FAILED,
67         [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
68 };
69
70 /* For Type=idle we never want to delay any other jobs, hence we
71  * consider idle jobs active as soon as we start working on them */
72 static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] = {
73         [SERVICE_DEAD] = UNIT_INACTIVE,
74         [SERVICE_START_PRE] = UNIT_ACTIVE,
75         [SERVICE_START] = UNIT_ACTIVE,
76         [SERVICE_START_POST] = UNIT_ACTIVE,
77         [SERVICE_RUNNING] = UNIT_ACTIVE,
78         [SERVICE_EXITED] = UNIT_ACTIVE,
79         [SERVICE_RELOAD] = UNIT_RELOADING,
80         [SERVICE_STOP] = UNIT_DEACTIVATING,
81         [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
82         [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
83         [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
84         [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
85         [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
86         [SERVICE_FAILED] = UNIT_FAILED,
87         [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
88 };
89
90 static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata);
91 static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
92 static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata);
93
94 static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
95 static void service_enter_reload_by_notify(Service *s);
96
97 static void service_init(Unit *u) {
98         Service *s = SERVICE(u);
99
100         assert(u);
101         assert(u->load_state == UNIT_STUB);
102
103         s->timeout_start_usec = u->manager->default_timeout_start_usec;
104         s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
105         s->restart_usec = u->manager->default_restart_usec;
106         s->type = _SERVICE_TYPE_INVALID;
107         s->socket_fd = -1;
108         s->guess_main_pid = true;
109
110         RATELIMIT_INIT(s->start_limit, u->manager->default_start_limit_interval, u->manager->default_start_limit_burst);
111
112         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
113 }
114
115 static void service_unwatch_control_pid(Service *s) {
116         assert(s);
117
118         if (s->control_pid <= 0)
119                 return;
120
121         unit_unwatch_pid(UNIT(s), s->control_pid);
122         s->control_pid = 0;
123 }
124
125 static void service_unwatch_main_pid(Service *s) {
126         assert(s);
127
128         if (s->main_pid <= 0)
129                 return;
130
131         unit_unwatch_pid(UNIT(s), s->main_pid);
132         s->main_pid = 0;
133 }
134
135 static void service_unwatch_pid_file(Service *s) {
136         if (!s->pid_file_pathspec)
137                 return;
138
139         log_debug_unit(UNIT(s)->id, "Stopping watch for %s's PID file %s", UNIT(s)->id, s->pid_file_pathspec->path);
140         path_spec_unwatch(s->pid_file_pathspec);
141         path_spec_done(s->pid_file_pathspec);
142         free(s->pid_file_pathspec);
143         s->pid_file_pathspec = NULL;
144 }
145
146 static int service_set_main_pid(Service *s, pid_t pid) {
147         pid_t ppid;
148
149         assert(s);
150
151         if (pid <= 1)
152                 return -EINVAL;
153
154         if (pid == getpid())
155                 return -EINVAL;
156
157         if (s->main_pid == pid && s->main_pid_known)
158                 return 0;
159
160         if (s->main_pid != pid) {
161                 service_unwatch_main_pid(s);
162                 exec_status_start(&s->main_exec_status, pid);
163         }
164
165         s->main_pid = pid;
166         s->main_pid_known = true;
167
168         if (get_parent_of_pid(pid, &ppid) >= 0 && ppid != getpid()) {
169                 log_warning_unit(UNIT(s)->id, "%s: Supervising process "PID_FMT" which is not our child. We'll most likely not notice when it exits.", UNIT(s)->id, pid);
170                 s->main_pid_alien = true;
171         } else
172                 s->main_pid_alien = false;
173
174         return 0;
175 }
176
177 static void service_close_socket_fd(Service *s) {
178         assert(s);
179
180         s->socket_fd = asynchronous_close(s->socket_fd);
181 }
182
183 static void service_connection_unref(Service *s) {
184         assert(s);
185
186         if (!UNIT_ISSET(s->accept_socket))
187                 return;
188
189         socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
190         unit_ref_unset(&s->accept_socket);
191 }
192
193 static void service_stop_watchdog(Service *s) {
194         assert(s);
195
196         s->watchdog_event_source = sd_event_source_unref(s->watchdog_event_source);
197         s->watchdog_timestamp = DUAL_TIMESTAMP_NULL;
198 }
199
200 static void service_start_watchdog(Service *s) {
201         int r;
202
203         assert(s);
204
205         if (s->watchdog_usec <= 0)
206                 return;
207
208         if (s->watchdog_event_source) {
209                 r = sd_event_source_set_time(s->watchdog_event_source, s->watchdog_timestamp.monotonic + s->watchdog_usec);
210                 if (r < 0) {
211                         log_warning_unit(UNIT(s)->id, "%s failed to reset watchdog timer: %s", UNIT(s)->id, strerror(-r));
212                         return;
213                 }
214
215                 r = sd_event_source_set_enabled(s->watchdog_event_source, SD_EVENT_ONESHOT);
216         } else {
217                 r = sd_event_add_time(
218                                 UNIT(s)->manager->event,
219                                 &s->watchdog_event_source,
220                                 CLOCK_MONOTONIC,
221                                 s->watchdog_timestamp.monotonic + s->watchdog_usec, 0,
222                                 service_dispatch_watchdog, s);
223                 if (r < 0) {
224                         log_warning_unit(UNIT(s)->id, "%s failed to add watchdog timer: %s", UNIT(s)->id, strerror(-r));
225                         return;
226                 }
227
228                 /* Let's process everything else which might be a sign
229                  * of living before we consider a service died. */
230                 r = sd_event_source_set_priority(s->watchdog_event_source, SD_EVENT_PRIORITY_IDLE);
231         }
232
233         if (r < 0)
234                 log_warning_unit(UNIT(s)->id, "%s failed to install watchdog timer: %s", UNIT(s)->id, strerror(-r));
235 }
236
237 static void service_reset_watchdog(Service *s) {
238         assert(s);
239
240         dual_timestamp_get(&s->watchdog_timestamp);
241         service_start_watchdog(s);
242 }
243
244 static void service_done(Unit *u) {
245         Service *s = SERVICE(u);
246
247         assert(s);
248
249         free(s->pid_file);
250         s->pid_file = NULL;
251
252         free(s->status_text);
253         s->status_text = NULL;
254
255         free(s->reboot_arg);
256         s->reboot_arg = NULL;
257
258         s->exec_runtime = exec_runtime_unref(s->exec_runtime);
259         exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
260         s->control_command = NULL;
261         s->main_command = NULL;
262
263         exit_status_set_free(&s->restart_prevent_status);
264         exit_status_set_free(&s->restart_force_status);
265         exit_status_set_free(&s->success_status);
266
267         /* This will leak a process, but at least no memory or any of
268          * our resources */
269         service_unwatch_main_pid(s);
270         service_unwatch_control_pid(s);
271         service_unwatch_pid_file(s);
272
273         if (s->bus_name)  {
274                 unit_unwatch_bus_name(u, s->bus_name);
275                 free(s->bus_name);
276                 s->bus_name = NULL;
277         }
278
279         service_close_socket_fd(s);
280         service_connection_unref(s);
281
282         unit_ref_unset(&s->accept_socket);
283
284         service_stop_watchdog(s);
285
286         s->timer_event_source = sd_event_source_unref(s->timer_event_source);
287 }
288
289 static int service_arm_timer(Service *s, usec_t usec) {
290         int r;
291
292         assert(s);
293
294         if (s->timer_event_source) {
295                 r = sd_event_source_set_time(s->timer_event_source, now(CLOCK_MONOTONIC) + usec);
296                 if (r < 0)
297                         return r;
298
299                 return sd_event_source_set_enabled(s->timer_event_source, SD_EVENT_ONESHOT);
300         }
301
302         return sd_event_add_time(
303                         UNIT(s)->manager->event,
304                         &s->timer_event_source,
305                         CLOCK_MONOTONIC,
306                         now(CLOCK_MONOTONIC) + usec, 0,
307                         service_dispatch_timer, s);
308 }
309
310 static int service_verify(Service *s) {
311         assert(s);
312
313         if (UNIT(s)->load_state != UNIT_LOADED)
314                 return 0;
315
316         if (!s->exec_command[SERVICE_EXEC_START]) {
317                 log_error_unit(UNIT(s)->id, "%s lacks ExecStart setting. Refusing.", UNIT(s)->id);
318                 return -EINVAL;
319         }
320
321         if (s->type != SERVICE_ONESHOT &&
322             s->exec_command[SERVICE_EXEC_START]->command_next) {
323                 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);
324                 return -EINVAL;
325         }
326
327         if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
328                 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);
329                 return -EINVAL;
330         }
331
332         if (s->type == SERVICE_ONESHOT && !exit_status_set_is_empty(&s->restart_force_status)) {
333                 log_error_unit(UNIT(s)->id, "%s has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
334                 return -EINVAL;
335         }
336
337         if (s->type == SERVICE_DBUS && !s->bus_name) {
338                 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);
339                 return -EINVAL;
340         }
341
342         if (s->bus_name && s->type != SERVICE_DBUS)
343                 log_warning_unit(UNIT(s)->id, "%s has a D-Bus service name specified, but is not of type dbus. Ignoring.", UNIT(s)->id);
344
345         if (s->exec_context.pam_name && !(s->kill_context.kill_mode == KILL_CONTROL_GROUP || s->kill_context.kill_mode == KILL_MIXED)) {
346                 log_error_unit(UNIT(s)->id, "%s has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.", UNIT(s)->id);
347                 return -EINVAL;
348         }
349
350         return 0;
351 }
352
353 static int service_add_default_dependencies(Service *s) {
354         int r;
355
356         assert(s);
357
358         /* Add a number of automatic dependencies useful for the
359          * majority of services. */
360
361         /* First, pull in base system */
362         r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_BASIC_TARGET, NULL, true);
363         if (r < 0)
364                 return r;
365
366         /* Second, activate normal shutdown */
367         r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
368         return r;
369 }
370
371 static void service_fix_output(Service *s) {
372         assert(s);
373
374         /* If nothing has been explicitly configured, patch default
375          * output in. If input is socket/tty we avoid this however,
376          * since in that case we want output to default to the same
377          * place as we read input from. */
378
379         if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
380             s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
381             s->exec_context.std_input == EXEC_INPUT_NULL)
382                 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
383
384         if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
385             s->exec_context.std_input == EXEC_INPUT_NULL)
386                 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
387 }
388
389 static int service_load(Unit *u) {
390         Service *s = SERVICE(u);
391         int r;
392
393         assert(s);
394
395         /* Load a .service file */
396         r = unit_load_fragment(u);
397         if (r < 0)
398                 return r;
399
400         /* Still nothing found? Then let's give up */
401         if (u->load_state == UNIT_STUB)
402                 return -ENOENT;
403
404         /* This is a new unit? Then let's add in some extras */
405         if (u->load_state == UNIT_LOADED) {
406
407                 /* We were able to load something, then let's add in
408                  * the dropin directories. */
409                 r = unit_load_dropin(u);
410                 if (r < 0)
411                         return r;
412
413                 if (s->type == _SERVICE_TYPE_INVALID)
414                         s->type = s->bus_name ? SERVICE_DBUS : SERVICE_SIMPLE;
415
416                 /* Oneshot services have disabled start timeout by default */
417                 if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
418                         s->timeout_start_usec = 0;
419
420                 service_fix_output(s);
421
422                 r = unit_patch_contexts(u);
423                 if (r < 0)
424                         return r;
425
426                 r = unit_add_exec_dependencies(u, &s->exec_context);
427                 if (r < 0)
428                         return r;
429
430                 r = unit_add_default_slice(u, &s->cgroup_context);
431                 if (r < 0)
432                         return r;
433
434                 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
435                         s->notify_access = NOTIFY_MAIN;
436
437                 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
438                         s->notify_access = NOTIFY_MAIN;
439
440                 if (s->bus_name) {
441                         r = unit_watch_bus_name(u, s->bus_name);
442                         if (r < 0)
443                                 return r;
444                 }
445
446                 if (u->default_dependencies) {
447                         r = service_add_default_dependencies(s);
448                         if (r < 0)
449
450                                 return r;
451                 }
452         }
453
454         return service_verify(s);
455 }
456
457 static void service_dump(Unit *u, FILE *f, const char *prefix) {
458         ServiceExecCommand c;
459         Service *s = SERVICE(u);
460         const char *prefix2;
461
462         assert(s);
463
464         prefix = strempty(prefix);
465         prefix2 = strappenda(prefix, "\t");
466
467         fprintf(f,
468                 "%sService State: %s\n"
469                 "%sResult: %s\n"
470                 "%sReload Result: %s\n"
471                 "%sPermissionsStartOnly: %s\n"
472                 "%sRootDirectoryStartOnly: %s\n"
473                 "%sRemainAfterExit: %s\n"
474                 "%sGuessMainPID: %s\n"
475                 "%sType: %s\n"
476                 "%sRestart: %s\n"
477                 "%sNotifyAccess: %s\n"
478                 "%sNotifyState: %s\n",
479                 prefix, service_state_to_string(s->state),
480                 prefix, service_result_to_string(s->result),
481                 prefix, service_result_to_string(s->reload_result),
482                 prefix, yes_no(s->permissions_start_only),
483                 prefix, yes_no(s->root_directory_start_only),
484                 prefix, yes_no(s->remain_after_exit),
485                 prefix, yes_no(s->guess_main_pid),
486                 prefix, service_type_to_string(s->type),
487                 prefix, service_restart_to_string(s->restart),
488                 prefix, notify_access_to_string(s->notify_access),
489                 prefix, notify_state_to_string(s->notify_state));
490
491         if (s->control_pid > 0)
492                 fprintf(f,
493                         "%sControl PID: "PID_FMT"\n",
494                         prefix, s->control_pid);
495
496         if (s->main_pid > 0)
497                 fprintf(f,
498                         "%sMain PID: "PID_FMT"\n"
499                         "%sMain PID Known: %s\n"
500                         "%sMain PID Alien: %s\n",
501                         prefix, s->main_pid,
502                         prefix, yes_no(s->main_pid_known),
503                         prefix, yes_no(s->main_pid_alien));
504
505         if (s->pid_file)
506                 fprintf(f,
507                         "%sPIDFile: %s\n",
508                         prefix, s->pid_file);
509
510         if (s->bus_name)
511                 fprintf(f,
512                         "%sBusName: %s\n"
513                         "%sBus Name Good: %s\n",
514                         prefix, s->bus_name,
515                         prefix, yes_no(s->bus_name_good));
516
517         kill_context_dump(&s->kill_context, f, prefix);
518         exec_context_dump(&s->exec_context, f, prefix);
519
520         for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
521
522                 if (!s->exec_command[c])
523                         continue;
524
525                 fprintf(f, "%s-> %s:\n",
526                         prefix, service_exec_command_to_string(c));
527
528                 exec_command_dump_list(s->exec_command[c], f, prefix2);
529         }
530
531 #ifdef HAVE_SYSV_COMPAT
532         if (s->sysv_start_priority >= 0)
533                 fprintf(f,
534                         "%sSysVStartPriority: %i\n",
535                         prefix, s->sysv_start_priority);
536 #endif
537
538         if (s->status_text)
539                 fprintf(f, "%sStatus Text: %s\n",
540                         prefix, s->status_text);
541 }
542
543 static int service_load_pid_file(Service *s, bool may_warn) {
544         _cleanup_free_ char *k = NULL;
545         int r;
546         pid_t pid;
547
548         assert(s);
549
550         if (!s->pid_file)
551                 return -ENOENT;
552
553         r = read_one_line_file(s->pid_file, &k);
554         if (r < 0) {
555                 if (may_warn)
556                         log_info_unit(UNIT(s)->id, "PID file %s not readable (yet?) after %s.", s->pid_file, service_state_to_string(s->state));
557                 return r;
558         }
559
560         r = parse_pid(k, &pid);
561         if (r < 0) {
562                 if (may_warn)
563                         log_info_unit(UNIT(s)->id, "Failed to read PID from file %s: %s", s->pid_file, strerror(-r));
564                 return r;
565         }
566
567         if (!pid_is_alive(pid)) {
568                 if (may_warn)
569                         log_info_unit(UNIT(s)->id, "PID "PID_FMT" read from file %s does not exist or is a zombie.", pid, s->pid_file);
570                 return -ESRCH;
571         }
572
573         if (s->main_pid_known) {
574                 if (pid == s->main_pid)
575                         return 0;
576
577                 log_debug_unit(UNIT(s)->id, "Main PID changing: "PID_FMT" -> "PID_FMT, s->main_pid, pid);
578
579                 service_unwatch_main_pid(s);
580                 s->main_pid_known = false;
581         } else
582                 log_debug_unit(UNIT(s)->id, "Main PID loaded: "PID_FMT, pid);
583
584         r = service_set_main_pid(s, pid);
585         if (r < 0)
586                 return r;
587
588         r = unit_watch_pid(UNIT(s), pid);
589         if (r < 0) {
590                 /* FIXME: we need to do something here */
591                 log_warning_unit(UNIT(s)->id, "Failed to watch PID "PID_FMT" from service %s", pid, UNIT(s)->id);
592                 return r;
593         }
594
595         return 0;
596 }
597
598 static int service_search_main_pid(Service *s) {
599         pid_t pid;
600         int r;
601
602         assert(s);
603
604         /* If we know it anyway, don't ever fallback to unreliable
605          * heuristics */
606         if (s->main_pid_known)
607                 return 0;
608
609         if (!s->guess_main_pid)
610                 return 0;
611
612         assert(s->main_pid <= 0);
613
614         pid = unit_search_main_pid(UNIT(s));
615         if (pid <= 0)
616                 return -ENOENT;
617
618         log_debug_unit(UNIT(s)->id, "Main PID guessed: "PID_FMT, pid);
619         r = service_set_main_pid(s, pid);
620         if (r < 0)
621                 return r;
622
623         r = unit_watch_pid(UNIT(s), pid);
624         if (r < 0) {
625                 /* FIXME: we need to do something here */
626                 log_warning_unit(UNIT(s)->id, "Failed to watch PID "PID_FMT" from service %s", pid, UNIT(s)->id);
627                 return r;
628         }
629
630         return 0;
631 }
632
633 static void service_set_state(Service *s, ServiceState state) {
634         ServiceState old_state;
635         const UnitActiveState *table;
636
637         assert(s);
638
639         table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
640
641         old_state = s->state;
642         s->state = state;
643
644         service_unwatch_pid_file(s);
645
646         if (!IN_SET(state,
647                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
648                     SERVICE_RELOAD,
649                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
650                     SERVICE_STOP_POST,
651                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
652                     SERVICE_AUTO_RESTART))
653                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
654
655         if (!IN_SET(state,
656                     SERVICE_START, SERVICE_START_POST,
657                     SERVICE_RUNNING, SERVICE_RELOAD,
658                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
659                     SERVICE_STOP_POST,
660                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
661                 service_unwatch_main_pid(s);
662                 s->main_command = NULL;
663         }
664
665         if (!IN_SET(state,
666                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
667                     SERVICE_RELOAD,
668                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
669                     SERVICE_STOP_POST,
670                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
671                 service_unwatch_control_pid(s);
672                 s->control_command = NULL;
673                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
674         }
675
676         if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
677                 unit_unwatch_all_pids(UNIT(s));
678
679         if (!IN_SET(state,
680                     SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
681                     SERVICE_RUNNING, SERVICE_RELOAD,
682                     SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
683                     SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
684             !(state == SERVICE_DEAD && UNIT(s)->job)) {
685                 service_close_socket_fd(s);
686                 service_connection_unref(s);
687         }
688
689         if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
690                 service_stop_watchdog(s);
691
692         /* For the inactive states unit_notify() will trim the cgroup,
693          * but for exit we have to do that ourselves... */
694         if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
695                 unit_destroy_cgroup(UNIT(s));
696
697         /* For remain_after_exit services, let's see if we can "release" the
698          * hold on the console, since unit_notify() only does that in case of
699          * change of state */
700         if (state == SERVICE_EXITED &&
701             s->remain_after_exit &&
702             UNIT(s)->manager->n_on_console > 0) {
703
704                 ExecContext *ec;
705
706                 ec = unit_get_exec_context(UNIT(s));
707                 if (ec && exec_context_may_touch_console(ec)) {
708                         Manager *m = UNIT(s)->manager;
709
710                         m->n_on_console --;
711                         if (m->n_on_console == 0)
712                                 /* unset no_console_output flag, since the console is free */
713                                 m->no_console_output = false;
714                 }
715         }
716
717         if (old_state != state)
718                 log_debug_unit(UNIT(s)->id, "%s changed %s -> %s", UNIT(s)->id, service_state_to_string(old_state), service_state_to_string(state));
719
720         unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
721         s->reload_result = SERVICE_SUCCESS;
722 }
723
724 static int service_coldplug(Unit *u) {
725         Service *s = SERVICE(u);
726         int r;
727
728         assert(s);
729         assert(s->state == SERVICE_DEAD);
730
731         if (s->deserialized_state != s->state) {
732
733                 if (IN_SET(s->deserialized_state,
734                            SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
735                            SERVICE_RELOAD,
736                            SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
737                            SERVICE_STOP_POST,
738                            SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
739
740                         usec_t k;
741
742                         k = IN_SET(s->deserialized_state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec;
743
744                         /* For the start/stop timeouts 0 means off */
745                         if (k > 0) {
746                                 r = service_arm_timer(s, k);
747                                 if (r < 0)
748                                         return r;
749                         }
750                 }
751
752                 if (s->deserialized_state == SERVICE_AUTO_RESTART) {
753
754                         /* The restart timeouts 0 means immediately */
755                         r = service_arm_timer(s, s->restart_usec);
756                         if (r < 0)
757                                 return r;
758                 }
759
760                 if (pid_is_unwaited(s->main_pid) &&
761                     ((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
762                      IN_SET(s->deserialized_state,
763                             SERVICE_START, SERVICE_START_POST,
764                             SERVICE_RUNNING, SERVICE_RELOAD,
765                             SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
766                             SERVICE_STOP_POST,
767                             SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
768                         r = unit_watch_pid(UNIT(s), s->main_pid);
769                         if (r < 0)
770                                 return r;
771                 }
772
773                 if (pid_is_unwaited(s->control_pid) &&
774                     IN_SET(s->deserialized_state,
775                            SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
776                            SERVICE_RELOAD,
777                            SERVICE_STOP, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL,
778                            SERVICE_STOP_POST,
779                            SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
780                         r = unit_watch_pid(UNIT(s), s->control_pid);
781                         if (r < 0)
782                                 return r;
783                 }
784
785                 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
786                         unit_watch_all_pids(UNIT(s));
787
788                 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
789                         service_start_watchdog(s);
790
791                 service_set_state(s, s->deserialized_state);
792         }
793
794         return 0;
795 }
796
797 static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
798         Iterator i;
799         int r;
800         int *rfds = NULL;
801         unsigned rn_fds = 0;
802         Unit *u;
803
804         assert(s);
805         assert(fds);
806         assert(n_fds);
807
808         if (s->socket_fd >= 0)
809                 return 0;
810
811         SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
812                 int *cfds;
813                 unsigned cn_fds;
814                 Socket *sock;
815
816                 if (u->type != UNIT_SOCKET)
817                         continue;
818
819                 sock = SOCKET(u);
820
821                 r = socket_collect_fds(sock, &cfds, &cn_fds);
822                 if (r < 0)
823                         goto fail;
824
825                 if (!cfds)
826                         continue;
827
828                 if (!rfds) {
829                         rfds = cfds;
830                         rn_fds = cn_fds;
831                 } else {
832                         int *t;
833
834                         t = new(int, rn_fds+cn_fds);
835                         if (!t) {
836                                 free(cfds);
837                                 r = -ENOMEM;
838                                 goto fail;
839                         }
840
841                         memcpy(t, rfds, rn_fds * sizeof(int));
842                         memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
843                         free(rfds);
844                         free(cfds);
845
846                         rfds = t;
847                         rn_fds = rn_fds+cn_fds;
848                 }
849         }
850
851         *fds = rfds;
852         *n_fds = rn_fds;
853
854         return 0;
855
856 fail:
857         free(rfds);
858
859         return r;
860 }
861
862 static int service_spawn(
863                 Service *s,
864                 ExecCommand *c,
865                 bool timeout,
866                 bool pass_fds,
867                 bool apply_permissions,
868                 bool apply_chroot,
869                 bool apply_tty_stdin,
870                 bool set_notify_socket,
871                 bool is_control,
872                 pid_t *_pid) {
873
874         pid_t pid;
875         int r;
876         int *fds = NULL;
877         _cleanup_free_ int *fdsbuf = NULL;
878         unsigned n_fds = 0, n_env = 0;
879         _cleanup_strv_free_ char
880                 **argv = NULL, **final_env = NULL, **our_env = NULL;
881         const char *path;
882
883         assert(s);
884         assert(c);
885         assert(_pid);
886
887         unit_realize_cgroup(UNIT(s));
888
889         r = unit_setup_exec_runtime(UNIT(s));
890         if (r < 0)
891                 goto fail;
892
893         if (pass_fds ||
894             s->exec_context.std_input == EXEC_INPUT_SOCKET ||
895             s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
896             s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
897
898                 if (s->socket_fd >= 0) {
899                         fds = &s->socket_fd;
900                         n_fds = 1;
901                 } else {
902                         r = service_collect_fds(s, &fdsbuf, &n_fds);
903                         if (r < 0)
904                                 goto fail;
905
906                         fds = fdsbuf;
907                 }
908         }
909
910         if (timeout && s->timeout_start_usec > 0) {
911                 r = service_arm_timer(s, s->timeout_start_usec);
912                 if (r < 0)
913                         goto fail;
914         } else
915                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
916
917         r = unit_full_printf_strv(UNIT(s), c->argv, &argv);
918         if (r < 0)
919                 goto fail;
920
921         our_env = new0(char*, 4);
922         if (!our_env) {
923                 r = -ENOMEM;
924                 goto fail;
925         }
926
927         if (set_notify_socket)
928                 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
929                         r = -ENOMEM;
930                         goto fail;
931                 }
932
933         if (s->main_pid > 0)
934                 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0) {
935                         r = -ENOMEM;
936                         goto fail;
937                 }
938
939         if (UNIT(s)->manager->running_as != SYSTEMD_SYSTEM)
940                 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid()) < 0) {
941                         r = -ENOMEM;
942                         goto fail;
943                 }
944
945         final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
946         if (!final_env) {
947                 r = -ENOMEM;
948                 goto fail;
949         }
950
951         if (is_control && UNIT(s)->cgroup_path) {
952                 path = strappenda(UNIT(s)->cgroup_path, "/control");
953                 cg_create(SYSTEMD_CGROUP_CONTROLLER, path);
954         } else
955                 path = UNIT(s)->cgroup_path;
956
957         r = exec_spawn(c,
958                        argv,
959                        &s->exec_context,
960                        fds, n_fds,
961                        final_env,
962                        apply_permissions,
963                        apply_chroot,
964                        apply_tty_stdin,
965                        UNIT(s)->manager->confirm_spawn,
966                        UNIT(s)->manager->cgroup_supported,
967                        path,
968                        manager_get_runtime_prefix(UNIT(s)->manager),
969                        UNIT(s)->id,
970                        s->watchdog_usec,
971                        s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
972                        s->exec_runtime,
973                        &pid);
974         if (r < 0)
975                 goto fail;
976
977         r = unit_watch_pid(UNIT(s), pid);
978         if (r < 0)
979                 /* FIXME: we need to do something here */
980                 goto fail;
981
982         *_pid = pid;
983
984         return 0;
985
986 fail:
987         if (timeout)
988                 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
989
990         return r;
991 }
992
993 static int main_pid_good(Service *s) {
994         assert(s);
995
996         /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
997          * don't know */
998
999         /* If we know the pid file, then lets just check if it is
1000          * still valid */
1001         if (s->main_pid_known) {
1002
1003                 /* If it's an alien child let's check if it is still
1004                  * alive ... */
1005                 if (s->main_pid_alien && s->main_pid > 0)
1006                         return pid_is_alive(s->main_pid);
1007
1008                 /* .. otherwise assume we'll get a SIGCHLD for it,
1009                  * which we really should wait for to collect exit
1010                  * status and code */
1011                 return s->main_pid > 0;
1012         }
1013
1014         /* We don't know the pid */
1015         return -EAGAIN;
1016 }
1017
1018 _pure_ static int control_pid_good(Service *s) {
1019         assert(s);
1020
1021         return s->control_pid > 0;
1022 }
1023
1024 static int cgroup_good(Service *s) {
1025         int r;
1026
1027         assert(s);
1028
1029         if (!UNIT(s)->cgroup_path)
1030                 return 0;
1031
1032         r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path, true);
1033         if (r < 0)
1034                 return r;
1035
1036         return !r;
1037 }
1038
1039 static int service_execute_action(Service *s, FailureAction action, const char *reason, bool log_action_none);
1040
1041 static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
1042         int r;
1043         assert(s);
1044
1045         if (f != SERVICE_SUCCESS)
1046                 s->result = f;
1047
1048         service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1049
1050         if (s->result != SERVICE_SUCCESS)
1051                 service_execute_action(s, s->failure_action, "failed", false);
1052
1053         if (allow_restart &&
1054             !s->forbid_restart &&
1055             (s->restart == SERVICE_RESTART_ALWAYS ||
1056              (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1057              (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
1058              (s->restart == SERVICE_RESTART_ON_ABNORMAL && !IN_SET(s->result, SERVICE_SUCCESS, SERVICE_FAILURE_EXIT_CODE)) ||
1059              (s->restart == SERVICE_RESTART_ON_WATCHDOG && s->result == SERVICE_FAILURE_WATCHDOG) ||
1060              (s->restart == SERVICE_RESTART_ON_ABORT && IN_SET(s->result, SERVICE_FAILURE_SIGNAL, SERVICE_FAILURE_CORE_DUMP)) ||
1061              (s->main_exec_status.code == CLD_EXITED && set_contains(s->restart_force_status.status, INT_TO_PTR(s->main_exec_status.status))) ||
1062              (IN_SET(s->main_exec_status.code, CLD_KILLED, CLD_DUMPED) && set_contains(s->restart_force_status.signal, INT_TO_PTR(s->main_exec_status.status)))) &&
1063             (s->main_exec_status.code != CLD_EXITED || !set_contains(s->restart_prevent_status.status, INT_TO_PTR(s->main_exec_status.status))) &&
1064             (!IN_SET(s->main_exec_status.code, CLD_KILLED, CLD_DUMPED) || !set_contains(s->restart_prevent_status.signal, INT_TO_PTR(s->main_exec_status.status)))) {
1065
1066                 r = service_arm_timer(s, s->restart_usec);
1067                 if (r < 0)
1068                         goto fail;
1069
1070                 service_set_state(s, SERVICE_AUTO_RESTART);
1071         }
1072
1073         s->forbid_restart = false;
1074
1075         /* We want fresh tmpdirs in case service is started again immediately */
1076         exec_runtime_destroy(s->exec_runtime);
1077         s->exec_runtime = exec_runtime_unref(s->exec_runtime);
1078
1079         /* Also, remove the runtime directory in */
1080         exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
1081
1082         /* Try to delete the pid file. At this point it will be
1083          * out-of-date, and some software might be confused by it, so
1084          * let's remove it. */
1085         if (s->pid_file)
1086                 unlink_noerrno(s->pid_file);
1087
1088         return;
1089
1090 fail:
1091         log_warning_unit(UNIT(s)->id, "%s failed to run install restart timer: %s", UNIT(s)->id, strerror(-r));
1092         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
1093 }
1094
1095 static void service_enter_stop_post(Service *s, ServiceResult f) {
1096         int r;
1097         assert(s);
1098
1099         if (f != SERVICE_SUCCESS)
1100                 s->result = f;
1101
1102         service_unwatch_control_pid(s);
1103         unit_watch_all_pids(UNIT(s));
1104
1105         s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1106         if (s->control_command) {
1107                 s->control_command_id = SERVICE_EXEC_STOP_POST;
1108
1109                 r = service_spawn(s,
1110                                   s->control_command,
1111                                   true,
1112                                   false,
1113                                   !s->permissions_start_only,
1114                                   !s->root_directory_start_only,
1115                                   true,
1116                                   false,
1117                                   true,
1118                                   &s->control_pid);
1119                 if (r < 0)
1120                         goto fail;
1121
1122                 service_set_state(s, SERVICE_STOP_POST);
1123         } else
1124                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
1125
1126         return;
1127
1128 fail:
1129         log_warning_unit(UNIT(s)->id, "%s failed to run 'stop-post' task: %s", UNIT(s)->id, strerror(-r));
1130         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
1131 }
1132
1133 static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
1134         int r;
1135
1136         assert(s);
1137
1138         if (f != SERVICE_SUCCESS)
1139                 s->result = f;
1140
1141         unit_watch_all_pids(UNIT(s));
1142
1143         r = unit_kill_context(
1144                         UNIT(s),
1145                         &s->kill_context,
1146                         state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM,
1147                         s->main_pid,
1148                         s->control_pid,
1149                         s->main_pid_alien);
1150
1151         if (r < 0)
1152                 goto fail;
1153
1154         if (r > 0) {
1155                 if (s->timeout_stop_usec > 0) {
1156                         r = service_arm_timer(s, s->timeout_stop_usec);
1157                         if (r < 0)
1158                                 goto fail;
1159                 }
1160
1161                 service_set_state(s, state);
1162         } else if (state == SERVICE_STOP_SIGTERM)
1163                 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1164         else if (state == SERVICE_STOP_SIGKILL)
1165                 service_enter_stop_post(s, SERVICE_SUCCESS);
1166         else if (state == SERVICE_FINAL_SIGTERM)
1167                 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
1168         else
1169                 service_enter_dead(s, SERVICE_SUCCESS, true);
1170
1171         return;
1172
1173 fail:
1174         log_warning_unit(UNIT(s)->id, "%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
1175
1176         if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
1177                 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
1178         else
1179                 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
1180 }
1181
1182 static void service_enter_stop_by_notify(Service *s) {
1183         assert(s);
1184
1185         unit_watch_all_pids(UNIT(s));
1186
1187         if (s->timeout_stop_usec > 0)
1188                 service_arm_timer(s, s->timeout_stop_usec);
1189
1190         service_set_state(s, SERVICE_STOP);
1191 }
1192
1193 static void service_enter_stop(Service *s, ServiceResult f) {
1194         int r;
1195
1196         assert(s);
1197
1198         if (f != SERVICE_SUCCESS)
1199                 s->result = f;
1200
1201         service_unwatch_control_pid(s);
1202         unit_watch_all_pids(UNIT(s));
1203
1204         s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1205         if (s->control_command) {
1206                 s->control_command_id = SERVICE_EXEC_STOP;
1207
1208                 r = service_spawn(s,
1209                                   s->control_command,
1210                                   true,
1211                                   false,
1212                                   !s->permissions_start_only,
1213                                   !s->root_directory_start_only,
1214                                   false,
1215                                   false,
1216                                   true,
1217                                   &s->control_pid);
1218                 if (r < 0)
1219                         goto fail;
1220
1221                 service_set_state(s, SERVICE_STOP);
1222         } else
1223                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
1224
1225         return;
1226
1227 fail:
1228         log_warning_unit(UNIT(s)->id, "%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
1229         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
1230 }
1231
1232 static void service_enter_running(Service *s, ServiceResult f) {
1233         int main_pid_ok, cgroup_ok;
1234         assert(s);
1235
1236         if (f != SERVICE_SUCCESS)
1237                 s->result = f;
1238
1239         main_pid_ok = main_pid_good(s);
1240         cgroup_ok = cgroup_good(s);
1241
1242         if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
1243             (s->bus_name_good || s->type != SERVICE_DBUS)) {
1244
1245                 /* If there are any queued up sd_notify()
1246                  * notifications, process them now */
1247                 if (s->notify_state == NOTIFY_RELOADING)
1248                         service_enter_reload_by_notify(s);
1249                 else if (s->notify_state == NOTIFY_STOPPING)
1250                         service_enter_stop_by_notify(s);
1251                 else
1252                         service_set_state(s, SERVICE_RUNNING);
1253
1254         } else if (s->remain_after_exit)
1255                 service_set_state(s, SERVICE_EXITED);
1256         else
1257                 service_enter_stop(s, SERVICE_SUCCESS);
1258 }
1259
1260 static void service_enter_start_post(Service *s) {
1261         int r;
1262         assert(s);
1263
1264         service_unwatch_control_pid(s);
1265         service_reset_watchdog(s);
1266
1267         s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
1268         if (s->control_command) {
1269                 s->control_command_id = SERVICE_EXEC_START_POST;
1270
1271                 r = service_spawn(s,
1272                                   s->control_command,
1273                                   true,
1274                                   false,
1275                                   !s->permissions_start_only,
1276                                   !s->root_directory_start_only,
1277                                   false,
1278                                   false,
1279                                   true,
1280                                   &s->control_pid);
1281                 if (r < 0)
1282                         goto fail;
1283
1284                 service_set_state(s, SERVICE_START_POST);
1285         } else
1286                 service_enter_running(s, SERVICE_SUCCESS);
1287
1288         return;
1289
1290 fail:
1291         log_warning_unit(UNIT(s)->id, "%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
1292         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
1293 }
1294
1295 static void service_kill_control_processes(Service *s) {
1296         char *p;
1297
1298         if (!UNIT(s)->cgroup_path)
1299                 return;
1300
1301         p = strappenda(UNIT(s)->cgroup_path, "/control");
1302         cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
1303 }
1304
1305 static void service_enter_start(Service *s) {
1306         ExecCommand *c;
1307         pid_t pid;
1308         int r;
1309
1310         assert(s);
1311
1312         assert(s->exec_command[SERVICE_EXEC_START]);
1313         assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
1314
1315         service_unwatch_control_pid(s);
1316         service_unwatch_main_pid(s);
1317
1318         /* We want to ensure that nobody leaks processes from
1319          * START_PRE here, so let's go on a killing spree, People
1320          * should not spawn long running processes from START_PRE. */
1321         service_kill_control_processes(s);
1322
1323         if (s->type == SERVICE_FORKING) {
1324                 s->control_command_id = SERVICE_EXEC_START;
1325                 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
1326
1327                 s->main_command = NULL;
1328         } else {
1329                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1330                 s->control_command = NULL;
1331
1332                 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
1333         }
1334
1335         r = service_spawn(s,
1336                           c,
1337                           s->type == SERVICE_FORKING || s->type == SERVICE_DBUS ||
1338                             s->type == SERVICE_NOTIFY || s->type == SERVICE_ONESHOT,
1339                           true,
1340                           true,
1341                           true,
1342                           true,
1343                           s->notify_access != NOTIFY_NONE,
1344                           false,
1345                           &pid);
1346         if (r < 0)
1347                 goto fail;
1348
1349         if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
1350                 /* For simple services we immediately start
1351                  * the START_POST binaries. */
1352
1353                 service_set_main_pid(s, pid);
1354                 service_enter_start_post(s);
1355
1356         } else  if (s->type == SERVICE_FORKING) {
1357
1358                 /* For forking services we wait until the start
1359                  * process exited. */
1360
1361                 s->control_pid = pid;
1362                 service_set_state(s, SERVICE_START);
1363
1364         } else if (s->type == SERVICE_ONESHOT ||
1365                    s->type == SERVICE_DBUS ||
1366                    s->type == SERVICE_NOTIFY) {
1367
1368                 /* For oneshot services we wait until the start
1369                  * process exited, too, but it is our main process. */
1370
1371                 /* For D-Bus services we know the main pid right away,
1372                  * but wait for the bus name to appear on the
1373                  * bus. Notify services are similar. */
1374
1375                 service_set_main_pid(s, pid);
1376                 service_set_state(s, SERVICE_START);
1377         } else
1378                 assert_not_reached("Unknown service type");
1379
1380         return;
1381
1382 fail:
1383         log_warning_unit(UNIT(s)->id, "%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
1384         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
1385 }
1386
1387 static void service_enter_start_pre(Service *s) {
1388         int r;
1389
1390         assert(s);
1391
1392         service_unwatch_control_pid(s);
1393
1394         s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
1395         if (s->control_command) {
1396                 /* Before we start anything, let's clear up what might
1397                  * be left from previous runs. */
1398                 service_kill_control_processes(s);
1399
1400                 s->control_command_id = SERVICE_EXEC_START_PRE;
1401
1402                 r = service_spawn(s,
1403                                   s->control_command,
1404                                   true,
1405                                   false,
1406                                   !s->permissions_start_only,
1407                                   !s->root_directory_start_only,
1408                                   true,
1409                                   false,
1410                                   true,
1411                                   &s->control_pid);
1412                 if (r < 0)
1413                         goto fail;
1414
1415                 service_set_state(s, SERVICE_START_PRE);
1416         } else
1417                 service_enter_start(s);
1418
1419         return;
1420
1421 fail:
1422         log_warning_unit(UNIT(s)->id, "%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
1423         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
1424 }
1425
1426 static void service_enter_restart(Service *s) {
1427         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
1428         int r;
1429
1430         assert(s);
1431
1432         if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
1433                 /* Don't restart things if we are going down anyway */
1434                 log_info_unit(UNIT(s)->id, "Stop job pending for unit, delaying automatic restart.");
1435
1436                 r = service_arm_timer(s, s->restart_usec);
1437                 if (r < 0)
1438                         goto fail;
1439
1440                 return;
1441         }
1442
1443         /* Any units that are bound to this service must also be
1444          * restarted. We use JOB_RESTART (instead of the more obvious
1445          * JOB_START) here so that those dependency jobs will be added
1446          * as well. */
1447         r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
1448         if (r < 0)
1449                 goto fail;
1450
1451         /* Note that we stay in the SERVICE_AUTO_RESTART state here,
1452          * it will be canceled as part of the service_stop() call that
1453          * is executed as part of JOB_RESTART. */
1454
1455         log_debug_unit(UNIT(s)->id, "%s scheduled restart job.", UNIT(s)->id);
1456         return;
1457
1458 fail:
1459         log_warning_unit(UNIT(s)->id, "%s failed to schedule restart job: %s", UNIT(s)->id, bus_error_message(&error, -r));
1460         service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
1461 }
1462
1463 static void service_enter_reload_by_notify(Service *s) {
1464         assert(s);
1465
1466         if (s->timeout_start_usec > 0)
1467                 service_arm_timer(s, s->timeout_start_usec);
1468
1469         service_set_state(s, SERVICE_RELOAD);
1470 }
1471
1472 static void service_enter_reload(Service *s) {
1473         int r;
1474
1475         assert(s);
1476
1477         service_unwatch_control_pid(s);
1478
1479         s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
1480         if (s->control_command) {
1481                 s->control_command_id = SERVICE_EXEC_RELOAD;
1482
1483                 r = service_spawn(s,
1484                                   s->control_command,
1485                                   true,
1486                                   false,
1487                                   !s->permissions_start_only,
1488                                   !s->root_directory_start_only,
1489                                   false,
1490                                   false,
1491                                   true,
1492                                   &s->control_pid);
1493                 if (r < 0)
1494                         goto fail;
1495
1496                 service_set_state(s, SERVICE_RELOAD);
1497         } else
1498                 service_enter_running(s, SERVICE_SUCCESS);
1499
1500         return;
1501
1502 fail:
1503         log_warning_unit(UNIT(s)->id, "%s failed to run 'reload' task: %s", UNIT(s)->id, strerror(-r));
1504         s->reload_result = SERVICE_FAILURE_RESOURCES;
1505         service_enter_running(s, SERVICE_SUCCESS);
1506 }
1507
1508 static void service_run_next_control(Service *s) {
1509         int r;
1510
1511         assert(s);
1512         assert(s->control_command);
1513         assert(s->control_command->command_next);
1514
1515         assert(s->control_command_id != SERVICE_EXEC_START);
1516
1517         s->control_command = s->control_command->command_next;
1518         service_unwatch_control_pid(s);
1519
1520         r = service_spawn(s,
1521                           s->control_command,
1522                           true,
1523                           false,
1524                           !s->permissions_start_only,
1525                           !s->root_directory_start_only,
1526                           s->control_command_id == SERVICE_EXEC_START_PRE ||
1527                           s->control_command_id == SERVICE_EXEC_STOP_POST,
1528                           false,
1529                           true,
1530                           &s->control_pid);
1531         if (r < 0)
1532                 goto fail;
1533
1534         return;
1535
1536 fail:
1537         log_warning_unit(UNIT(s)->id, "%s failed to run next control task: %s", UNIT(s)->id, strerror(-r));
1538
1539         if (s->state == SERVICE_START_PRE)
1540                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
1541         else if (s->state == SERVICE_STOP)
1542                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
1543         else if (s->state == SERVICE_STOP_POST)
1544                 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
1545         else if (s->state == SERVICE_RELOAD) {
1546                 s->reload_result = SERVICE_FAILURE_RESOURCES;
1547                 service_enter_running(s, SERVICE_SUCCESS);
1548         } else
1549                 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
1550 }
1551
1552 static void service_run_next_main(Service *s) {
1553         pid_t pid;
1554         int r;
1555
1556         assert(s);
1557         assert(s->main_command);
1558         assert(s->main_command->command_next);
1559         assert(s->type == SERVICE_ONESHOT);
1560
1561         s->main_command = s->main_command->command_next;
1562         service_unwatch_main_pid(s);
1563
1564         r = service_spawn(s,
1565                           s->main_command,
1566                           true,
1567                           true,
1568                           true,
1569                           true,
1570                           true,
1571                           s->notify_access != NOTIFY_NONE,
1572                           false,
1573                           &pid);
1574         if (r < 0)
1575                 goto fail;
1576
1577         service_set_main_pid(s, pid);
1578
1579         return;
1580
1581 fail:
1582         log_warning_unit(UNIT(s)->id, "%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
1583         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
1584 }
1585
1586 static int service_execute_action(Service *s, FailureAction action, const char *reason, bool log_action_none) {
1587         assert(s);
1588
1589         if (action == SERVICE_FAILURE_ACTION_REBOOT ||
1590             action == SERVICE_FAILURE_ACTION_REBOOT_FORCE)
1591                 update_reboot_param_file(s->reboot_arg);
1592
1593         switch (action) {
1594
1595         case SERVICE_FAILURE_ACTION_NONE:
1596                 if (log_action_none)
1597                         log_warning_unit(UNIT(s)->id, "%s %s, refusing to start.", UNIT(s)->id, reason);
1598                 break;
1599
1600         case SERVICE_FAILURE_ACTION_REBOOT: {
1601                 _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
1602                 int r;
1603
1604                 log_warning_unit(UNIT(s)->id, "%s %s, rebooting.", UNIT(s)->id, reason);
1605
1606                 r = manager_add_job_by_name(UNIT(s)->manager, JOB_START, SPECIAL_REBOOT_TARGET, JOB_REPLACE, true, &error, NULL);
1607                 if (r < 0)
1608                         log_error_unit(UNIT(s)->id, "Failed to reboot: %s.", bus_error_message(&error, r));
1609
1610                 break;
1611         }
1612
1613         case SERVICE_FAILURE_ACTION_REBOOT_FORCE:
1614                 log_warning_unit(UNIT(s)->id, "%s %s, forcibly rebooting.", UNIT(s)->id, reason);
1615                 UNIT(s)->manager->exit_code = MANAGER_REBOOT;
1616                 break;
1617
1618         case SERVICE_FAILURE_ACTION_REBOOT_IMMEDIATE:
1619                 log_warning_unit(UNIT(s)->id, "%s %s, rebooting immediately.", UNIT(s)->id, reason);
1620
1621                 sync();
1622
1623                 if (s->reboot_arg) {
1624                         log_info("Rebooting with argument '%s'.", s->reboot_arg);
1625                         syscall(SYS_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_RESTART2, s->reboot_arg);
1626                 }
1627
1628                 log_info("Rebooting.");
1629                 reboot(RB_AUTOBOOT);
1630                 break;
1631
1632         default:
1633                 log_error_unit(UNIT(s)->id, "failure action=%i", action);
1634                 assert_not_reached("Unknown FailureAction.");
1635         }
1636
1637         return -ECANCELED;
1638 }
1639
1640 static int service_start_limit_test(Service *s) {
1641         assert(s);
1642
1643         if (ratelimit_test(&s->start_limit))
1644                 return 0;
1645
1646         return service_execute_action(s, s->start_limit_action, "start request repeated too quickly", true);
1647 }
1648
1649 static int service_start(Unit *u) {
1650         Service *s = SERVICE(u);
1651         int r;
1652
1653         assert(s);
1654
1655         /* We cannot fulfill this request right now, try again later
1656          * please! */
1657         if (s->state == SERVICE_STOP ||
1658             s->state == SERVICE_STOP_SIGTERM ||
1659             s->state == SERVICE_STOP_SIGKILL ||
1660             s->state == SERVICE_STOP_POST ||
1661             s->state == SERVICE_FINAL_SIGTERM ||
1662             s->state == SERVICE_FINAL_SIGKILL)
1663                 return -EAGAIN;
1664
1665         /* Already on it! */
1666         if (s->state == SERVICE_START_PRE ||
1667             s->state == SERVICE_START ||
1668             s->state == SERVICE_START_POST)
1669                 return 0;
1670
1671         /* A service that will be restarted must be stopped first to
1672          * trigger BindsTo and/or OnFailure dependencies. If a user
1673          * does not want to wait for the holdoff time to elapse, the
1674          * service should be manually restarted, not started. We
1675          * simply return EAGAIN here, so that any start jobs stay
1676          * queued, and assume that the auto restart timer will
1677          * eventually trigger the restart. */
1678         if (s->state == SERVICE_AUTO_RESTART)
1679                 return -EAGAIN;
1680
1681         assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
1682
1683         /* Make sure we don't enter a busy loop of some kind. */
1684         r = service_start_limit_test(s);
1685         if (r < 0) {
1686                 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT, false);
1687                 return r;
1688         }
1689
1690         s->result = SERVICE_SUCCESS;
1691         s->reload_result = SERVICE_SUCCESS;
1692         s->main_pid_known = false;
1693         s->main_pid_alien = false;
1694         s->forbid_restart = false;
1695
1696         free(s->status_text);
1697         s->status_text = NULL;
1698         s->status_errno = 0;
1699
1700         s->notify_state = NOTIFY_UNKNOWN;
1701
1702         service_enter_start_pre(s);
1703         return 0;
1704 }
1705
1706 static int service_stop(Unit *u) {
1707         Service *s = SERVICE(u);
1708
1709         assert(s);
1710
1711         /* Don't create restart jobs from here. */
1712         s->forbid_restart = true;
1713
1714         /* Already on it */
1715         if (s->state == SERVICE_STOP ||
1716             s->state == SERVICE_STOP_SIGTERM ||
1717             s->state == SERVICE_STOP_SIGKILL ||
1718             s->state == SERVICE_STOP_POST ||
1719             s->state == SERVICE_FINAL_SIGTERM ||
1720             s->state == SERVICE_FINAL_SIGKILL)
1721                 return 0;
1722
1723         /* A restart will be scheduled or is in progress. */
1724         if (s->state == SERVICE_AUTO_RESTART) {
1725                 service_set_state(s, SERVICE_DEAD);
1726                 return 0;
1727         }
1728
1729         /* If there's already something running we go directly into
1730          * kill mode. */
1731         if (s->state == SERVICE_START_PRE ||
1732             s->state == SERVICE_START ||
1733             s->state == SERVICE_START_POST ||
1734             s->state == SERVICE_RELOAD) {
1735                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
1736                 return 0;
1737         }
1738
1739         assert(s->state == SERVICE_RUNNING ||
1740                s->state == SERVICE_EXITED);
1741
1742         service_enter_stop(s, SERVICE_SUCCESS);
1743         return 0;
1744 }
1745
1746 static int service_reload(Unit *u) {
1747         Service *s = SERVICE(u);
1748
1749         assert(s);
1750
1751         assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
1752
1753         service_enter_reload(s);
1754         return 0;
1755 }
1756
1757 _pure_ static bool service_can_reload(Unit *u) {
1758         Service *s = SERVICE(u);
1759
1760         assert(s);
1761
1762         return !!s->exec_command[SERVICE_EXEC_RELOAD];
1763 }
1764
1765 static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
1766         Service *s = SERVICE(u);
1767
1768         assert(u);
1769         assert(f);
1770         assert(fds);
1771
1772         unit_serialize_item(u, f, "state", service_state_to_string(s->state));
1773         unit_serialize_item(u, f, "result", service_result_to_string(s->result));
1774         unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
1775
1776         if (s->control_pid > 0)
1777                 unit_serialize_item_format(u, f, "control-pid", PID_FMT,
1778                                            s->control_pid);
1779
1780         if (s->main_pid_known && s->main_pid > 0)
1781                 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
1782
1783         unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
1784
1785         if (s->status_text)
1786                 unit_serialize_item(u, f, "status-text", s->status_text);
1787
1788         /* FIXME: There's a minor uncleanliness here: if there are
1789          * multiple commands attached here, we will start from the
1790          * first one again */
1791         if (s->control_command_id >= 0)
1792                 unit_serialize_item(u, f, "control-command",
1793                                     service_exec_command_to_string(s->control_command_id));
1794
1795         if (s->socket_fd >= 0) {
1796                 int copy;
1797
1798                 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
1799                         return copy;
1800
1801                 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
1802         }
1803
1804         if (s->main_exec_status.pid > 0) {
1805                 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT,
1806                                            s->main_exec_status.pid);
1807                 dual_timestamp_serialize(f, "main-exec-status-start",
1808                                          &s->main_exec_status.start_timestamp);
1809                 dual_timestamp_serialize(f, "main-exec-status-exit",
1810                                          &s->main_exec_status.exit_timestamp);
1811
1812                 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
1813                         unit_serialize_item_format(u, f, "main-exec-status-code", "%i",
1814                                                    s->main_exec_status.code);
1815                         unit_serialize_item_format(u, f, "main-exec-status-status", "%i",
1816                                                    s->main_exec_status.status);
1817                 }
1818         }
1819         if (dual_timestamp_is_set(&s->watchdog_timestamp))
1820                 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
1821
1822         if (s->forbid_restart)
1823                 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
1824
1825         return 0;
1826 }
1827
1828 static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
1829         Service *s = SERVICE(u);
1830
1831         assert(u);
1832         assert(key);
1833         assert(value);
1834         assert(fds);
1835
1836         if (streq(key, "state")) {
1837                 ServiceState state;
1838
1839                 state = service_state_from_string(value);
1840                 if (state < 0)
1841                         log_debug_unit(u->id, "Failed to parse state value %s", value);
1842                 else
1843                         s->deserialized_state = state;
1844         } else if (streq(key, "result")) {
1845                 ServiceResult f;
1846
1847                 f = service_result_from_string(value);
1848                 if (f < 0)
1849                         log_debug_unit(u->id, "Failed to parse result value %s", value);
1850                 else if (f != SERVICE_SUCCESS)
1851                         s->result = f;
1852
1853         } else if (streq(key, "reload-result")) {
1854                 ServiceResult f;
1855
1856                 f = service_result_from_string(value);
1857                 if (f < 0)
1858                         log_debug_unit(u->id, "Failed to parse reload result value %s", value);
1859                 else if (f != SERVICE_SUCCESS)
1860                         s->reload_result = f;
1861
1862         } else if (streq(key, "control-pid")) {
1863                 pid_t pid;
1864
1865                 if (parse_pid(value, &pid) < 0)
1866                         log_debug_unit(u->id, "Failed to parse control-pid value %s", value);
1867                 else
1868                         s->control_pid = pid;
1869         } else if (streq(key, "main-pid")) {
1870                 pid_t pid;
1871
1872                 if (parse_pid(value, &pid) < 0)
1873                         log_debug_unit(u->id, "Failed to parse main-pid value %s", value);
1874                 else {
1875                         service_set_main_pid(s, pid);
1876                         unit_watch_pid(UNIT(s), pid);
1877                 }
1878         } else if (streq(key, "main-pid-known")) {
1879                 int b;
1880
1881                 b = parse_boolean(value);
1882                 if (b < 0)
1883                         log_debug_unit(u->id, "Failed to parse main-pid-known value %s", value);
1884                 else
1885                         s->main_pid_known = b;
1886         } else if (streq(key, "status-text")) {
1887                 char *t;
1888
1889                 t = strdup(value);
1890                 if (!t)
1891                         log_oom();
1892                 else {
1893                         free(s->status_text);
1894                         s->status_text = t;
1895                 }
1896
1897         } else if (streq(key, "control-command")) {
1898                 ServiceExecCommand id;
1899
1900                 id = service_exec_command_from_string(value);
1901                 if (id < 0)
1902                         log_debug_unit(u->id, "Failed to parse exec-command value %s", value);
1903                 else {
1904                         s->control_command_id = id;
1905                         s->control_command = s->exec_command[id];
1906                 }
1907         } else if (streq(key, "socket-fd")) {
1908                 int fd;
1909
1910                 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
1911                         log_debug_unit(u->id, "Failed to parse socket-fd value %s", value);
1912                 else {
1913
1914                         asynchronous_close(s->socket_fd);
1915                         s->socket_fd = fdset_remove(fds, fd);
1916                 }
1917         } else if (streq(key, "main-exec-status-pid")) {
1918                 pid_t pid;
1919
1920                 if (parse_pid(value, &pid) < 0)
1921                         log_debug_unit(u->id, "Failed to parse main-exec-status-pid value %s", value);
1922                 else
1923                         s->main_exec_status.pid = pid;
1924         } else if (streq(key, "main-exec-status-code")) {
1925                 int i;
1926
1927                 if (safe_atoi(value, &i) < 0)
1928                         log_debug_unit(u->id, "Failed to parse main-exec-status-code value %s", value);
1929                 else
1930                         s->main_exec_status.code = i;
1931         } else if (streq(key, "main-exec-status-status")) {
1932                 int i;
1933
1934                 if (safe_atoi(value, &i) < 0)
1935                         log_debug_unit(u->id, "Failed to parse main-exec-status-status value %s", value);
1936                 else
1937                         s->main_exec_status.status = i;
1938         } else if (streq(key, "main-exec-status-start"))
1939                 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
1940         else if (streq(key, "main-exec-status-exit"))
1941                 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
1942         else if (streq(key, "watchdog-timestamp"))
1943                 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
1944         else if (streq(key, "forbid-restart")) {
1945                 int b;
1946
1947                 b = parse_boolean(value);
1948                 if (b < 0)
1949                         log_debug_unit(u->id, "Failed to parse forbid-restart value %s", value);
1950                 else
1951                         s->forbid_restart = b;
1952         } else
1953                 log_debug_unit(u->id, "Unknown serialization key '%s'", key);
1954
1955         return 0;
1956 }
1957
1958 _pure_ static UnitActiveState service_active_state(Unit *u) {
1959         const UnitActiveState *table;
1960
1961         assert(u);
1962
1963         table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1964
1965         return table[SERVICE(u)->state];
1966 }
1967
1968 static const char *service_sub_state_to_string(Unit *u) {
1969         assert(u);
1970
1971         return service_state_to_string(SERVICE(u)->state);
1972 }
1973
1974 static bool service_check_gc(Unit *u) {
1975         Service *s = SERVICE(u);
1976
1977         assert(s);
1978
1979         /* Never clean up services that still have a process around,
1980          * even if the service is formally dead. */
1981         if (cgroup_good(s) > 0 ||
1982             main_pid_good(s) > 0 ||
1983             control_pid_good(s) > 0)
1984                 return true;
1985
1986         return false;
1987 }
1988
1989 _pure_ static bool service_check_snapshot(Unit *u) {
1990         Service *s = SERVICE(u);
1991
1992         assert(s);
1993
1994         return s->socket_fd < 0;
1995 }
1996
1997 static int service_retry_pid_file(Service *s) {
1998         int r;
1999
2000         assert(s->pid_file);
2001         assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2002
2003         r = service_load_pid_file(s, false);
2004         if (r < 0)
2005                 return r;
2006
2007         service_unwatch_pid_file(s);
2008
2009         service_enter_running(s, SERVICE_SUCCESS);
2010         return 0;
2011 }
2012
2013 static int service_watch_pid_file(Service *s) {
2014         int r;
2015
2016         log_debug_unit(UNIT(s)->id, "Setting watch for %s's PID file %s", UNIT(s)->id, s->pid_file_pathspec->path);
2017
2018         r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
2019         if (r < 0)
2020                 goto fail;
2021
2022         /* the pidfile might have appeared just before we set the watch */
2023         log_debug_unit(UNIT(s)->id, "Trying to read %s's PID file %s in case it changed", UNIT(s)->id, s->pid_file_pathspec->path);
2024         service_retry_pid_file(s);
2025
2026         return 0;
2027 fail:
2028         log_error_unit(UNIT(s)->id, "Failed to set a watch for %s's PID file %s: %s", UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
2029         service_unwatch_pid_file(s);
2030         return r;
2031 }
2032
2033 static int service_demand_pid_file(Service *s) {
2034         PathSpec *ps;
2035
2036         assert(s->pid_file);
2037         assert(!s->pid_file_pathspec);
2038
2039         ps = new0(PathSpec, 1);
2040         if (!ps)
2041                 return -ENOMEM;
2042
2043         ps->unit = UNIT(s);
2044         ps->path = strdup(s->pid_file);
2045         if (!ps->path) {
2046                 free(ps);
2047                 return -ENOMEM;
2048         }
2049
2050         path_kill_slashes(ps->path);
2051
2052         /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2053          * keep their PID file open all the time. */
2054         ps->type = PATH_MODIFIED;
2055         ps->inotify_fd = -1;
2056
2057         s->pid_file_pathspec = ps;
2058
2059         return service_watch_pid_file(s);
2060 }
2061
2062 static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
2063         PathSpec *p = userdata;
2064         Service *s;
2065
2066         assert(p);
2067
2068         s = SERVICE(p->unit);
2069
2070         assert(s);
2071         assert(fd >= 0);
2072         assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2073         assert(s->pid_file_pathspec);
2074         assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
2075
2076         log_debug_unit(UNIT(s)->id, "inotify event for %s", UNIT(s)->id);
2077
2078         if (path_spec_fd_event(p, events) < 0)
2079                 goto fail;
2080
2081         if (service_retry_pid_file(s) == 0)
2082                 return 0;
2083
2084         if (service_watch_pid_file(s) < 0)
2085                 goto fail;
2086
2087         return 0;
2088
2089 fail:
2090         service_unwatch_pid_file(s);
2091         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2092         return 0;
2093 }
2094
2095 static void service_notify_cgroup_empty_event(Unit *u) {
2096         Service *s = SERVICE(u);
2097
2098         assert(u);
2099
2100         log_debug_unit(u->id, "%s: cgroup is empty", u->id);
2101
2102         switch (s->state) {
2103
2104                 /* Waiting for SIGCHLD is usually more interesting,
2105                  * because it includes return codes/signals. Which is
2106                  * why we ignore the cgroup events for most cases,
2107                  * except when we don't know pid which to expect the
2108                  * SIGCHLD for. */
2109
2110         case SERVICE_START:
2111         case SERVICE_START_POST:
2112                 /* If we were hoping for the daemon to write its PID file,
2113                  * we can give up now. */
2114                 if (s->pid_file_pathspec) {
2115                         log_warning_unit(u->id, "%s never wrote its PID file. Failing.", UNIT(s)->id);
2116
2117                         service_unwatch_pid_file(s);
2118                         if (s->state == SERVICE_START)
2119                                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2120                         else
2121                                 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2122                 }
2123                 break;
2124
2125         case SERVICE_RUNNING:
2126                 /* service_enter_running() will figure out what to do */
2127                 service_enter_running(s, SERVICE_SUCCESS);
2128                 break;
2129
2130         case SERVICE_STOP_SIGTERM:
2131         case SERVICE_STOP_SIGKILL:
2132
2133                 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2134                         service_enter_stop_post(s, SERVICE_SUCCESS);
2135
2136                 break;
2137
2138         case SERVICE_STOP_POST:
2139         case SERVICE_FINAL_SIGTERM:
2140         case SERVICE_FINAL_SIGKILL:
2141                 if (main_pid_good(s) <= 0 && !control_pid_good(s))
2142                         service_enter_dead(s, SERVICE_SUCCESS, true);
2143
2144                 break;
2145
2146         default:
2147                 ;
2148         }
2149 }
2150
2151 static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2152         Service *s = SERVICE(u);
2153         ServiceResult f;
2154
2155         assert(s);
2156         assert(pid >= 0);
2157
2158         if (UNIT(s)->fragment_path ? is_clean_exit(code, status, &s->success_status) :
2159                                      is_clean_exit_lsb(code, status, &s->success_status))
2160                 f = SERVICE_SUCCESS;
2161         else if (code == CLD_EXITED)
2162                 f = SERVICE_FAILURE_EXIT_CODE;
2163         else if (code == CLD_KILLED)
2164                 f = SERVICE_FAILURE_SIGNAL;
2165         else if (code == CLD_DUMPED)
2166                 f = SERVICE_FAILURE_CORE_DUMP;
2167         else
2168                 assert_not_reached("Unknown code");
2169
2170         if (s->main_pid == pid) {
2171                 /* Forking services may occasionally move to a new PID.
2172                  * As long as they update the PID file before exiting the old
2173                  * PID, they're fine. */
2174                 if (service_load_pid_file(s, false) == 0)
2175                         return;
2176
2177                 s->main_pid = 0;
2178                 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
2179
2180                 if (s->main_command) {
2181                         /* If this is not a forking service than the
2182                          * main process got started and hence we copy
2183                          * the exit status so that it is recorded both
2184                          * as main and as control process exit
2185                          * status */
2186
2187                         s->main_command->exec_status = s->main_exec_status;
2188
2189                         if (s->main_command->ignore)
2190                                 f = SERVICE_SUCCESS;
2191                 } else if (s->exec_command[SERVICE_EXEC_START]) {
2192
2193                         /* If this is a forked process, then we should
2194                          * ignore the return value if this was
2195                          * configured for the starter process */
2196
2197                         if (s->exec_command[SERVICE_EXEC_START]->ignore)
2198                                 f = SERVICE_SUCCESS;
2199                 }
2200
2201                 log_struct_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2202                            u->id,
2203                            "MESSAGE=%s: main process exited, code=%s, status=%i/%s",
2204                                   u->id, sigchld_code_to_string(code), status,
2205                                   strna(code == CLD_EXITED
2206                                         ? exit_status_to_string(status, EXIT_STATUS_FULL)
2207                                         : signal_to_string(status)),
2208                            "EXIT_CODE=%s", sigchld_code_to_string(code),
2209                            "EXIT_STATUS=%i", status,
2210                            NULL);
2211
2212                 if (f != SERVICE_SUCCESS)
2213                         s->result = f;
2214
2215                 if (s->main_command &&
2216                     s->main_command->command_next &&
2217                     f == SERVICE_SUCCESS) {
2218
2219                         /* There is another command to *
2220                          * execute, so let's do that. */
2221
2222                         log_debug_unit(u->id, "%s running next main command for state %s", u->id, service_state_to_string(s->state));
2223                         service_run_next_main(s);
2224
2225                 } else {
2226
2227                         /* The service exited, so the service is officially
2228                          * gone. */
2229                         s->main_command = NULL;
2230
2231                         switch (s->state) {
2232
2233                         case SERVICE_START_POST:
2234                         case SERVICE_RELOAD:
2235                         case SERVICE_STOP:
2236                                 /* Need to wait until the operation is
2237                                  * done */
2238                                 break;
2239
2240                         case SERVICE_START:
2241                                 if (s->type == SERVICE_ONESHOT) {
2242                                         /* This was our main goal, so let's go on */
2243                                         if (f == SERVICE_SUCCESS)
2244                                                 service_enter_start_post(s);
2245                                         else
2246                                                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
2247                                         break;
2248                                 }
2249
2250                                 /* Fall through */
2251
2252                         case SERVICE_RUNNING:
2253                                 service_enter_running(s, f);
2254                                 break;
2255
2256                         case SERVICE_STOP_SIGTERM:
2257                         case SERVICE_STOP_SIGKILL:
2258
2259                                 if (!control_pid_good(s))
2260                                         service_enter_stop_post(s, f);
2261
2262                                 /* If there is still a control process, wait for that first */
2263                                 break;
2264
2265                         case SERVICE_STOP_POST:
2266                         case SERVICE_FINAL_SIGTERM:
2267                         case SERVICE_FINAL_SIGKILL:
2268
2269                                 if (!control_pid_good(s))
2270                                         service_enter_dead(s, f, true);
2271                                 break;
2272
2273                         default:
2274                                 assert_not_reached("Uh, main process died at wrong time.");
2275                         }
2276                 }
2277
2278         } else if (s->control_pid == pid) {
2279                 s->control_pid = 0;
2280
2281                 if (s->control_command) {
2282                         exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
2283
2284                         if (s->control_command->ignore)
2285                                 f = SERVICE_SUCCESS;
2286                 }
2287
2288                 log_full_unit(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, u->id,
2289                               "%s: control process exited, code=%s status=%i",
2290                               u->id, sigchld_code_to_string(code), status);
2291
2292                 if (f != SERVICE_SUCCESS)
2293                         s->result = f;
2294
2295                 /* Immediately get rid of the cgroup, so that the
2296                  * kernel doesn't delay the cgroup empty messages for
2297                  * the service cgroup any longer than necessary */
2298                 service_kill_control_processes(s);
2299
2300                 if (s->control_command &&
2301                     s->control_command->command_next &&
2302                     f == SERVICE_SUCCESS) {
2303
2304                         /* There is another command to *
2305                          * execute, so let's do that. */
2306
2307                         log_debug_unit(u->id, "%s running next control command for state %s", u->id, service_state_to_string(s->state));
2308                         service_run_next_control(s);
2309
2310                 } else {
2311                         /* No further commands for this step, so let's
2312                          * figure out what to do next */
2313
2314                         s->control_command = NULL;
2315                         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2316
2317                         log_debug_unit(u->id, "%s got final SIGCHLD for state %s", u->id, service_state_to_string(s->state));
2318
2319                         switch (s->state) {
2320
2321                         case SERVICE_START_PRE:
2322                                 if (f == SERVICE_SUCCESS)
2323                                         service_enter_start(s);
2324                                 else
2325                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
2326                                 break;
2327
2328                         case SERVICE_START:
2329                                 if (s->type != SERVICE_FORKING)
2330                                         /* Maybe spurious event due to a reload that changed the type? */
2331                                         break;
2332
2333                                 if (f != SERVICE_SUCCESS) {
2334                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
2335                                         break;
2336                                 }
2337
2338                                 if (s->pid_file) {
2339                                         bool has_start_post;
2340                                         int r;
2341
2342                                         /* Let's try to load the pid file here if we can.
2343                                          * The PID file might actually be created by a START_POST
2344                                          * script. In that case don't worry if the loading fails. */
2345
2346                                         has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
2347                                         r = service_load_pid_file(s, !has_start_post);
2348                                         if (!has_start_post && r < 0) {
2349                                                 r = service_demand_pid_file(s);
2350                                                 if (r < 0 || !cgroup_good(s))
2351                                                         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2352                                                 break;
2353                                         }
2354                                 } else
2355                                         service_search_main_pid(s);
2356
2357                                 service_enter_start_post(s);
2358                                 break;
2359
2360                         case SERVICE_START_POST:
2361                                 if (f != SERVICE_SUCCESS) {
2362                                         service_enter_stop(s, f);
2363                                         break;
2364                                 }
2365
2366                                 if (s->pid_file) {
2367                                         int r;
2368
2369                                         r = service_load_pid_file(s, true);
2370                                         if (r < 0) {
2371                                                 r = service_demand_pid_file(s);
2372                                                 if (r < 0 || !cgroup_good(s))
2373                                                         service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2374                                                 break;
2375                                         }
2376                                 } else
2377                                         service_search_main_pid(s);
2378
2379                                 service_enter_running(s, SERVICE_SUCCESS);
2380                                 break;
2381
2382                         case SERVICE_RELOAD:
2383                                 if (f == SERVICE_SUCCESS) {
2384                                         service_load_pid_file(s, true);
2385                                         service_search_main_pid(s);
2386                                 }
2387
2388                                 s->reload_result = f;
2389                                 service_enter_running(s, SERVICE_SUCCESS);
2390                                 break;
2391
2392                         case SERVICE_STOP:
2393                                 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
2394                                 break;
2395
2396                         case SERVICE_STOP_SIGTERM:
2397                         case SERVICE_STOP_SIGKILL:
2398                                 if (main_pid_good(s) <= 0)
2399                                         service_enter_stop_post(s, f);
2400
2401                                 /* If there is still a service
2402                                  * process around, wait until
2403                                  * that one quit, too */
2404                                 break;
2405
2406                         case SERVICE_STOP_POST:
2407                         case SERVICE_FINAL_SIGTERM:
2408                         case SERVICE_FINAL_SIGKILL:
2409                                 if (main_pid_good(s) <= 0)
2410                                         service_enter_dead(s, f, true);
2411                                 break;
2412
2413                         default:
2414                                 assert_not_reached("Uh, control process died at wrong time.");
2415                         }
2416                 }
2417         }
2418
2419         /* Notify clients about changed exit status */
2420         unit_add_to_dbus_queue(u);
2421
2422         /* We got one SIGCHLD for the service, let's watch all
2423          * processes that are now running of the service, and watch
2424          * that. Among the PIDs we then watch will be children
2425          * reassigned to us, which hopefully allows us to identify
2426          * when all children are gone */
2427         unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
2428         unit_watch_all_pids(u);
2429
2430         /* If the PID set is empty now, then let's finish this off */
2431         if (set_isempty(u->pids))
2432                 service_notify_cgroup_empty_event(u);
2433 }
2434
2435 static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
2436         Service *s = SERVICE(userdata);
2437
2438         assert(s);
2439         assert(source == s->timer_event_source);
2440
2441         switch (s->state) {
2442
2443         case SERVICE_START_PRE:
2444         case SERVICE_START:
2445                 log_warning_unit(UNIT(s)->id, "%s %s operation timed out. Terminating.", UNIT(s)->id, s->state == SERVICE_START ? "start" : "start-pre");
2446                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
2447                 break;
2448
2449         case SERVICE_START_POST:
2450                 log_warning_unit(UNIT(s)->id, "%s start-post operation timed out. Stopping.", UNIT(s)->id);
2451                 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
2452                 break;
2453
2454         case SERVICE_RELOAD:
2455                 log_warning_unit(UNIT(s)->id, "%s reload operation timed out. Stopping.", UNIT(s)->id);
2456                 s->reload_result = SERVICE_FAILURE_TIMEOUT;
2457                 service_enter_running(s, SERVICE_SUCCESS);
2458                 break;
2459
2460         case SERVICE_STOP:
2461                 log_warning_unit(UNIT(s)->id, "%s stopping timed out. Terminating.", UNIT(s)->id);
2462                 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
2463                 break;
2464
2465         case SERVICE_STOP_SIGTERM:
2466                 if (s->kill_context.send_sigkill) {
2467                         log_warning_unit(UNIT(s)->id, "%s stop-sigterm timed out. Killing.", UNIT(s)->id);
2468                         service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
2469                 } else {
2470                         log_warning_unit(UNIT(s)->id, "%s stop-sigterm timed out. Skipping SIGKILL.", UNIT(s)->id);
2471                         service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
2472                 }
2473
2474                 break;
2475
2476         case SERVICE_STOP_SIGKILL:
2477                 /* Uh, we sent a SIGKILL and it is still not gone?
2478                  * Must be something we cannot kill, so let's just be
2479                  * weirded out and continue */
2480
2481                 log_warning_unit(UNIT(s)->id, "%s still around after SIGKILL. Ignoring.", UNIT(s)->id);
2482                 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
2483                 break;
2484
2485         case SERVICE_STOP_POST:
2486                 log_warning_unit(UNIT(s)->id, "%s stop-post timed out. Terminating.", UNIT(s)->id);
2487                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
2488                 break;
2489
2490         case SERVICE_FINAL_SIGTERM:
2491                 if (s->kill_context.send_sigkill) {
2492                         log_warning_unit(UNIT(s)->id, "%s stop-final-sigterm timed out. Killing.", UNIT(s)->id);
2493                         service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
2494                 } else {
2495                         log_warning_unit(UNIT(s)->id, "%s stop-final-sigterm timed out. Skipping SIGKILL. Entering failed mode.", UNIT(s)->id);
2496                         service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
2497                 }
2498
2499                 break;
2500
2501         case SERVICE_FINAL_SIGKILL:
2502                 log_warning_unit(UNIT(s)->id, "%s still around after final SIGKILL. Entering failed mode.", UNIT(s)->id);
2503                 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
2504                 break;
2505
2506         case SERVICE_AUTO_RESTART:
2507                 log_info_unit(UNIT(s)->id,
2508                               s->restart_usec > 0 ?
2509                               "%s holdoff time over, scheduling restart." :
2510                               "%s has no holdoff time, scheduling restart.",
2511                               UNIT(s)->id);
2512                 service_enter_restart(s);
2513                 break;
2514
2515         default:
2516                 assert_not_reached("Timeout at wrong time.");
2517         }
2518
2519         return 0;
2520 }
2521
2522 static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
2523         Service *s = SERVICE(userdata);
2524         char t[FORMAT_TIMESPAN_MAX];
2525
2526         assert(s);
2527         assert(source == s->watchdog_event_source);
2528
2529         log_error_unit(UNIT(s)->id, "%s watchdog timeout (limit %s)!", UNIT(s)->id,
2530                        format_timespan(t, sizeof(t), s->watchdog_usec, 1));
2531
2532         service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_WATCHDOG);
2533
2534         return 0;
2535 }
2536
2537 static void service_notify_message(Unit *u, pid_t pid, char **tags) {
2538         Service *s = SERVICE(u);
2539         _cleanup_free_ char *cc = NULL;
2540         bool notify_dbus = false;
2541         const char *e;
2542
2543         assert(u);
2544
2545         cc = strv_join(tags, ", ");
2546         log_debug_unit(u->id, "%s: Got notification message from PID "PID_FMT" (%s)",
2547                        u->id, pid, isempty(cc) ? "n/a" : cc);
2548
2549         if (s->notify_access == NOTIFY_NONE) {
2550                 log_warning_unit(u->id, "%s: Got notification message from PID "PID_FMT", but reception is disabled.", u->id, pid);
2551                 return;
2552         }
2553
2554         if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
2555                 if (s->main_pid != 0)
2556                         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);
2557                 else
2558                         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);
2559                 return;
2560         }
2561
2562         /* Interpret MAINPID= */
2563         e = strv_find_startswith(tags, "MAINPID=");
2564         if (e && IN_SET(s->state, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD)) {
2565                 if (parse_pid(e, &pid) < 0)
2566                         log_warning_unit(u->id, "Failed to parse MAINPID= field in notification message: %s", e);
2567                 else {
2568                         log_debug_unit(u->id, "%s: got MAINPID=%s", u->id, e);
2569
2570                         service_set_main_pid(s, pid);
2571                         unit_watch_pid(UNIT(s), pid);
2572                         notify_dbus = true;
2573                 }
2574         }
2575
2576         /* Interpret RELOADING= */
2577         if (strv_find(tags, "RELOADING=1")) {
2578
2579                 log_debug_unit(u->id, "%s: got RELOADING=1", u->id);
2580                 s->notify_state = NOTIFY_RELOADING;
2581
2582                 if (s->state == SERVICE_RUNNING)
2583                         service_enter_reload_by_notify(s);
2584
2585                 notify_dbus = true;
2586         }
2587
2588         /* Interpret READY= */
2589         if (strv_find(tags, "READY=1")) {
2590
2591                 log_debug_unit(u->id, "%s: got READY=1", u->id);
2592                 s->notify_state = NOTIFY_READY;
2593
2594                 /* Type=notify services inform us about completed
2595                  * initialization with READY=1 */
2596                 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START)
2597                         service_enter_start_post(s);
2598
2599                 /* Sending READY=1 while we are reloading informs us
2600                  * that the reloading is complete */
2601                 if (s->state == SERVICE_RELOAD && s->control_pid == 0)
2602                         service_enter_running(s, SERVICE_SUCCESS);
2603
2604                 notify_dbus = true;
2605         }
2606
2607         /* Interpret STOPPING= */
2608         if (strv_find(tags, "STOPPING=1")) {
2609
2610                 log_debug_unit(u->id, "%s: got STOPPING=1", u->id);
2611                 s->notify_state = NOTIFY_STOPPING;
2612
2613                 if (s->state == SERVICE_RUNNING)
2614                         service_enter_stop_by_notify(s);
2615
2616                 notify_dbus = true;
2617         }
2618
2619         /* Interpret STATUS= */
2620         e = strv_find_startswith(tags, "STATUS=");
2621         if (e) {
2622                 _cleanup_free_ char *t = NULL;
2623
2624                 if (!isempty(e)) {
2625                         if (!utf8_is_valid(e))
2626                                 log_warning_unit(u->id, "Status message in notification is not UTF-8 clean.");
2627                         else {
2628                                 log_debug_unit(u->id, "%s: got STATUS=%s", u->id, e);
2629
2630                                 t = strdup(e);
2631                                 if (!t)
2632                                         log_oom();
2633                         }
2634                 }
2635
2636                 if (!streq_ptr(s->status_text, t)) {
2637
2638                         free(s->status_text);
2639                         s->status_text = t;
2640                         t = NULL;
2641
2642                         notify_dbus = true;
2643                 }
2644         }
2645
2646         /* Interpret ERRNO= */
2647         e = strv_find_startswith(tags, "ERRNO=");
2648         if (e) {
2649                 int status_errno;
2650
2651                 if (safe_atoi(e, &status_errno) < 0 || status_errno < 0)
2652                         log_warning_unit(u->id, "Failed to parse ERRNO= field in notification message: %s", e);
2653                 else {
2654                         log_debug_unit(u->id, "%s: got ERRNO=%s", u->id, e);
2655
2656                         if (s->status_errno != status_errno) {
2657                                 s->status_errno = status_errno;
2658                                 notify_dbus = true;
2659                         }
2660                 }
2661         }
2662
2663         /* Interpret WATCHDOG= */
2664         if (strv_find(tags, "WATCHDOG=1")) {
2665                 log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
2666                 service_reset_watchdog(s);
2667         }
2668
2669         /* Notify clients about changed status or main pid */
2670         if (notify_dbus)
2671                 unit_add_to_dbus_queue(u);
2672 }
2673
2674 static int service_get_timeout(Unit *u, uint64_t *timeout) {
2675         Service *s = SERVICE(u);
2676         int r;
2677
2678         if (!s->timer_event_source)
2679                 return 0;
2680
2681         r = sd_event_source_get_time(s->timer_event_source, timeout);
2682         if (r < 0)
2683                 return r;
2684
2685         return 1;
2686 }
2687
2688 static void service_bus_name_owner_change(
2689                 Unit *u,
2690                 const char *name,
2691                 const char *old_owner,
2692                 const char *new_owner) {
2693
2694         Service *s = SERVICE(u);
2695         int r;
2696
2697         assert(s);
2698         assert(name);
2699
2700         assert(streq(s->bus_name, name));
2701         assert(old_owner || new_owner);
2702
2703         if (old_owner && new_owner)
2704                 log_debug_unit(u->id, "%s's D-Bus name %s changed owner from %s to %s", u->id, name, old_owner, new_owner);
2705         else if (old_owner)
2706                 log_debug_unit(u->id, "%s's D-Bus name %s no longer registered by %s", u->id, name, old_owner);
2707         else
2708                 log_debug_unit(u->id, "%s's D-Bus name %s now registered by %s", u->id, name, new_owner);
2709
2710         s->bus_name_good = !!new_owner;
2711
2712         if (s->type == SERVICE_DBUS) {
2713
2714                 /* service_enter_running() will figure out what to
2715                  * do */
2716                 if (s->state == SERVICE_RUNNING)
2717                         service_enter_running(s, SERVICE_SUCCESS);
2718                 else if (s->state == SERVICE_START && new_owner)
2719                         service_enter_start_post(s);
2720
2721         } else if (new_owner &&
2722                    s->main_pid <= 0 &&
2723                    (s->state == SERVICE_START ||
2724                     s->state == SERVICE_START_POST ||
2725                     s->state == SERVICE_RUNNING ||
2726                     s->state == SERVICE_RELOAD)) {
2727
2728                 _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL;
2729                 pid_t pid;
2730
2731                 /* Try to acquire PID from bus service */
2732
2733                 r = sd_bus_get_owner(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
2734                 if (r >= 0)
2735                         r = sd_bus_creds_get_pid(creds, &pid);
2736                 if (r >= 0) {
2737                         log_debug_unit(u->id, "%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
2738
2739                         service_set_main_pid(s, pid);
2740                         unit_watch_pid(UNIT(s), pid);
2741                 }
2742         }
2743 }
2744
2745 int service_set_socket_fd(Service *s, int fd, Socket *sock) {
2746         _cleanup_free_ char *peer = NULL;
2747         int r;
2748
2749         assert(s);
2750         assert(fd >= 0);
2751
2752         /* This is called by the socket code when instantiating a new
2753          * service for a stream socket and the socket needs to be
2754          * configured. */
2755
2756         if (UNIT(s)->load_state != UNIT_LOADED)
2757                 return -EINVAL;
2758
2759         if (s->socket_fd >= 0)
2760                 return -EBUSY;
2761
2762         if (s->state != SERVICE_DEAD)
2763                 return -EAGAIN;
2764
2765         if (getpeername_pretty(fd, &peer) >= 0) {
2766
2767                 if (UNIT(s)->description) {
2768                         _cleanup_free_ char *a;
2769
2770                         a = strjoin(UNIT(s)->description, " (", peer, ")", NULL);
2771                         if (!a)
2772                                 return -ENOMEM;
2773
2774                         r = unit_set_description(UNIT(s), a);
2775                 }  else
2776                         r = unit_set_description(UNIT(s), peer);
2777
2778                 if (r < 0)
2779                         return r;
2780         }
2781
2782         s->socket_fd = fd;
2783
2784         unit_ref_set(&s->accept_socket, UNIT(sock));
2785
2786         return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
2787 }
2788
2789 static void service_reset_failed(Unit *u) {
2790         Service *s = SERVICE(u);
2791
2792         assert(s);
2793
2794         if (s->state == SERVICE_FAILED)
2795                 service_set_state(s, SERVICE_DEAD);
2796
2797         s->result = SERVICE_SUCCESS;
2798         s->reload_result = SERVICE_SUCCESS;
2799
2800         RATELIMIT_RESET(s->start_limit);
2801 }
2802
2803 static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
2804         Service *s = SERVICE(u);
2805
2806         return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
2807 }
2808
2809 static const char* const service_state_table[_SERVICE_STATE_MAX] = {
2810         [SERVICE_DEAD] = "dead",
2811         [SERVICE_START_PRE] = "start-pre",
2812         [SERVICE_START] = "start",
2813         [SERVICE_START_POST] = "start-post",
2814         [SERVICE_RUNNING] = "running",
2815         [SERVICE_EXITED] = "exited",
2816         [SERVICE_RELOAD] = "reload",
2817         [SERVICE_STOP] = "stop",
2818         [SERVICE_STOP_SIGTERM] = "stop-sigterm",
2819         [SERVICE_STOP_SIGKILL] = "stop-sigkill",
2820         [SERVICE_STOP_POST] = "stop-post",
2821         [SERVICE_FINAL_SIGTERM] = "final-sigterm",
2822         [SERVICE_FINAL_SIGKILL] = "final-sigkill",
2823         [SERVICE_FAILED] = "failed",
2824         [SERVICE_AUTO_RESTART] = "auto-restart",
2825 };
2826
2827 DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
2828
2829 static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
2830         [SERVICE_RESTART_NO] = "no",
2831         [SERVICE_RESTART_ON_SUCCESS] = "on-success",
2832         [SERVICE_RESTART_ON_FAILURE] = "on-failure",
2833         [SERVICE_RESTART_ON_ABNORMAL] = "on-abnormal",
2834         [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
2835         [SERVICE_RESTART_ON_ABORT] = "on-abort",
2836         [SERVICE_RESTART_ALWAYS] = "always",
2837 };
2838
2839 DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
2840
2841 static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
2842         [SERVICE_SIMPLE] = "simple",
2843         [SERVICE_FORKING] = "forking",
2844         [SERVICE_ONESHOT] = "oneshot",
2845         [SERVICE_DBUS] = "dbus",
2846         [SERVICE_NOTIFY] = "notify",
2847         [SERVICE_IDLE] = "idle"
2848 };
2849
2850 DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
2851
2852 static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
2853         [SERVICE_EXEC_START_PRE] = "ExecStartPre",
2854         [SERVICE_EXEC_START] = "ExecStart",
2855         [SERVICE_EXEC_START_POST] = "ExecStartPost",
2856         [SERVICE_EXEC_RELOAD] = "ExecReload",
2857         [SERVICE_EXEC_STOP] = "ExecStop",
2858         [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
2859 };
2860
2861 DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
2862
2863 static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
2864         [NOTIFY_NONE] = "none",
2865         [NOTIFY_MAIN] = "main",
2866         [NOTIFY_ALL] = "all"
2867 };
2868
2869 DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
2870
2871 static const char* const notify_state_table[_NOTIFY_STATE_MAX] = {
2872         [NOTIFY_UNKNOWN] = "unknown",
2873         [NOTIFY_READY] = "ready",
2874         [NOTIFY_RELOADING] = "reloading",
2875         [NOTIFY_STOPPING] = "stopping",
2876 };
2877
2878 DEFINE_STRING_TABLE_LOOKUP(notify_state, NotifyState);
2879
2880 static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
2881         [SERVICE_SUCCESS] = "success",
2882         [SERVICE_FAILURE_RESOURCES] = "resources",
2883         [SERVICE_FAILURE_TIMEOUT] = "timeout",
2884         [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
2885         [SERVICE_FAILURE_SIGNAL] = "signal",
2886         [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
2887         [SERVICE_FAILURE_WATCHDOG] = "watchdog",
2888         [SERVICE_FAILURE_START_LIMIT] = "start-limit"
2889 };
2890
2891 DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
2892
2893 static const char* const failure_action_table[_SERVICE_FAILURE_ACTION_MAX] = {
2894         [SERVICE_FAILURE_ACTION_NONE] = "none",
2895         [SERVICE_FAILURE_ACTION_REBOOT] = "reboot",
2896         [SERVICE_FAILURE_ACTION_REBOOT_FORCE] = "reboot-force",
2897         [SERVICE_FAILURE_ACTION_REBOOT_IMMEDIATE] = "reboot-immediate"
2898 };
2899 DEFINE_STRING_TABLE_LOOKUP(failure_action, FailureAction);
2900
2901 const UnitVTable service_vtable = {
2902         .object_size = sizeof(Service),
2903         .exec_context_offset = offsetof(Service, exec_context),
2904         .cgroup_context_offset = offsetof(Service, cgroup_context),
2905         .kill_context_offset = offsetof(Service, kill_context),
2906         .exec_runtime_offset = offsetof(Service, exec_runtime),
2907
2908         .sections =
2909                 "Unit\0"
2910                 "Service\0"
2911                 "Install\0",
2912         .private_section = "Service",
2913
2914         .init = service_init,
2915         .done = service_done,
2916         .load = service_load,
2917
2918         .coldplug = service_coldplug,
2919
2920         .dump = service_dump,
2921
2922         .start = service_start,
2923         .stop = service_stop,
2924         .reload = service_reload,
2925
2926         .can_reload = service_can_reload,
2927
2928         .kill = service_kill,
2929
2930         .serialize = service_serialize,
2931         .deserialize_item = service_deserialize_item,
2932
2933         .active_state = service_active_state,
2934         .sub_state_to_string = service_sub_state_to_string,
2935
2936         .check_gc = service_check_gc,
2937         .check_snapshot = service_check_snapshot,
2938
2939         .sigchld_event = service_sigchld_event,
2940
2941         .reset_failed = service_reset_failed,
2942
2943         .notify_cgroup_empty = service_notify_cgroup_empty_event,
2944         .notify_message = service_notify_message,
2945
2946         .bus_name_owner_change = service_bus_name_owner_change,
2947
2948         .bus_interface = "org.freedesktop.systemd1.Service",
2949         .bus_vtable = bus_service_vtable,
2950         .bus_set_property = bus_service_set_property,
2951         .bus_commit_properties = bus_service_commit_properties,
2952
2953         .get_timeout = service_get_timeout,
2954         .can_transient = true,
2955
2956         .status_message_formats = {
2957                 .starting_stopping = {
2958                         [0] = "Starting %s...",
2959                         [1] = "Stopping %s...",
2960                 },
2961                 .finished_start_job = {
2962                         [JOB_DONE]       = "Started %s.",
2963                         [JOB_FAILED]     = "Failed to start %s.",
2964                         [JOB_DEPENDENCY] = "Dependency failed for %s.",
2965                         [JOB_TIMEOUT]    = "Timed out starting %s.",
2966                 },
2967                 .finished_stop_job = {
2968                         [JOB_DONE]       = "Stopped %s.",
2969                         [JOB_FAILED]     = "Stopped (with error) %s.",
2970                         [JOB_TIMEOUT]    = "Timed out stopping %s.",
2971                 },
2972         },
2973 };