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