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