]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/service.c
hwdb: add axis override for Dell Inspiron MM061 touchpad (#8226)
[thirdparty/systemd.git] / src / core / service.c
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
a7334b09
LP
2/***
3 This file is part of systemd.
4
5 Copyright 2010 Lennart Poettering
6
7 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
8 under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
10 (at your option) any later version.
11
12 systemd is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 15 Lesser General Public License for more details.
a7334b09 16
5430f7f2 17 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
18 along with systemd; If not, see <http://www.gnu.org/licenses/>.
19***/
20
5cb5a6ff 21#include <errno.h>
034c6ed7 22#include <signal.h>
2c4104f0 23#include <unistd.h>
5cb5a6ff 24
7a0019d3
LP
25#include "sd-messages.h"
26
b5efdb8a 27#include "alloc-util.h"
574634bc 28#include "async.h"
4f5dd394
LP
29#include "bus-error.h"
30#include "bus-kernel.h"
31#include "bus-util.h"
4139c1b2 32#include "dbus-service.h"
f6a6225e 33#include "def.h"
4d1a6904 34#include "env-util.h"
4f5dd394
LP
35#include "escape.h"
36#include "exit-status.h"
3ffd4af2 37#include "fd-util.h"
a5c32cff 38#include "fileio.h"
f97b34a6 39#include "format-util.h"
f4f15635 40#include "fs-util.h"
4f5dd394
LP
41#include "load-dropin.h"
42#include "load-fragment.h"
43#include "log.h"
44#include "manager.h"
6bedfcbb 45#include "parse-util.h"
4f5dd394 46#include "path-util.h"
0b452006 47#include "process-util.h"
3ffd4af2 48#include "service.h"
24882e06 49#include "signal-util.h"
4f5dd394 50#include "special.h"
e266c068 51#include "stdio-util.h"
8b43440b 52#include "string-table.h"
07630cea 53#include "string-util.h"
4f5dd394
LP
54#include "strv.h"
55#include "unit-name.h"
4f5dd394
LP
56#include "unit.h"
57#include "utf8.h"
58#include "util.h"
034c6ed7 59
acbb0225 60static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
87f0e418
LP
61 [SERVICE_DEAD] = UNIT_INACTIVE,
62 [SERVICE_START_PRE] = UNIT_ACTIVATING,
63 [SERVICE_START] = UNIT_ACTIVATING,
64 [SERVICE_START_POST] = UNIT_ACTIVATING,
65 [SERVICE_RUNNING] = UNIT_ACTIVE,
80876c20 66 [SERVICE_EXITED] = UNIT_ACTIVE,
032ff4af 67 [SERVICE_RELOAD] = UNIT_RELOADING,
87f0e418 68 [SERVICE_STOP] = UNIT_DEACTIVATING,
db2cb23b 69 [SERVICE_STOP_SIGABRT] = UNIT_DEACTIVATING,
87f0e418
LP
70 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
71 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
72 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
73 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
74 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
fdf20a31 75 [SERVICE_FAILED] = UNIT_FAILED,
6124958c 76 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
034c6ed7 77};
5cb5a6ff 78
e056b01d
LP
79/* For Type=idle we never want to delay any other jobs, hence we
80 * consider idle jobs active as soon as we start working on them */
81static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] = {
82 [SERVICE_DEAD] = UNIT_INACTIVE,
83 [SERVICE_START_PRE] = UNIT_ACTIVE,
84 [SERVICE_START] = UNIT_ACTIVE,
85 [SERVICE_START_POST] = UNIT_ACTIVE,
86 [SERVICE_RUNNING] = UNIT_ACTIVE,
87 [SERVICE_EXITED] = UNIT_ACTIVE,
88 [SERVICE_RELOAD] = UNIT_RELOADING,
89 [SERVICE_STOP] = UNIT_DEACTIVATING,
db2cb23b 90 [SERVICE_STOP_SIGABRT] = UNIT_DEACTIVATING,
e056b01d
LP
91 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
92 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
93 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
94 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
95 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
96 [SERVICE_FAILED] = UNIT_FAILED,
97 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
98};
99
718db961
LP
100static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata);
101static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
102static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata);
103
842129f5 104static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
308d72dc 105static void service_enter_reload_by_notify(Service *s);
842129f5 106
a16e1123
LP
107static void service_init(Unit *u) {
108 Service *s = SERVICE(u);
109
110 assert(u);
ac155bb8 111 assert(u->load_state == UNIT_STUB);
a16e1123 112
1f19a534
OS
113 s->timeout_start_usec = u->manager->default_timeout_start_usec;
114 s->timeout_stop_usec = u->manager->default_timeout_stop_usec;
115 s->restart_usec = u->manager->default_restart_usec;
36c16a7c 116 s->runtime_max_usec = USEC_INFINITY;
0b86feac 117 s->type = _SERVICE_TYPE_INVALID;
a16e1123 118 s->socket_fd = -1;
a34ceba6 119 s->stdin_fd = s->stdout_fd = s->stderr_fd = -1;
3185a36b 120 s->guess_main_pid = true;
a16e1123 121
a16e1123
LP
122 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
123}
124
5e94833f
LP
125static void service_unwatch_control_pid(Service *s) {
126 assert(s);
127
128 if (s->control_pid <= 0)
129 return;
130
131 unit_unwatch_pid(UNIT(s), s->control_pid);
132 s->control_pid = 0;
133}
134
135static void service_unwatch_main_pid(Service *s) {
136 assert(s);
137
138 if (s->main_pid <= 0)
139 return;
140
141 unit_unwatch_pid(UNIT(s), s->main_pid);
142 s->main_pid = 0;
143}
144
3e52541e
MS
145static void service_unwatch_pid_file(Service *s) {
146 if (!s->pid_file_pathspec)
147 return;
148
f2341e0a 149 log_unit_debug(UNIT(s), "Stopping watch for PID file %s", s->pid_file_pathspec->path);
718db961 150 path_spec_unwatch(s->pid_file_pathspec);
3e52541e 151 path_spec_done(s->pid_file_pathspec);
a1e58e8e 152 s->pid_file_pathspec = mfree(s->pid_file_pathspec);
3e52541e
MS
153}
154
5925dd3c 155static int service_set_main_pid(Service *s, pid_t pid) {
e55224ca
LP
156 pid_t ppid;
157
5925dd3c
LP
158 assert(s);
159
160 if (pid <= 1)
161 return -EINVAL;
162
df0ff127 163 if (pid == getpid_cached())
5925dd3c
LP
164 return -EINVAL;
165
7400b9d2
LP
166 if (s->main_pid == pid && s->main_pid_known)
167 return 0;
168
169 if (s->main_pid != pid) {
170 service_unwatch_main_pid(s);
171 exec_status_start(&s->main_exec_status, pid);
172 }
41efeaec 173
6dfa5494
LP
174 s->main_pid = pid;
175 s->main_pid_known = true;
176
df0ff127 177 if (get_process_ppid(pid, &ppid) >= 0 && ppid != getpid_cached()) {
f2341e0a 178 log_unit_warning(UNIT(s), "Supervising process "PID_FMT" which is not our child. We'll most likely not notice when it exits.", pid);
6dfa5494
LP
179 s->main_pid_alien = true;
180 } else
181 s->main_pid_alien = false;
5925dd3c
LP
182
183 return 0;
184}
185
3e7a1f50 186void service_close_socket_fd(Service *s) {
4f2d528d
LP
187 assert(s);
188
5cc3985e 189 /* Undo the effect of service_set_socket_fd(). */
4f2d528d 190
5cc3985e 191 s->socket_fd = asynchronous_close(s->socket_fd);
6cf6bbc2 192
5cc3985e
LP
193 if (UNIT_ISSET(s->accept_socket)) {
194 socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
195 unit_ref_unset(&s->accept_socket);
196 }
6cf6bbc2
LP
197}
198
a6927d7f
MO
199static void service_stop_watchdog(Service *s) {
200 assert(s);
201
718db961 202 s->watchdog_event_source = sd_event_source_unref(s->watchdog_event_source);
842129f5 203 s->watchdog_timestamp = DUAL_TIMESTAMP_NULL;
a6927d7f
MO
204}
205
2787d83c
M
206static usec_t service_get_watchdog_usec(Service *s) {
207 assert(s);
208
209 if (s->watchdog_override_enable)
210 return s->watchdog_override_usec;
211 else
212 return s->watchdog_usec;
213}
214
842129f5 215static void service_start_watchdog(Service *s) {
bb242b7b 216 int r;
2787d83c 217 usec_t watchdog_usec;
bb242b7b
MO
218
219 assert(s);
220
2787d83c 221 watchdog_usec = service_get_watchdog_usec(s);
4c701096 222 if (IN_SET(watchdog_usec, 0, USEC_INFINITY))
bb242b7b
MO
223 return;
224
718db961 225 if (s->watchdog_event_source) {
2787d83c 226 r = sd_event_source_set_time(s->watchdog_event_source, usec_add(s->watchdog_timestamp.monotonic, watchdog_usec));
718db961 227 if (r < 0) {
f2341e0a 228 log_unit_warning_errno(UNIT(s), r, "Failed to reset watchdog timer: %m");
718db961
LP
229 return;
230 }
231
842129f5 232 r = sd_event_source_set_enabled(s->watchdog_event_source, SD_EVENT_ONESHOT);
c4ef3317 233 } else {
6a0f1f6d
LP
234 r = sd_event_add_time(
235 UNIT(s)->manager->event,
236 &s->watchdog_event_source,
237 CLOCK_MONOTONIC,
2787d83c 238 usec_add(s->watchdog_timestamp.monotonic, watchdog_usec), 0,
6a0f1f6d 239 service_dispatch_watchdog, s);
c4ef3317 240 if (r < 0) {
f2341e0a 241 log_unit_warning_errno(UNIT(s), r, "Failed to add watchdog timer: %m");
c4ef3317
LP
242 return;
243 }
244
7dfbe2e3
TG
245 (void) sd_event_source_set_description(s->watchdog_event_source, "service-watchdog");
246
c4ef3317
LP
247 /* Let's process everything else which might be a sign
248 * of living before we consider a service died. */
249 r = sd_event_source_set_priority(s->watchdog_event_source, SD_EVENT_PRIORITY_IDLE);
250 }
718db961 251
bb242b7b 252 if (r < 0)
f2341e0a 253 log_unit_warning_errno(UNIT(s), r, "Failed to install watchdog timer: %m");
bb242b7b
MO
254}
255
a327431b
DB
256static void service_extend_timeout(Service *s, usec_t extend_timeout_usec) {
257 assert(s);
258
259 if (s->timer_event_source) {
260 uint64_t current = 0, extended = 0;
261 int r;
262
263 if (IN_SET(extend_timeout_usec, 0, USEC_INFINITY))
264 return;
265
266 extended = usec_add(now(CLOCK_MONOTONIC), extend_timeout_usec);
267
268 r = sd_event_source_get_time(s->timer_event_source, &current);
269 if (r < 0)
270 log_unit_error_errno(UNIT(s), r, "Failed to retrieve timeout timer: %m");
271 else if (extended > current) {
272 r = sd_event_source_set_time(s->timer_event_source, extended);
273 if (r < 0)
274 log_unit_warning_errno(UNIT(s), r, "Failed to set timeout timer: %m");
275 }
276
277 if (s->watchdog_event_source) {
278 /* extend watchdog if necessary. We've asked for an extended timeout so we
279 * shouldn't expect a watchdog timeout in the interval in between */
280 r = sd_event_source_get_time(s->watchdog_event_source, &current);
281 if (r < 0) {
282 log_unit_error_errno(UNIT(s), r, "Failed to retrieve watchdog timer: %m");
283 return;
284 }
285
286 if (extended > current) {
287 r = sd_event_source_set_time(s->watchdog_event_source, extended);
288 if (r < 0)
289 log_unit_warning_errno(UNIT(s), r, "Failed to set watchdog timer: %m");
290 }
291 }
292 }
293}
294
a6927d7f
MO
295static void service_reset_watchdog(Service *s) {
296 assert(s);
297
298 dual_timestamp_get(&s->watchdog_timestamp);
842129f5 299 service_start_watchdog(s);
a6927d7f
MO
300}
301
2787d83c
M
302static void service_reset_watchdog_timeout(Service *s, usec_t watchdog_override_usec) {
303 assert(s);
304
305 s->watchdog_override_enable = true;
306 s->watchdog_override_usec = watchdog_override_usec;
307 service_reset_watchdog(s);
308
309 log_unit_debug(UNIT(s), "watchdog_usec="USEC_FMT, s->watchdog_usec);
310 log_unit_debug(UNIT(s), "watchdog_override_usec="USEC_FMT, s->watchdog_override_usec);
311}
312
a354329f
LP
313static void service_fd_store_unlink(ServiceFDStore *fs) {
314
315 if (!fs)
316 return;
317
318 if (fs->service) {
319 assert(fs->service->n_fd_store > 0);
320 LIST_REMOVE(fd_store, fs->service->fd_store, fs);
321 fs->service->n_fd_store--;
322 }
323
324 if (fs->event_source) {
325 sd_event_source_set_enabled(fs->event_source, SD_EVENT_OFF);
326 sd_event_source_unref(fs->event_source);
327 }
328
8dd4c05b 329 free(fs->fdname);
a354329f
LP
330 safe_close(fs->fd);
331 free(fs);
332}
333
f0bfbfac
ZJS
334static void service_release_fd_store(Service *s) {
335 assert(s);
336
7eb2a8a1
LP
337 if (s->n_keep_fd_store > 0)
338 return;
339
f0bfbfac
ZJS
340 log_unit_debug(UNIT(s), "Releasing all stored fds");
341 while (s->fd_store)
342 service_fd_store_unlink(s->fd_store);
343
344 assert(s->n_fd_store == 0);
345}
346
7eb2a8a1 347static void service_release_resources(Unit *u) {
a354329f
LP
348 Service *s = SERVICE(u);
349
350 assert(s);
351
a34ceba6 352 if (!s->fd_store && s->stdin_fd < 0 && s->stdout_fd < 0 && s->stderr_fd < 0)
a354329f
LP
353 return;
354
f0bfbfac 355 log_unit_debug(u, "Releasing resources.");
a354329f 356
a34ceba6
LP
357 s->stdin_fd = safe_close(s->stdin_fd);
358 s->stdout_fd = safe_close(s->stdout_fd);
359 s->stderr_fd = safe_close(s->stderr_fd);
360
7eb2a8a1 361 service_release_fd_store(s);
a354329f
LP
362}
363
87f0e418
LP
364static void service_done(Unit *u) {
365 Service *s = SERVICE(u);
44d8db9e
LP
366
367 assert(s);
368
a1e58e8e
LP
369 s->pid_file = mfree(s->pid_file);
370 s->status_text = mfree(s->status_text);
efe6e7d3 371
e8a565cb 372 s->exec_runtime = exec_runtime_unref(s->exec_runtime, false);
e537352b 373 exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
44d8db9e 374 s->control_command = NULL;
867b3b7d 375 s->main_command = NULL;
44d8db9e 376
29206d46
LP
377 dynamic_creds_unref(&s->dynamic_creds);
378
37520c1b
LP
379 exit_status_set_free(&s->restart_prevent_status);
380 exit_status_set_free(&s->restart_force_status);
381 exit_status_set_free(&s->success_status);
96342de6 382
44d8db9e
LP
383 /* This will leak a process, but at least no memory or any of
384 * our resources */
5e94833f
LP
385 service_unwatch_main_pid(s);
386 service_unwatch_control_pid(s);
3e52541e 387 service_unwatch_pid_file(s);
44d8db9e 388
05e343b7 389 if (s->bus_name) {
ac155bb8 390 unit_unwatch_bus_name(u, s->bus_name);
a1e58e8e 391 s->bus_name = mfree(s->bus_name);
05e343b7
LP
392 }
393
d8ccf5fd
DM
394 s->bus_name_owner = mfree(s->bus_name_owner);
395
4f2d528d 396 service_close_socket_fd(s);
9d565427 397 s->peer = socket_peer_unref(s->peer);
4f2d528d 398
57020a3a 399 unit_ref_unset(&s->accept_socket);
f976f3f6 400
bb242b7b
MO
401 service_stop_watchdog(s);
402
718db961 403 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
a354329f 404
7eb2a8a1 405 service_release_resources(u);
718db961
LP
406}
407
2339fc93
LP
408static int on_fd_store_io(sd_event_source *e, int fd, uint32_t revents, void *userdata) {
409 ServiceFDStore *fs = userdata;
410
411 assert(e);
412 assert(fs);
413
414 /* If we get either EPOLLHUP or EPOLLERR, it's time to remove this entry from the fd store */
16f70d63
ZJS
415 log_unit_debug(UNIT(fs->service),
416 "Received %s on stored fd %d (%s), closing.",
417 revents & EPOLLERR ? "EPOLLERR" : "EPOLLHUP",
418 fs->fd, strna(fs->fdname));
2339fc93
LP
419 service_fd_store_unlink(fs);
420 return 0;
421}
422
8dd4c05b 423static int service_add_fd_store(Service *s, int fd, const char *name) {
2339fc93
LP
424 ServiceFDStore *fs;
425 int r;
426
9021ff17
ZJS
427 /* fd is always consumed if we return >= 0 */
428
2339fc93
LP
429 assert(s);
430 assert(fd >= 0);
431
432 if (s->n_fd_store >= s->n_fd_store_max)
b0924635
ZJS
433 return -EXFULL; /* Our store is full.
434 * Use this errno rather than E[NM]FILE to distinguish from
435 * the case where systemd itself hits the file limit. */
2339fc93
LP
436
437 LIST_FOREACH(fd_store, fs, s->fd_store) {
438 r = same_fd(fs->fd, fd);
439 if (r < 0)
440 return r;
441 if (r > 0) {
2339fc93 442 safe_close(fd);
9021ff17 443 return 0; /* fd already included */
2339fc93
LP
444 }
445 }
446
447 fs = new0(ServiceFDStore, 1);
448 if (!fs)
449 return -ENOMEM;
450
451 fs->fd = fd;
452 fs->service = s;
8dd4c05b 453 fs->fdname = strdup(name ?: "stored");
17dec0f7 454 if (!fs->fdname) {
455 free(fs);
8dd4c05b 456 return -ENOMEM;
17dec0f7 457 }
2339fc93
LP
458
459 r = sd_event_add_io(UNIT(s)->manager->event, &fs->event_source, fd, 0, on_fd_store_io, fs);
3ceb72e5 460 if (r < 0 && r != -EPERM) { /* EPERM indicates fds that aren't pollable, which is OK */
8dd4c05b 461 free(fs->fdname);
2339fc93
LP
462 free(fs);
463 return r;
3ceb72e5
LP
464 } else if (r >= 0)
465 (void) sd_event_source_set_description(fs->event_source, "service-fd-store");
7dfbe2e3 466
2339fc93
LP
467 LIST_PREPEND(fd_store, s->fd_store, fs);
468 s->n_fd_store++;
469
9021ff17 470 return 1; /* fd newly stored */
2339fc93
LP
471}
472
8dd4c05b 473static int service_add_fd_store_set(Service *s, FDSet *fds, const char *name) {
2339fc93
LP
474 int r;
475
476 assert(s);
477
b0924635 478 while (fdset_size(fds) > 0) {
2339fc93
LP
479 _cleanup_close_ int fd = -1;
480
481 fd = fdset_steal_first(fds);
482 if (fd < 0)
483 break;
484
8dd4c05b 485 r = service_add_fd_store(s, fd, name);
b0924635
ZJS
486 if (r == -EXFULL)
487 return log_unit_warning_errno(UNIT(s), r,
488 "Cannot store more fds than FileDescriptorStoreMax=%u, closing remaining.",
489 s->n_fd_store_max);
2339fc93 490 if (r < 0)
b0924635 491 return log_unit_error_errno(UNIT(s), r, "Failed to add fd to store: %m");
9021ff17 492 if (r > 0)
16f70d63 493 log_unit_debug(UNIT(s), "Added fd %u (%s) to fd store.", fd, strna(name));
9021ff17 494 fd = -1;
2339fc93
LP
495 }
496
2339fc93
LP
497 return 0;
498}
499
e78ee06d
LP
500static void service_remove_fd_store(Service *s, const char *name) {
501 ServiceFDStore *fs, *n;
502
503 assert(s);
504 assert(name);
505
506 LIST_FOREACH_SAFE(fd_store, fs, n, s->fd_store) {
507 if (!streq(fs->fdname, name))
508 continue;
509
510 log_unit_debug(UNIT(s), "Got explicit request to remove fd %i (%s), closing.", fs->fd, name);
511 service_fd_store_unlink(fs);
512 }
513}
514
718db961
LP
515static int service_arm_timer(Service *s, usec_t usec) {
516 int r;
517
518 assert(s);
519
718db961 520 if (s->timer_event_source) {
36c16a7c 521 r = sd_event_source_set_time(s->timer_event_source, usec);
718db961
LP
522 if (r < 0)
523 return r;
524
525 return sd_event_source_set_enabled(s->timer_event_source, SD_EVENT_ONESHOT);
526 }
527
36c16a7c
LP
528 if (usec == USEC_INFINITY)
529 return 0;
530
7dfbe2e3 531 r = sd_event_add_time(
6a0f1f6d
LP
532 UNIT(s)->manager->event,
533 &s->timer_event_source,
534 CLOCK_MONOTONIC,
36c16a7c 535 usec, 0,
6a0f1f6d 536 service_dispatch_timer, s);
7dfbe2e3
TG
537 if (r < 0)
538 return r;
539
540 (void) sd_event_source_set_description(s->timer_event_source, "service-timer");
541
542 return 0;
44d8db9e
LP
543}
544
243b1432
LP
545static int service_verify(Service *s) {
546 assert(s);
547
1124fe6f 548 if (UNIT(s)->load_state != UNIT_LOADED)
243b1432
LP
549 return 0;
550
96fb8242 551 if (!s->exec_command[SERVICE_EXEC_START] && !s->exec_command[SERVICE_EXEC_STOP]) {
f2341e0a 552 log_unit_error(UNIT(s), "Service lacks both ExecStart= and ExecStop= setting. Refusing.");
243b1432
LP
553 return -EINVAL;
554 }
555
96fb8242 556 if (s->type != SERVICE_ONESHOT && !s->exec_command[SERVICE_EXEC_START]) {
f2341e0a 557 log_unit_error(UNIT(s), "Service has no ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
96fb8242
LP
558 return -EINVAL;
559 }
560
561 if (!s->remain_after_exit && !s->exec_command[SERVICE_EXEC_START]) {
f2341e0a 562 log_unit_error(UNIT(s), "Service has no ExecStart= setting, which is only allowed for RemainAfterExit=yes services. Refusing.");
96fb8242
LP
563 return -EINVAL;
564 }
565
566 if (s->type != SERVICE_ONESHOT && s->exec_command[SERVICE_EXEC_START]->command_next) {
f2341e0a 567 log_unit_error(UNIT(s), "Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.");
6cf6bbc2
LP
568 return -EINVAL;
569 }
570
b0693d30 571 if (s->type == SERVICE_ONESHOT && s->restart != SERVICE_RESTART_NO) {
f2341e0a 572 log_unit_error(UNIT(s), "Service has Restart= setting other than no, which isn't allowed for Type=oneshot services. Refusing.");
37520c1b
LP
573 return -EINVAL;
574 }
575
55ebf98c 576 if (s->type == SERVICE_ONESHOT && !exit_status_set_is_empty(&s->restart_force_status)) {
f2341e0a 577 log_unit_error(UNIT(s), "Service has RestartForceStatus= set, which isn't allowed for Type=oneshot services. Refusing.");
b0693d30
MW
578 return -EINVAL;
579 }
580
05e343b7 581 if (s->type == SERVICE_DBUS && !s->bus_name) {
f2341e0a 582 log_unit_error(UNIT(s), "Service is of type D-Bus but no D-Bus service name has been specified. Refusing.");
4d0e5dbd
LP
583 return -EINVAL;
584 }
585
7e2668c6 586 if (s->bus_name && s->type != SERVICE_DBUS)
f2341e0a 587 log_unit_warning(UNIT(s), "Service has a D-Bus service name specified, but is not of type dbus. Ignoring.");
7e2668c6 588
3742095b 589 if (s->exec_context.pam_name && !IN_SET(s->kill_context.kill_mode, KILL_CONTROL_GROUP, KILL_MIXED)) {
f2341e0a 590 log_unit_error(UNIT(s), "Service has PAM enabled. Kill mode must be set to 'control-group' or 'mixed'. Refusing.");
05e343b7
LP
591 return -EINVAL;
592 }
593
6b7e5923
PS
594 if (s->usb_function_descriptors && !s->usb_function_strings)
595 log_unit_warning(UNIT(s), "Service has USBFunctionDescriptors= setting, but no USBFunctionStrings=. Ignoring.");
596
597 if (!s->usb_function_descriptors && s->usb_function_strings)
598 log_unit_warning(UNIT(s), "Service has USBFunctionStrings= setting, but no USBFunctionDescriptors=. Ignoring.");
599
36c16a7c
LP
600 if (s->runtime_max_usec != USEC_INFINITY && s->type == SERVICE_ONESHOT)
601 log_unit_warning(UNIT(s), "MaxRuntimeSec= has no effect in combination with Type=oneshot. Ignoring.");
602
243b1432
LP
603 return 0;
604}
605
a40eb732
LP
606static int service_add_default_dependencies(Service *s) {
607 int r;
608
609 assert(s);
610
45f06b34
LP
611 if (!UNIT(s)->default_dependencies)
612 return 0;
613
a40eb732
LP
614 /* Add a number of automatic dependencies useful for the
615 * majority of services. */
616
463d0d15 617 if (MANAGER_IS_SYSTEM(UNIT(s)->manager)) {
cb4c247d
LP
618 /* First, pull in the really early boot stuff, and
619 * require it, so that we fail if we can't acquire
620 * it. */
621
eef85c4a 622 r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SYSINIT_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT);
cb4c247d
LP
623 if (r < 0)
624 return r;
625 } else {
626
627 /* In the --user instance there's no sysinit.target,
628 * in that case require basic.target instead. */
629
eef85c4a 630 r = unit_add_dependency_by_name(UNIT(s), UNIT_REQUIRES, SPECIAL_BASIC_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT);
cb4c247d
LP
631 if (r < 0)
632 return r;
633 }
634
635 /* Second, if the rest of the base system is in the same
636 * transaction, order us after it, but do not pull it in or
637 * even require it. */
eef85c4a 638 r = unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, SPECIAL_BASIC_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT);
fccd44ec
KS
639 if (r < 0)
640 return r;
a40eb732 641
cb4c247d 642 /* Third, add us in for normal shutdown. */
eef85c4a 643 return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true, UNIT_DEPENDENCY_DEFAULT);
a40eb732
LP
644}
645
4dfc092a
LP
646static void service_fix_output(Service *s) {
647 assert(s);
648
08f3be7a
LP
649 /* If nothing has been explicitly configured, patch default output in. If input is socket/tty we avoid this
650 * however, since in that case we want output to default to the same place as we read input from. */
4dfc092a
LP
651
652 if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
653 s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
654 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 655 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
4dfc092a
LP
656
657 if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
658 s->exec_context.std_input == EXEC_INPUT_NULL)
1124fe6f 659 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
08f3be7a
LP
660
661 if (s->exec_context.std_input == EXEC_INPUT_NULL &&
662 s->exec_context.stdin_data_size > 0)
663 s->exec_context.std_input = EXEC_INPUT_DATA;
4dfc092a
LP
664}
665
45f06b34
LP
666static int service_setup_bus_name(Service *s) {
667 int r;
668
669 assert(s);
670
671 if (!s->bus_name)
672 return 0;
673
eef85c4a 674 r = unit_add_dependency_by_name(UNIT(s), UNIT_REQUIRES, SPECIAL_DBUS_SOCKET, NULL, true, UNIT_DEPENDENCY_FILE);
222953e8
DR
675 if (r < 0)
676 return log_unit_error_errno(UNIT(s), r, "Failed to add dependency on " SPECIAL_DBUS_SOCKET ": %m");
45f06b34 677
a132bef0 678 /* We always want to be ordered against dbus.socket if both are in the transaction. */
eef85c4a 679 r = unit_add_dependency_by_name(UNIT(s), UNIT_AFTER, SPECIAL_DBUS_SOCKET, NULL, true, UNIT_DEPENDENCY_FILE);
45f06b34 680 if (r < 0)
92bed462 681 return log_unit_error_errno(UNIT(s), r, "Failed to add dependency on " SPECIAL_DBUS_SOCKET ": %m");
45f06b34
LP
682
683 r = unit_watch_bus_name(UNIT(s), s->bus_name);
684 if (r == -EEXIST)
685 return log_unit_error_errno(UNIT(s), r, "Two services allocated for the same bus name %s, refusing operation.", s->bus_name);
686 if (r < 0)
687 return log_unit_error_errno(UNIT(s), r, "Cannot watch bus name %s: %m", s->bus_name);
688
689 return 0;
690}
691
8545f7ce
LP
692static int service_add_extras(Service *s) {
693 int r;
694
695 assert(s);
696
697 if (s->type == _SERVICE_TYPE_INVALID) {
698 /* Figure out a type automatically */
699 if (s->bus_name)
700 s->type = SERVICE_DBUS;
701 else if (s->exec_command[SERVICE_EXEC_START])
702 s->type = SERVICE_SIMPLE;
703 else
704 s->type = SERVICE_ONESHOT;
705 }
706
707 /* Oneshot services have disabled start timeout by default */
708 if (s->type == SERVICE_ONESHOT && !s->start_timeout_defined)
36c16a7c 709 s->timeout_start_usec = USEC_INFINITY;
8545f7ce
LP
710
711 service_fix_output(s);
712
713 r = unit_patch_contexts(UNIT(s));
714 if (r < 0)
715 return r;
716
717 r = unit_add_exec_dependencies(UNIT(s), &s->exec_context);
718 if (r < 0)
719 return r;
720
d79200e2 721 r = unit_set_default_slice(UNIT(s));
8545f7ce
LP
722 if (r < 0)
723 return r;
724
725 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
726 s->notify_access = NOTIFY_MAIN;
727
728 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
729 s->notify_access = NOTIFY_MAIN;
730
45f06b34
LP
731 r = service_add_default_dependencies(s);
732 if (r < 0)
733 return r;
8545f7ce 734
45f06b34
LP
735 r = service_setup_bus_name(s);
736 if (r < 0)
737 return r;
8545f7ce
LP
738
739 return 0;
740}
741
e537352b 742static int service_load(Unit *u) {
e537352b 743 Service *s = SERVICE(u);
8bb2d17d 744 int r;
e537352b
LP
745
746 assert(s);
1e2e8133 747
5cb5a6ff 748 /* Load a .service file */
c2756a68
LP
749 r = unit_load_fragment(u);
750 if (r < 0)
5cb5a6ff
LP
751 return r;
752
23a177ef 753 /* Still nothing found? Then let's give up */
ac155bb8 754 if (u->load_state == UNIT_STUB)
23a177ef 755 return -ENOENT;
034c6ed7 756
23a177ef 757 /* This is a new unit? Then let's add in some extras */
ac155bb8 758 if (u->load_state == UNIT_LOADED) {
c2756a68
LP
759
760 /* We were able to load something, then let's add in
761 * the dropin directories. */
762 r = unit_load_dropin(u);
763 if (r < 0)
764 return r;
765
8545f7ce
LP
766 /* This is a new unit? Then let's add in some
767 * extras */
768 r = service_add_extras(s);
598459ce
LP
769 if (r < 0)
770 return r;
8e274523
LP
771 }
772
243b1432 773 return service_verify(s);
034c6ed7
LP
774}
775
87f0e418 776static void service_dump(Unit *u, FILE *f, const char *prefix) {
f2e18ef1
YW
777 char buf_restart[FORMAT_TIMESPAN_MAX], buf_start[FORMAT_TIMESPAN_MAX], buf_stop[FORMAT_TIMESPAN_MAX];
778 char buf_runtime[FORMAT_TIMESPAN_MAX], buf_watchdog[FORMAT_TIMESPAN_MAX];
5cb5a6ff 779 ServiceExecCommand c;
87f0e418 780 Service *s = SERVICE(u);
47be870b 781 const char *prefix2;
5cb5a6ff
LP
782
783 assert(s);
784
4c940960 785 prefix = strempty(prefix);
63c372cb 786 prefix2 = strjoina(prefix, "\t");
44d8db9e 787
5cb5a6ff 788 fprintf(f,
81a2b7ce 789 "%sService State: %s\n"
f42806df
LP
790 "%sResult: %s\n"
791 "%sReload Result: %s\n"
81a2b7ce 792 "%sPermissionsStartOnly: %s\n"
8e274523 793 "%sRootDirectoryStartOnly: %s\n"
02ee865a 794 "%sRemainAfterExit: %s\n"
3185a36b 795 "%sGuessMainPID: %s\n"
c952c6ec 796 "%sType: %s\n"
2cf3143a 797 "%sRestart: %s\n"
308d72dc
LP
798 "%sNotifyAccess: %s\n"
799 "%sNotifyState: %s\n",
81a2b7ce 800 prefix, service_state_to_string(s->state),
f42806df
LP
801 prefix, service_result_to_string(s->result),
802 prefix, service_result_to_string(s->reload_result),
81a2b7ce 803 prefix, yes_no(s->permissions_start_only),
8e274523 804 prefix, yes_no(s->root_directory_start_only),
02ee865a 805 prefix, yes_no(s->remain_after_exit),
3185a36b 806 prefix, yes_no(s->guess_main_pid),
c952c6ec 807 prefix, service_type_to_string(s->type),
2cf3143a 808 prefix, service_restart_to_string(s->restart),
308d72dc
LP
809 prefix, notify_access_to_string(s->notify_access),
810 prefix, notify_state_to_string(s->notify_state));
5cb5a6ff 811
70123e68
LP
812 if (s->control_pid > 0)
813 fprintf(f,
ccd06097
ZJS
814 "%sControl PID: "PID_FMT"\n",
815 prefix, s->control_pid);
70123e68
LP
816
817 if (s->main_pid > 0)
818 fprintf(f,
ccd06097 819 "%sMain PID: "PID_FMT"\n"
6dfa5494
LP
820 "%sMain PID Known: %s\n"
821 "%sMain PID Alien: %s\n",
ccd06097 822 prefix, s->main_pid,
6dfa5494
LP
823 prefix, yes_no(s->main_pid_known),
824 prefix, yes_no(s->main_pid_alien));
70123e68 825
034c6ed7
LP
826 if (s->pid_file)
827 fprintf(f,
828 "%sPIDFile: %s\n",
829 prefix, s->pid_file);
830
05e343b7
LP
831 if (s->bus_name)
832 fprintf(f,
833 "%sBusName: %s\n"
834 "%sBus Name Good: %s\n",
835 prefix, s->bus_name,
836 prefix, yes_no(s->bus_name_good));
837
9dfb64f8
ZJS
838 if (UNIT_ISSET(s->accept_socket))
839 fprintf(f,
840 "%sAccept Socket: %s\n",
841 prefix, UNIT_DEREF(s->accept_socket)->id);
842
c9d41699
YW
843 fprintf(f,
844 "%sRestartSec: %s\n"
845 "%sTimeoutStartSec: %s\n"
846 "%sTimeoutStopSec: %s\n"
847 "%sRuntimeMaxSec: %s\n"
848 "%sWatchdogSec: %s\n",
849 prefix, format_timespan(buf_restart, sizeof(buf_restart), s->restart_usec, USEC_PER_SEC),
850 prefix, format_timespan(buf_start, sizeof(buf_start), s->timeout_start_usec, USEC_PER_SEC),
851 prefix, format_timespan(buf_stop, sizeof(buf_stop), s->timeout_stop_usec, USEC_PER_SEC),
852 prefix, format_timespan(buf_runtime, sizeof(buf_runtime), s->runtime_max_usec, USEC_PER_SEC),
853 prefix, format_timespan(buf_watchdog, sizeof(buf_watchdog), s->watchdog_usec, USEC_PER_SEC));
854
4819ff03 855 kill_context_dump(&s->kill_context, f, prefix);
5cb5a6ff
LP
856 exec_context_dump(&s->exec_context, f, prefix);
857
e537352b 858 for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
5cb5a6ff 859
44d8db9e
LP
860 if (!s->exec_command[c])
861 continue;
862
40d50879 863 fprintf(f, "%s-> %s:\n",
94f04347 864 prefix, service_exec_command_to_string(c));
44d8db9e
LP
865
866 exec_command_dump_list(s->exec_command[c], f, prefix2);
5cb5a6ff 867 }
44d8db9e 868
8c47c732
LP
869 if (s->status_text)
870 fprintf(f, "%sStatus Text: %s\n",
871 prefix, s->status_text);
a354329f 872
ece174c5 873 if (s->n_fd_store_max > 0)
a354329f
LP
874 fprintf(f,
875 "%sFile Descriptor Store Max: %u\n"
876 "%sFile Descriptor Store Current: %u\n",
877 prefix, s->n_fd_store_max,
878 prefix, s->n_fd_store);
18f573aa
LP
879
880 cgroup_context_dump(&s->cgroup_context, f, prefix);
5cb5a6ff
LP
881}
882
db256aab
LP
883static int service_is_suitable_main_pid(Service *s, pid_t pid, int prio) {
884 Unit *owner;
885
886 assert(s);
887 assert(pid_is_valid(pid));
888
889 /* Checks whether the specified PID is suitable as main PID for this service. returns negative if not, 0 if the
890 * PID is questionnable but should be accepted if the source of configuration is trusted. > 0 if the PID is
891 * good */
892
893 if (pid == getpid_cached() || pid == 1) {
894 log_unit_full(UNIT(s), prio, 0, "New main PID "PID_FMT" is the manager, refusing.", pid);
895 return -EPERM;
896 }
897
898 if (pid == s->control_pid) {
899 log_unit_full(UNIT(s), prio, 0, "New main PID "PID_FMT" is the control process, refusing.", pid);
900 return -EPERM;
901 }
902
903 if (!pid_is_alive(pid)) {
904 log_unit_full(UNIT(s), prio, 0, "New main PID "PID_FMT" does not exist or is a zombie.", pid);
905 return -ESRCH;
906 }
907
908 owner = manager_get_unit_by_pid(UNIT(s)->manager, pid);
909 if (owner == UNIT(s)) {
910 log_unit_debug(UNIT(s), "New main PID "PID_FMT" belongs to service, we are happy.", pid);
911 return 1; /* Yay, it's definitely a good PID */
912 }
913
914 return 0; /* Hmm it's a suspicious PID, let's accept it if configuration source is trusted */
915}
916
c5419d42 917static int service_load_pid_file(Service *s, bool may_warn) {
db256aab 918 char procfs[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int)];
73969ab6 919 bool questionable_pid_file = false;
7fd1b19b 920 _cleanup_free_ char *k = NULL;
db256aab
LP
921 _cleanup_close_ int fd = -1;
922 int r, prio;
5925dd3c 923 pid_t pid;
034c6ed7
LP
924
925 assert(s);
926
034c6ed7 927 if (!s->pid_file)
13230d5d 928 return -ENOENT;
034c6ed7 929
db256aab
LP
930 prio = may_warn ? LOG_INFO : LOG_DEBUG;
931
932 fd = chase_symlinks(s->pid_file, NULL, CHASE_OPEN|CHASE_SAFE, NULL);
73969ab6
LP
933 if (fd == -EPERM) {
934 log_unit_full(UNIT(s), LOG_DEBUG, fd, "Permission denied while opening PID file or potentially unsafe symlink chain, will now retry with relaxed checks: %s", s->pid_file);
935
936 questionable_pid_file = true;
937
938 fd = chase_symlinks(s->pid_file, NULL, CHASE_OPEN, NULL);
939 }
db256aab
LP
940 if (fd < 0)
941 return log_unit_full(UNIT(s), prio, fd, "Can't open PID file %s (yet?) after %s: %m", s->pid_file, service_state_to_string(s->state));
942
943 /* Let's read the PID file now that we chased it down. But we need to convert the O_PATH fd chase_symlinks() returned us into a proper fd first. */
944 xsprintf(procfs, "/proc/self/fd/%i", fd);
945 r = read_one_line_file(procfs, &k);
946 if (r < 0)
947 return log_unit_error_errno(UNIT(s), r, "Can't convert PID files %s O_PATH file descriptor to proper file descriptor: %m", s->pid_file);
034c6ed7 948
5925dd3c 949 r = parse_pid(k, &pid);
db256aab
LP
950 if (r < 0)
951 return log_unit_full(UNIT(s), prio, r, "Failed to parse PID from file %s: %m", s->pid_file);
952
953 if (s->main_pid_known && pid == s->main_pid)
954 return 0;
955
956 r = service_is_suitable_main_pid(s, pid, prio);
957 if (r < 0)
5925dd3c 958 return r;
db256aab
LP
959 if (r == 0) {
960 struct stat st;
406eaf93 961
73969ab6
LP
962 if (questionable_pid_file) {
963 log_unit_error(UNIT(s), "Refusing to accept PID outside of service control group, acquired through unsafe symlink chain: %s", s->pid_file);
964 return -EPERM;
965 }
966
db256aab
LP
967 /* Hmm, it's not clear if the new main PID is safe. Let's allow this if the PID file is owned by root */
968
969 if (fstat(fd, &st) < 0)
970 return log_unit_error_errno(UNIT(s), errno, "Failed to fstat() PID file O_PATH fd: %m");
971
972 if (st.st_uid != 0) {
973 log_unit_error(UNIT(s), "New main PID "PID_FMT" does not belong to service, and PID file is not owned by root. Refusing.", pid);
974 return -EPERM;
975 }
976
977 log_unit_debug(UNIT(s), "New main PID "PID_FMT" does not belong to service, but we'll accept it since PID file is owned by root.", pid);
e10c9985
YS
978 }
979
db01f8b3 980 if (s->main_pid_known) {
f2341e0a 981 log_unit_debug(UNIT(s), "Main PID changing: "PID_FMT" -> "PID_FMT, s->main_pid, pid);
8bb2d17d 982
db01f8b3
MS
983 service_unwatch_main_pid(s);
984 s->main_pid_known = false;
3a111838 985 } else
f2341e0a 986 log_unit_debug(UNIT(s), "Main PID loaded: "PID_FMT, pid);
db01f8b3 987
117dcc57
ZJS
988 r = service_set_main_pid(s, pid);
989 if (r < 0)
16f6025e
LP
990 return r;
991
117dcc57 992 r = unit_watch_pid(UNIT(s), pid);
e8b509d3
LP
993 if (r < 0) /* FIXME: we need to do something here */
994 return log_unit_warning_errno(UNIT(s), r, "Failed to watch PID "PID_FMT" for service: %m", pid);
034c6ed7 995
db256aab 996 return 1;
034c6ed7
LP
997}
998
783e05d6 999static void service_search_main_pid(Service *s) {
efdb0237 1000 pid_t pid = 0;
4fbf50b3
LP
1001 int r;
1002
1003 assert(s);
1004
3185a36b
LP
1005 /* If we know it anyway, don't ever fallback to unreliable
1006 * heuristics */
4fbf50b3 1007 if (s->main_pid_known)
783e05d6 1008 return;
4fbf50b3 1009
3185a36b 1010 if (!s->guess_main_pid)
783e05d6 1011 return;
3185a36b 1012
4fbf50b3
LP
1013 assert(s->main_pid <= 0);
1014
783e05d6
ZJS
1015 if (unit_search_main_pid(UNIT(s), &pid) < 0)
1016 return;
4fbf50b3 1017
f2341e0a 1018 log_unit_debug(UNIT(s), "Main PID guessed: "PID_FMT, pid);
783e05d6
ZJS
1019 if (service_set_main_pid(s, pid) < 0)
1020 return;
4fbf50b3 1021
117dcc57 1022 r = unit_watch_pid(UNIT(s), pid);
783e05d6 1023 if (r < 0)
4fbf50b3 1024 /* FIXME: we need to do something here */
f2341e0a 1025 log_unit_warning_errno(UNIT(s), r, "Failed to watch PID "PID_FMT" from: %m", pid);
4fbf50b3
LP
1026}
1027
034c6ed7
LP
1028static void service_set_state(Service *s, ServiceState state) {
1029 ServiceState old_state;
e056b01d 1030 const UnitActiveState *table;
842129f5 1031
5cb5a6ff
LP
1032 assert(s);
1033
e056b01d
LP
1034 table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1035
034c6ed7 1036 old_state = s->state;
5cb5a6ff 1037 s->state = state;
034c6ed7 1038
3a111838
MS
1039 service_unwatch_pid_file(s);
1040
842129f5
LP
1041 if (!IN_SET(state,
1042 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
36c16a7c 1043 SERVICE_RUNNING,
842129f5 1044 SERVICE_RELOAD,
57614eb1 1045 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
842129f5
LP
1046 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
1047 SERVICE_AUTO_RESTART))
718db961 1048 s->timer_event_source = sd_event_source_unref(s->timer_event_source);
034c6ed7 1049
842129f5
LP
1050 if (!IN_SET(state,
1051 SERVICE_START, SERVICE_START_POST,
1052 SERVICE_RUNNING, SERVICE_RELOAD,
57614eb1 1053 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
bf108e55 1054 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1055 service_unwatch_main_pid(s);
867b3b7d
LP
1056 s->main_command = NULL;
1057 }
034c6ed7 1058
842129f5
LP
1059 if (!IN_SET(state,
1060 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1061 SERVICE_RELOAD,
57614eb1 1062 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
842129f5 1063 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
5e94833f 1064 service_unwatch_control_pid(s);
034c6ed7 1065 s->control_command = NULL;
a16e1123 1066 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
e537352b 1067 }
034c6ed7 1068
a911bb9a
LP
1069 if (IN_SET(state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1070 unit_unwatch_all_pids(UNIT(s));
1071
842129f5
LP
1072 if (!IN_SET(state,
1073 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1074 SERVICE_RUNNING, SERVICE_RELOAD,
57614eb1
LP
1075 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1076 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL) &&
5cc3985e 1077 !(state == SERVICE_DEAD && UNIT(s)->job))
4f2d528d
LP
1078 service_close_socket_fd(s);
1079
7596e9e1 1080 if (!IN_SET(state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
a6927d7f
MO
1081 service_stop_watchdog(s);
1082
f6023656
LP
1083 /* For the inactive states unit_notify() will trim the cgroup,
1084 * but for exit we have to do that ourselves... */
2c289ea8 1085 if (state == SERVICE_EXITED && !MANAGER_IS_RELOADING(UNIT(s)->manager))
efdb0237 1086 unit_prune_cgroup(UNIT(s));
f6023656 1087
e537352b 1088 if (old_state != state)
f2341e0a 1089 log_unit_debug(UNIT(s), "Changed %s -> %s", service_state_to_string(old_state), service_state_to_string(state));
acbb0225 1090
e056b01d 1091 unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
034c6ed7
LP
1092}
1093
36c16a7c
LP
1094static usec_t service_coldplug_timeout(Service *s) {
1095 assert(s);
1096
1097 switch (s->deserialized_state) {
1098
1099 case SERVICE_START_PRE:
1100 case SERVICE_START:
1101 case SERVICE_START_POST:
1102 case SERVICE_RELOAD:
1103 return usec_add(UNIT(s)->state_change_timestamp.monotonic, s->timeout_start_usec);
1104
1105 case SERVICE_RUNNING:
1106 return usec_add(UNIT(s)->active_enter_timestamp.monotonic, s->runtime_max_usec);
1107
1108 case SERVICE_STOP:
1109 case SERVICE_STOP_SIGABRT:
1110 case SERVICE_STOP_SIGTERM:
1111 case SERVICE_STOP_SIGKILL:
1112 case SERVICE_STOP_POST:
1113 case SERVICE_FINAL_SIGTERM:
1114 case SERVICE_FINAL_SIGKILL:
1115 return usec_add(UNIT(s)->state_change_timestamp.monotonic, s->timeout_stop_usec);
1116
1117 case SERVICE_AUTO_RESTART:
1118 return usec_add(UNIT(s)->inactive_enter_timestamp.monotonic, s->restart_usec);
1119
1120 default:
1121 return USEC_INFINITY;
1122 }
1123}
1124
be847e82 1125static int service_coldplug(Unit *u) {
a16e1123
LP
1126 Service *s = SERVICE(u);
1127 int r;
1128
1129 assert(s);
1130 assert(s->state == SERVICE_DEAD);
1131
930d2838
LP
1132 if (s->deserialized_state == s->state)
1133 return 0;
6c12b52e 1134
36c16a7c
LP
1135 r = service_arm_timer(s, service_coldplug_timeout(s));
1136 if (r < 0)
1137 return r;
a911bb9a 1138
930d2838
LP
1139 if (s->main_pid > 0 &&
1140 pid_is_unwaited(s->main_pid) &&
9acac212 1141 (IN_SET(s->deserialized_state,
930d2838
LP
1142 SERVICE_START, SERVICE_START_POST,
1143 SERVICE_RUNNING, SERVICE_RELOAD,
1144 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1145 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
1146 r = unit_watch_pid(UNIT(s), s->main_pid);
1147 if (r < 0)
1148 return r;
1149 }
bb242b7b 1150
930d2838
LP
1151 if (s->control_pid > 0 &&
1152 pid_is_unwaited(s->control_pid) &&
1153 IN_SET(s->deserialized_state,
1154 SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
1155 SERVICE_RELOAD,
1156 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
1157 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
1158 r = unit_watch_pid(UNIT(s), s->control_pid);
1159 if (r < 0)
1160 return r;
a16e1123 1161 }
92c1622e 1162
930d2838
LP
1163 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
1164 unit_watch_all_pids(UNIT(s));
1165
1166 if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
1167 service_start_watchdog(s);
1168
e8a565cb 1169 if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART)) {
29206d46 1170 (void) unit_setup_dynamic_creds(u);
e8a565cb
YW
1171 (void) unit_setup_exec_runtime(u);
1172 }
29206d46 1173
3ebcd323
ZJS
1174 if (UNIT_ISSET(s->accept_socket)) {
1175 Socket* socket = SOCKET(UNIT_DEREF(s->accept_socket));
1176
1177 if (socket->max_connections_per_source > 0) {
1178 SocketPeer *peer;
1179
1180 /* Make a best-effort attempt at bumping the connection count */
1181 if (socket_acquire_peer(socket, s->socket_fd, &peer) > 0) {
1182 socket_peer_unref(s->peer);
1183 s->peer = peer;
1184 }
1185 }
1186 }
1187
930d2838 1188 service_set_state(s, s->deserialized_state);
a16e1123
LP
1189 return 0;
1190}
1191
4c47affc
FB
1192static int service_collect_fds(Service *s,
1193 int **fds,
1194 char ***fd_names,
1195 unsigned *n_storage_fds,
1196 unsigned *n_socket_fds) {
1197
8dd4c05b 1198 _cleanup_strv_free_ char **rfd_names = NULL;
a354329f 1199 _cleanup_free_ int *rfds = NULL;
4c47affc
FB
1200 unsigned rn_socket_fds = 0, rn_storage_fds = 0;
1201 int r;
44d8db9e
LP
1202
1203 assert(s);
1204 assert(fds);
8dd4c05b 1205 assert(fd_names);
9b141911 1206 assert(n_socket_fds);
44d8db9e 1207
8dd4c05b 1208 if (s->socket_fd >= 0) {
6cf6bbc2 1209
8dd4c05b 1210 /* Pass the per-connection socket */
57020a3a 1211
8dd4c05b
LP
1212 rfds = new(int, 1);
1213 if (!rfds)
1214 return -ENOMEM;
1215 rfds[0] = s->socket_fd;
57020a3a 1216
8dd4c05b
LP
1217 rfd_names = strv_new("connection", NULL);
1218 if (!rfd_names)
1219 return -ENOMEM;
44d8db9e 1220
4c47affc 1221 rn_socket_fds = 1;
8dd4c05b
LP
1222 } else {
1223 Iterator i;
eef85c4a 1224 void *v;
8dd4c05b 1225 Unit *u;
44d8db9e 1226
8dd4c05b 1227 /* Pass all our configured sockets for singleton services */
44d8db9e 1228
eef85c4a 1229 HASHMAP_FOREACH_KEY(v, u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
8dd4c05b
LP
1230 _cleanup_free_ int *cfds = NULL;
1231 Socket *sock;
1232 int cn_fds;
44d8db9e 1233
8dd4c05b
LP
1234 if (u->type != UNIT_SOCKET)
1235 continue;
44d8db9e 1236
8dd4c05b 1237 sock = SOCKET(u);
a354329f 1238
8dd4c05b
LP
1239 cn_fds = socket_collect_fds(sock, &cfds);
1240 if (cn_fds < 0)
1241 return cn_fds;
44d8db9e 1242
8dd4c05b
LP
1243 if (cn_fds <= 0)
1244 continue;
79c7626d 1245
8dd4c05b
LP
1246 if (!rfds) {
1247 rfds = cfds;
4c47affc 1248 rn_socket_fds = cn_fds;
8dd4c05b
LP
1249
1250 cfds = NULL;
1251 } else {
1252 int *t;
1253
4c47affc 1254 t = realloc(rfds, (rn_socket_fds + cn_fds) * sizeof(int));
8dd4c05b
LP
1255 if (!t)
1256 return -ENOMEM;
1257
4c47affc 1258 memcpy(t + rn_socket_fds, cfds, cn_fds * sizeof(int));
8dd4c05b
LP
1259
1260 rfds = t;
4c47affc 1261 rn_socket_fds += cn_fds;
8dd4c05b
LP
1262 }
1263
1264 r = strv_extend_n(&rfd_names, socket_fdname(sock), cn_fds);
1265 if (r < 0)
1266 return r;
44d8db9e
LP
1267 }
1268 }
1269
a354329f
LP
1270 if (s->n_fd_store > 0) {
1271 ServiceFDStore *fs;
4c47affc 1272 unsigned n_fds;
8dd4c05b 1273 char **nl;
a354329f
LP
1274 int *t;
1275
4c47affc 1276 t = realloc(rfds, (rn_socket_fds + s->n_fd_store) * sizeof(int));
a354329f
LP
1277 if (!t)
1278 return -ENOMEM;
1279
1280 rfds = t;
8dd4c05b 1281
4c47affc 1282 nl = realloc(rfd_names, (rn_socket_fds + s->n_fd_store + 1) * sizeof(char*));
8dd4c05b
LP
1283 if (!nl)
1284 return -ENOMEM;
1285
1286 rfd_names = nl;
4c47affc 1287 n_fds = rn_socket_fds;
8dd4c05b
LP
1288
1289 LIST_FOREACH(fd_store, fs, s->fd_store) {
4c47affc
FB
1290 rfds[n_fds] = fs->fd;
1291 rfd_names[n_fds] = strdup(strempty(fs->fdname));
1292 if (!rfd_names[n_fds])
8dd4c05b
LP
1293 return -ENOMEM;
1294
4c47affc
FB
1295 rn_storage_fds++;
1296 n_fds++;
8dd4c05b
LP
1297 }
1298
4c47affc 1299 rfd_names[n_fds] = NULL;
a354329f
LP
1300 }
1301
44d8db9e 1302 *fds = rfds;
8dd4c05b 1303 *fd_names = rfd_names;
9b141911 1304 *n_socket_fds = rn_socket_fds;
4c47affc 1305 *n_storage_fds = rn_storage_fds;
3e33402a 1306
a354329f 1307 rfds = NULL;
8dd4c05b 1308 rfd_names = NULL;
79c7626d 1309
4c47affc 1310 return 0;
44d8db9e
LP
1311}
1312
6375bd20
JW
1313static bool service_exec_needs_notify_socket(Service *s, ExecFlags flags) {
1314 assert(s);
1315
1316 /* Notifications are accepted depending on the process and
1317 * the access setting of the service:
1318 * process: \ access: NONE MAIN EXEC ALL
1319 * main no yes yes yes
1320 * control no no yes yes
1321 * other (forked) no no no yes */
1322
1323 if (flags & EXEC_IS_CONTROL)
1324 /* A control process */
1325 return IN_SET(s->notify_access, NOTIFY_EXEC, NOTIFY_ALL);
1326
1327 /* We only spawn main processes and control processes, so any
1328 * process that is not a control process is a main process */
1329 return s->notify_access != NOTIFY_NONE;
1330}
1331
81a2b7ce
LP
1332static int service_spawn(
1333 Service *s,
1334 ExecCommand *c,
21b2ce39 1335 usec_t timeout,
c39f1ce2 1336 ExecFlags flags,
81a2b7ce
LP
1337 pid_t *_pid) {
1338
9fa95f85 1339 ExecParameters exec_params = {
c39f1ce2
LP
1340 .flags = flags,
1341 .stdin_fd = -1,
1342 .stdout_fd = -1,
1343 .stderr_fd = -1,
9fa95f85 1344 };
3c7416b6
LP
1345 _cleanup_strv_free_ char **final_env = NULL, **our_env = NULL, **fd_names = NULL;
1346 unsigned n_storage_fds = 0, n_socket_fds = 0, n_env = 0;
1347 _cleanup_free_ int *fds = NULL;
1348 pid_t pid;
8dd4c05b
LP
1349 int r;
1350
034c6ed7
LP
1351 assert(s);
1352 assert(c);
1353 assert(_pid);
1354
3c7416b6
LP
1355 r = unit_prepare_exec(UNIT(s));
1356 if (r < 0)
1357 return r;
1358
9c1a61ad
LP
1359 if (flags & EXEC_IS_CONTROL) {
1360 /* If this is a control process, mask the permissions/chroot application if this is requested. */
1361 if (s->permissions_start_only)
1703fa41 1362 exec_params.flags &= ~EXEC_APPLY_SANDBOXING;
9c1a61ad
LP
1363 if (s->root_directory_start_only)
1364 exec_params.flags &= ~EXEC_APPLY_CHROOT;
1365 }
1366
c39f1ce2 1367 if ((flags & EXEC_PASS_FDS) ||
6cf6bbc2
LP
1368 s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1369 s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1370 s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1371
4c47affc 1372 r = service_collect_fds(s, &fds, &fd_names, &n_storage_fds, &n_socket_fds);
8dd4c05b 1373 if (r < 0)
36c16a7c 1374 return r;
6cf6bbc2 1375
4c47affc 1376 log_unit_debug(UNIT(s), "Passing %i fds to service", n_storage_fds + n_socket_fds);
4f2d528d 1377 }
44d8db9e 1378
36c16a7c
LP
1379 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), timeout));
1380 if (r < 0)
1381 return r;
034c6ed7 1382
136dc4c4 1383 our_env = new0(char*, 9);
36c16a7c
LP
1384 if (!our_env)
1385 return -ENOMEM;
c952c6ec 1386
6375bd20 1387 if (service_exec_needs_notify_socket(s, flags))
36c16a7c
LP
1388 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0)
1389 return -ENOMEM;
c952c6ec 1390
2105e76a 1391 if (s->main_pid > 0)
36c16a7c
LP
1392 if (asprintf(our_env + n_env++, "MAINPID="PID_FMT, s->main_pid) < 0)
1393 return -ENOMEM;
2105e76a 1394
c39f1ce2 1395 if (MANAGER_IS_USER(UNIT(s)->manager))
df0ff127 1396 if (asprintf(our_env + n_env++, "MANAGERPID="PID_FMT, getpid_cached()) < 0)
36c16a7c 1397 return -ENOMEM;
97ae63e2 1398
8dd4c05b 1399 if (s->socket_fd >= 0) {
3b1c5241
SL
1400 union sockaddr_union sa;
1401 socklen_t salen = sizeof(sa);
1402
f56e7bfe
LP
1403 /* If this is a per-connection service instance, let's set $REMOTE_ADDR and $REMOTE_PORT to something
1404 * useful. Note that we do this only when we are still connected at this point in time, which we might
1405 * very well not be. Hence we ignore all errors when retrieving peer information (as that might result
1406 * in ENOTCONN), and just use whate we can use. */
f2dbd059 1407
f56e7bfe
LP
1408 if (getpeername(s->socket_fd, &sa.sa, &salen) >= 0 &&
1409 IN_SET(sa.sa.sa_family, AF_INET, AF_INET6, AF_VSOCK)) {
3b1c5241 1410
3b1c5241
SL
1411 _cleanup_free_ char *addr = NULL;
1412 char *t;
882ac6e7 1413 unsigned port;
3b1c5241
SL
1414
1415 r = sockaddr_pretty(&sa.sa, salen, true, false, &addr);
1416 if (r < 0)
36c16a7c 1417 return r;
3b1c5241
SL
1418
1419 t = strappend("REMOTE_ADDR=", addr);
36c16a7c
LP
1420 if (!t)
1421 return -ENOMEM;
3b1c5241
SL
1422 our_env[n_env++] = t;
1423
882ac6e7
SH
1424 r = sockaddr_port(&sa.sa, &port);
1425 if (r < 0)
1426 return r;
3b1c5241 1427
36c16a7c
LP
1428 if (asprintf(&t, "REMOTE_PORT=%u", port) < 0)
1429 return -ENOMEM;
3b1c5241
SL
1430 our_env[n_env++] = t;
1431 }
1432 }
1433
136dc4c4
LP
1434 if (flags & EXEC_SETENV_RESULT) {
1435 if (asprintf(our_env + n_env++, "SERVICE_RESULT=%s", service_result_to_string(s->result)) < 0)
1436 return -ENOMEM;
1437
1438 if (s->main_exec_status.pid > 0 &&
1439 dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
1440 if (asprintf(our_env + n_env++, "EXIT_CODE=%s", sigchld_code_to_string(s->main_exec_status.code)) < 0)
1441 return -ENOMEM;
1442
1443 if (s->main_exec_status.code == CLD_EXITED)
1444 r = asprintf(our_env + n_env++, "EXIT_STATUS=%i", s->main_exec_status.status);
1445 else
1446 r = asprintf(our_env + n_env++, "EXIT_STATUS=%s", signal_to_string(s->main_exec_status.status));
1447 if (r < 0)
1448 return -ENOMEM;
1449 }
1450 }
1451
f0d47797 1452 unit_set_exec_params(UNIT(s), &exec_params);
3536f49e
YW
1453
1454 final_env = strv_env_merge(2, exec_params.environment, our_env, NULL);
36c16a7c
LP
1455 if (!final_env)
1456 return -ENOMEM;
c952c6ec 1457
5bf7569c
LP
1458 /* System services should get a new keyring by default. */
1459 SET_FLAG(exec_params.flags, EXEC_NEW_KEYRING, MANAGER_IS_SYSTEM(UNIT(s)->manager));
ac647978
LP
1460
1461 /* System D-Bus needs nss-systemd disabled, so that we don't deadlock */
1462 SET_FLAG(exec_params.flags, EXEC_NSS_BYPASS_BUS,
1463 MANAGER_IS_SYSTEM(UNIT(s)->manager) && unit_has_name(UNIT(s), SPECIAL_DBUS_SERVICE));
4ad49000 1464
5125e762 1465 exec_params.argv = c->argv;
c39f1ce2 1466 exec_params.environment = final_env;
9fa95f85 1467 exec_params.fds = fds;
8dd4c05b 1468 exec_params.fd_names = fd_names;
4c47affc 1469 exec_params.n_storage_fds = n_storage_fds;
9b141911 1470 exec_params.n_socket_fds = n_socket_fds;
9fa95f85 1471 exec_params.watchdog_usec = s->watchdog_usec;
a34ceba6 1472 exec_params.selinux_context_net = s->socket_fd_selinux_context_net;
9fa95f85
DM
1473 if (s->type == SERVICE_IDLE)
1474 exec_params.idle_pipe = UNIT(s)->manager->idle_pipe;
a34ceba6
LP
1475 exec_params.stdin_fd = s->stdin_fd;
1476 exec_params.stdout_fd = s->stdout_fd;
1477 exec_params.stderr_fd = s->stderr_fd;
9fa95f85 1478
f2341e0a
LP
1479 r = exec_spawn(UNIT(s),
1480 c,
9e2f7c11 1481 &s->exec_context,
9fa95f85 1482 &exec_params,
613b411c 1483 s->exec_runtime,
29206d46 1484 &s->dynamic_creds,
9e2f7c11 1485 &pid);
9e2f7c11 1486 if (r < 0)
36c16a7c 1487 return r;
034c6ed7 1488
117dcc57 1489 r = unit_watch_pid(UNIT(s), pid);
e8b509d3 1490 if (r < 0) /* FIXME: we need to do something here */
36c16a7c 1491 return r;
034c6ed7
LP
1492
1493 *_pid = pid;
1494
5cb5a6ff 1495 return 0;
034c6ed7
LP
1496}
1497
80876c20
LP
1498static int main_pid_good(Service *s) {
1499 assert(s);
1500
51894d70 1501 /* Returns 0 if the pid is dead, > 0 if it is good, < 0 if we don't know */
80876c20 1502
fc08079e 1503 /* If we know the pid file, then let's just check if it is
80876c20 1504 * still valid */
6dfa5494
LP
1505 if (s->main_pid_known) {
1506
1507 /* If it's an alien child let's check if it is still
1508 * alive ... */
62220cf7 1509 if (s->main_pid_alien && s->main_pid > 0)
9f5650ae 1510 return pid_is_alive(s->main_pid);
6dfa5494
LP
1511
1512 /* .. otherwise assume we'll get a SIGCHLD for it,
1513 * which we really should wait for to collect exit
1514 * status and code */
80876c20 1515 return s->main_pid > 0;
6dfa5494 1516 }
80876c20
LP
1517
1518 /* We don't know the pid */
1519 return -EAGAIN;
1520}
1521
019be286 1522static int control_pid_good(Service *s) {
80876c20
LP
1523 assert(s);
1524
07697d7e
LP
1525 /* Returns 0 if the control PID is dead, > 0 if it is good. We never actually return < 0 here, but in order to
1526 * make this function as similar as possible to main_pid_good() and cgroup_good(), we pretend that < 0 also
1527 * means: we can't figure it out. */
1528
80876c20
LP
1529 return s->control_pid > 0;
1530}
1531
1532static int cgroup_good(Service *s) {
1533 int r;
1534
1535 assert(s);
1536
07697d7e
LP
1537 /* Returns 0 if the cgroup is empty or doesn't exist, > 0 if it is exists and is populated, < 0 if we can't
1538 * figure it out */
1539
4ad49000
LP
1540 if (!UNIT(s)->cgroup_path)
1541 return 0;
1542
6f883237 1543 r = cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, UNIT(s)->cgroup_path);
117dcc57 1544 if (r < 0)
80876c20
LP
1545 return r;
1546
b13ddbbc 1547 return r == 0;
80876c20
LP
1548}
1549
a509f0e6
LP
1550static bool service_shall_restart(Service *s) {
1551 assert(s);
1552
1553 /* Don't restart after manual stops */
1554 if (s->forbid_restart)
1555 return false;
1556
1557 /* Never restart if this is configured as special exception */
1558 if (exit_status_set_test(&s->restart_prevent_status, s->main_exec_status.code, s->main_exec_status.status))
1559 return false;
1560
1561 /* Restart if the exit code/status are configured as restart triggers */
1562 if (exit_status_set_test(&s->restart_force_status, s->main_exec_status.code, s->main_exec_status.status))
1563 return true;
1564
1565 switch (s->restart) {
1566
1567 case SERVICE_RESTART_NO:
1568 return false;
1569
1570 case SERVICE_RESTART_ALWAYS:
1571 return true;
1572
1573 case SERVICE_RESTART_ON_SUCCESS:
1574 return s->result == SERVICE_SUCCESS;
1575
1576 case SERVICE_RESTART_ON_FAILURE:
1577 return s->result != SERVICE_SUCCESS;
1578
1579 case SERVICE_RESTART_ON_ABNORMAL:
1580 return !IN_SET(s->result, SERVICE_SUCCESS, SERVICE_FAILURE_EXIT_CODE);
1581
1582 case SERVICE_RESTART_ON_WATCHDOG:
1583 return s->result == SERVICE_FAILURE_WATCHDOG;
1584
1585 case SERVICE_RESTART_ON_ABORT:
1586 return IN_SET(s->result, SERVICE_FAILURE_SIGNAL, SERVICE_FAILURE_CORE_DUMP);
1587
1588 default:
1589 assert_not_reached("unknown restart setting");
1590 }
1591}
1592
deb4e708
MK
1593static bool service_will_restart(Unit *u) {
1594 Service *s = SERVICE(u);
1595
53f47dfc
YW
1596 assert(s);
1597
deb4e708
MK
1598 if (s->will_auto_restart)
1599 return true;
53f47dfc
YW
1600 if (s->state == SERVICE_AUTO_RESTART)
1601 return true;
1602 if (!UNIT(s)->job)
1603 return false;
1604 if (UNIT(s)->job->type == JOB_START)
1605 return true;
1606 return false;
1607}
1608
f42806df 1609static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
034c6ed7 1610 int r;
0f52f8e5 1611
034c6ed7
LP
1612 assert(s);
1613
0f52f8e5
LP
1614 /* If there's a stop job queued before we enter the DEAD state, we shouldn't act on Restart=, in order to not
1615 * undo what has already been enqueued. */
1616 if (unit_stop_pending(UNIT(s)))
1617 allow_restart = false;
1618
a0fef983 1619 if (s->result == SERVICE_SUCCESS)
f42806df 1620 s->result = f;
034c6ed7 1621
ed77d407
LP
1622 if (s->result != SERVICE_SUCCESS)
1623 log_unit_warning(UNIT(s), "Failed with result '%s'.", service_result_to_string(s->result));
1624
deb4e708
MK
1625 if (allow_restart && service_shall_restart(s))
1626 s->will_auto_restart = true;
1627
7eb2a8a1
LP
1628 /* Make sure service_release_resources() doesn't destroy our FD store, while we are changing through
1629 * SERVICE_FAILED/SERVICE_DEAD before entering into SERVICE_AUTO_RESTART. */
1630 s->n_keep_fd_store ++;
1631
0c7f15b3
MS
1632 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1633
deb4e708
MK
1634 if (s->will_auto_restart) {
1635 s->will_auto_restart = false;
034c6ed7 1636
36c16a7c 1637 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->restart_usec));
7eb2a8a1
LP
1638 if (r < 0) {
1639 s->n_keep_fd_store--;
034c6ed7 1640 goto fail;
7eb2a8a1 1641 }
034c6ed7
LP
1642
1643 service_set_state(s, SERVICE_AUTO_RESTART);
7a0019d3
LP
1644 } else
1645 /* If we shan't restart, then flush out the restart counter. But don't do that immediately, so that the
1646 * user can still introspect the counter. Do so on the next start. */
1647 s->flush_n_restarts = true;
034c6ed7 1648
7eb2a8a1
LP
1649 /* The new state is in effect, let's decrease the fd store ref counter again. Let's also readd us to the GC
1650 * queue, so that the fd store is possibly gc'ed again */
1651 s->n_keep_fd_store--;
1652 unit_add_to_gc_queue(UNIT(s));
1653
f2341e0a 1654 /* The next restart might not be a manual stop, hence reset the flag indicating manual stops */
47342320
LP
1655 s->forbid_restart = false;
1656
e66cf1a3 1657 /* We want fresh tmpdirs in case service is started again immediately */
e8a565cb 1658 s->exec_runtime = exec_runtime_unref(s->exec_runtime, true);
c17ec25e 1659
53f47dfc 1660 if (s->exec_context.runtime_directory_preserve_mode == EXEC_PRESERVE_NO ||
deb4e708 1661 (s->exec_context.runtime_directory_preserve_mode == EXEC_PRESERVE_RESTART && !service_will_restart(UNIT(s))))
53f47dfc 1662 /* Also, remove the runtime directory */
3536f49e 1663 exec_context_destroy_runtime_directory(&s->exec_context, UNIT(s)->manager->prefix[EXEC_DIRECTORY_RUNTIME]);
e66cf1a3 1664
00d9ef85
LP
1665 /* Get rid of the IPC bits of the user */
1666 unit_unref_uid_gid(UNIT(s), true);
1667
29206d46
LP
1668 /* Release the user, and destroy it if we are the only remaining owner */
1669 dynamic_creds_destroy(&s->dynamic_creds);
1670
9285c9ff
LN
1671 /* Try to delete the pid file. At this point it will be
1672 * out-of-date, and some software might be confused by it, so
1673 * let's remove it. */
1674 if (s->pid_file)
fabab190 1675 (void) unlink(s->pid_file);
9285c9ff 1676
034c6ed7
LP
1677 return;
1678
1679fail:
f2341e0a 1680 log_unit_warning_errno(UNIT(s), r, "Failed to run install restart timer: %m");
f42806df 1681 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
1682}
1683
f42806df 1684static void service_enter_stop_post(Service *s, ServiceResult f) {
034c6ed7
LP
1685 int r;
1686 assert(s);
1687
a0fef983 1688 if (s->result == SERVICE_SUCCESS)
f42806df 1689 s->result = f;
034c6ed7 1690
5e94833f 1691 service_unwatch_control_pid(s);
a911bb9a 1692 unit_watch_all_pids(UNIT(s));
5e94833f 1693
117dcc57
ZJS
1694 s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST];
1695 if (s->control_command) {
867b3b7d
LP
1696 s->control_command_id = SERVICE_EXEC_STOP_POST;
1697
ecedd90f
LP
1698 r = service_spawn(s,
1699 s->control_command,
21b2ce39 1700 s->timeout_stop_usec,
1703fa41 1701 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_IS_CONTROL|EXEC_SETENV_RESULT,
ecedd90f
LP
1702 &s->control_pid);
1703 if (r < 0)
034c6ed7
LP
1704 goto fail;
1705
80876c20
LP
1706 service_set_state(s, SERVICE_STOP_POST);
1707 } else
ac84d1fb 1708 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1709
1710 return;
1711
1712fail:
f2341e0a 1713 log_unit_warning_errno(UNIT(s), r, "Failed to run 'stop-post' task: %m");
f42806df 1714 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1715}
1716
4940c0b0
LP
1717static int state_to_kill_operation(ServiceState state) {
1718 switch (state) {
1719
1720 case SERVICE_STOP_SIGABRT:
1721 return KILL_ABORT;
1722
1723 case SERVICE_STOP_SIGTERM:
1724 case SERVICE_FINAL_SIGTERM:
1725 return KILL_TERMINATE;
1726
1727 case SERVICE_STOP_SIGKILL:
1728 case SERVICE_FINAL_SIGKILL:
1729 return KILL_KILL;
1730
1731 default:
1732 return _KILL_OPERATION_INVALID;
1733 }
1734}
1735
f42806df 1736static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
034c6ed7 1737 int r;
034c6ed7
LP
1738
1739 assert(s);
1740
a0fef983 1741 if (s->result == SERVICE_SUCCESS)
f42806df 1742 s->result = f;
034c6ed7 1743
a911bb9a
LP
1744 unit_watch_all_pids(UNIT(s));
1745
cd2086fe
LP
1746 r = unit_kill_context(
1747 UNIT(s),
1748 &s->kill_context,
4940c0b0 1749 state_to_kill_operation(state),
cd2086fe
LP
1750 s->main_pid,
1751 s->control_pid,
1752 s->main_pid_alien);
1753 if (r < 0)
1754 goto fail;
034c6ed7 1755
cd2086fe 1756 if (r > 0) {
36c16a7c
LP
1757 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_stop_usec));
1758 if (r < 0)
1759 goto fail;
d6ea93e3 1760
80876c20 1761 service_set_state(s, state);
1db0db4b 1762 } else if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM) && s->kill_context.send_sigkill)
ac84d1fb 1763 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_SUCCESS);
1db0db4b 1764 else if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL))
f42806df 1765 service_enter_stop_post(s, SERVICE_SUCCESS);
1db0db4b 1766 else if (state == SERVICE_FINAL_SIGTERM && s->kill_context.send_sigkill)
ac84d1fb 1767 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_SUCCESS);
80876c20 1768 else
f42806df 1769 service_enter_dead(s, SERVICE_SUCCESS, true);
034c6ed7
LP
1770
1771 return;
1772
1773fail:
f2341e0a 1774 log_unit_warning_errno(UNIT(s), r, "Failed to kill processes: %m");
034c6ed7 1775
a00973af 1776 if (IN_SET(state, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL))
f42806df 1777 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
034c6ed7 1778 else
f42806df 1779 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
1780}
1781
308d72dc
LP
1782static void service_enter_stop_by_notify(Service *s) {
1783 assert(s);
1784
1785 unit_watch_all_pids(UNIT(s));
1786
36c16a7c 1787 service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_stop_usec));
308d72dc 1788
6041a7ee
MS
1789 /* The service told us it's stopping, so it's as if we SIGTERM'd it. */
1790 service_set_state(s, SERVICE_STOP_SIGTERM);
308d72dc
LP
1791}
1792
f42806df 1793static void service_enter_stop(Service *s, ServiceResult f) {
034c6ed7 1794 int r;
5925dd3c 1795
034c6ed7
LP
1796 assert(s);
1797
a0fef983 1798 if (s->result == SERVICE_SUCCESS)
f42806df 1799 s->result = f;
034c6ed7 1800
5e94833f 1801 service_unwatch_control_pid(s);
a911bb9a 1802 unit_watch_all_pids(UNIT(s));
5e94833f 1803
117dcc57
ZJS
1804 s->control_command = s->exec_command[SERVICE_EXEC_STOP];
1805 if (s->control_command) {
867b3b7d
LP
1806 s->control_command_id = SERVICE_EXEC_STOP;
1807
ecedd90f
LP
1808 r = service_spawn(s,
1809 s->control_command,
21b2ce39 1810 s->timeout_stop_usec,
1703fa41 1811 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|EXEC_SETENV_RESULT,
ecedd90f
LP
1812 &s->control_pid);
1813 if (r < 0)
034c6ed7
LP
1814 goto fail;
1815
80876c20
LP
1816 service_set_state(s, SERVICE_STOP);
1817 } else
f42806df 1818 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
034c6ed7
LP
1819
1820 return;
1821
1822fail:
f2341e0a 1823 log_unit_warning_errno(UNIT(s), r, "Failed to run 'stop' task: %m");
f42806df 1824 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1825}
1826
957c3cf9
LP
1827static bool service_good(Service *s) {
1828 int main_pid_ok;
1829 assert(s);
1830
1831 if (s->type == SERVICE_DBUS && !s->bus_name_good)
1832 return false;
1833
1834 main_pid_ok = main_pid_good(s);
1835 if (main_pid_ok > 0) /* It's alive */
1836 return true;
1837 if (main_pid_ok == 0) /* It's dead */
1838 return false;
1839
1840 /* OK, we don't know anything about the main PID, maybe
1841 * because there is none. Let's check the control group
1842 * instead. */
1843
1844 return cgroup_good(s) != 0;
1845}
1846
f42806df 1847static void service_enter_running(Service *s, ServiceResult f) {
80876c20
LP
1848 assert(s);
1849
a0fef983 1850 if (s->result == SERVICE_SUCCESS)
f42806df 1851 s->result = f;
80876c20 1852
089b64d5
LP
1853 service_unwatch_control_pid(s);
1854
957c3cf9 1855 if (service_good(s)) {
308d72dc
LP
1856
1857 /* If there are any queued up sd_notify()
1858 * notifications, process them now */
1859 if (s->notify_state == NOTIFY_RELOADING)
1860 service_enter_reload_by_notify(s);
1861 else if (s->notify_state == NOTIFY_STOPPING)
1862 service_enter_stop_by_notify(s);
36c16a7c 1863 else {
308d72dc 1864 service_set_state(s, SERVICE_RUNNING);
36c16a7c
LP
1865 service_arm_timer(s, usec_add(UNIT(s)->active_enter_timestamp.monotonic, s->runtime_max_usec));
1866 }
308d72dc 1867
3d474ef7 1868 } else if (f != SERVICE_SUCCESS)
c3fda31d 1869 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3d474ef7 1870 else if (s->remain_after_exit)
80876c20
LP
1871 service_set_state(s, SERVICE_EXITED);
1872 else
f42806df 1873 service_enter_stop(s, SERVICE_SUCCESS);
80876c20
LP
1874}
1875
034c6ed7
LP
1876static void service_enter_start_post(Service *s) {
1877 int r;
1878 assert(s);
1879
5e94833f 1880 service_unwatch_control_pid(s);
842129f5 1881 service_reset_watchdog(s);
bb242b7b 1882
117dcc57
ZJS
1883 s->control_command = s->exec_command[SERVICE_EXEC_START_POST];
1884 if (s->control_command) {
867b3b7d
LP
1885 s->control_command_id = SERVICE_EXEC_START_POST;
1886
ecedd90f
LP
1887 r = service_spawn(s,
1888 s->control_command,
21b2ce39 1889 s->timeout_start_usec,
1703fa41 1890 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL,
ecedd90f
LP
1891 &s->control_pid);
1892 if (r < 0)
034c6ed7
LP
1893 goto fail;
1894
80876c20
LP
1895 service_set_state(s, SERVICE_START_POST);
1896 } else
f42806df 1897 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
1898
1899 return;
1900
1901fail:
f2341e0a 1902 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start-post' task: %m");
f42806df 1903 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
1904}
1905
e9a4f676 1906static void service_kill_control_process(Service *s) {
a6951a50 1907 int r;
4ad49000 1908
a6951a50
LP
1909 assert(s);
1910
e9a4f676
LP
1911 if (s->control_pid <= 0)
1912 return;
4ad49000 1913
e9a4f676
LP
1914 r = kill_and_sigcont(s->control_pid, SIGKILL);
1915 if (r < 0) {
1916 _cleanup_free_ char *comm = NULL;
a6951a50 1917
e9a4f676 1918 (void) get_process_comm(s->control_pid, &comm);
a6951a50 1919
e9a4f676
LP
1920 log_unit_debug_errno(UNIT(s), r, "Failed to kill control process " PID_FMT " (%s), ignoring: %m",
1921 s->control_pid, strna(comm));
a6951a50 1922 }
4ad49000
LP
1923}
1924
034c6ed7 1925static void service_enter_start(Service *s) {
4ad49000 1926 ExecCommand *c;
36c16a7c 1927 usec_t timeout;
034c6ed7
LP
1928 pid_t pid;
1929 int r;
1930
1931 assert(s);
1932
41efeaec
LP
1933 service_unwatch_control_pid(s);
1934 service_unwatch_main_pid(s);
80876c20 1935
a4634b21
LP
1936 unit_warn_leftover_processes(UNIT(s));
1937
867b3b7d
LP
1938 if (s->type == SERVICE_FORKING) {
1939 s->control_command_id = SERVICE_EXEC_START;
1940 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
1941
1942 s->main_command = NULL;
1943 } else {
1944 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1945 s->control_command = NULL;
1946
1947 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
1948 }
34e9ba66 1949
96fb8242 1950 if (!c) {
47fffb35
LP
1951 if (s->type != SERVICE_ONESHOT) {
1952 /* There's no command line configured for the main command? Hmm, that is strange. This can only
1953 * happen if the configuration changes at runtime. In this case, let's enter a failure
1954 * state. */
1955 log_unit_error(UNIT(s), "There's no 'start' task anymore we could start: %m");
1956 r = -ENXIO;
1957 goto fail;
1958 }
1959
96fb8242
LP
1960 service_enter_start_post(s);
1961 return;
1962 }
1963
36c16a7c
LP
1964 if (IN_SET(s->type, SERVICE_SIMPLE, SERVICE_IDLE))
1965 /* For simple + idle this is the main process. We don't apply any timeout here, but
1966 * service_enter_running() will later apply the .runtime_max_usec timeout. */
1967 timeout = USEC_INFINITY;
1968 else
1969 timeout = s->timeout_start_usec;
1970
ecedd90f
LP
1971 r = service_spawn(s,
1972 c,
36c16a7c 1973 timeout,
1703fa41 1974 EXEC_PASS_FDS|EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_SET_WATCHDOG,
ecedd90f
LP
1975 &pid);
1976 if (r < 0)
034c6ed7
LP
1977 goto fail;
1978
36c16a7c 1979 if (IN_SET(s->type, SERVICE_SIMPLE, SERVICE_IDLE)) {
034c6ed7
LP
1980 /* For simple services we immediately start
1981 * the START_POST binaries. */
1982
5925dd3c 1983 service_set_main_pid(s, pid);
034c6ed7
LP
1984 service_enter_start_post(s);
1985
1986 } else if (s->type == SERVICE_FORKING) {
1987
1988 /* For forking services we wait until the start
1989 * process exited. */
1990
e55224ca 1991 s->control_pid = pid;
80876c20
LP
1992 service_set_state(s, SERVICE_START);
1993
36c16a7c 1994 } else if (IN_SET(s->type, SERVICE_ONESHOT, SERVICE_DBUS, SERVICE_NOTIFY)) {
7d55e835 1995
34e9ba66 1996 /* For oneshot services we wait until the start
7d55e835
LP
1997 * process exited, too, but it is our main process. */
1998
05e343b7 1999 /* For D-Bus services we know the main pid right away,
8c47c732
LP
2000 * but wait for the bus name to appear on the
2001 * bus. Notify services are similar. */
05e343b7 2002
5925dd3c 2003 service_set_main_pid(s, pid);
80876c20 2004 service_set_state(s, SERVICE_START);
034c6ed7
LP
2005 } else
2006 assert_not_reached("Unknown service type");
2007
2008 return;
2009
2010fail:
f2341e0a 2011 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start' task: %m");
c3fda31d 2012 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7
LP
2013}
2014
2015static void service_enter_start_pre(Service *s) {
2016 int r;
2017
2018 assert(s);
2019
5e94833f
LP
2020 service_unwatch_control_pid(s);
2021
117dcc57
ZJS
2022 s->control_command = s->exec_command[SERVICE_EXEC_START_PRE];
2023 if (s->control_command) {
8f53a7b8 2024
a4634b21
LP
2025 unit_warn_leftover_processes(UNIT(s));
2026
867b3b7d
LP
2027 s->control_command_id = SERVICE_EXEC_START_PRE;
2028
ecedd90f
LP
2029 r = service_spawn(s,
2030 s->control_command,
21b2ce39 2031 s->timeout_start_usec,
1703fa41 2032 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|EXEC_APPLY_TTY_STDIN,
ecedd90f
LP
2033 &s->control_pid);
2034 if (r < 0)
034c6ed7
LP
2035 goto fail;
2036
80876c20
LP
2037 service_set_state(s, SERVICE_START_PRE);
2038 } else
034c6ed7
LP
2039 service_enter_start(s);
2040
2041 return;
2042
2043fail:
f2341e0a 2044 log_unit_warning_errno(UNIT(s), r, "Failed to run 'start-pre' task: %m");
f42806df 2045 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
034c6ed7
LP
2046}
2047
2048static void service_enter_restart(Service *s) {
4afd3348 2049 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
034c6ed7 2050 int r;
398ef8ba 2051
034c6ed7
LP
2052 assert(s);
2053
a8bb2e65
LP
2054 if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
2055 /* Don't restart things if we are going down anyway */
f2341e0a 2056 log_unit_info(UNIT(s), "Stop job pending for unit, delaying automatic restart.");
2edfa366 2057
36c16a7c 2058 r = service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->restart_usec));
a8bb2e65 2059 if (r < 0)
2edfa366 2060 goto fail;
feae8adb
DW
2061
2062 return;
2edfa366
LP
2063 }
2064
48bb5876
DW
2065 /* Any units that are bound to this service must also be
2066 * restarted. We use JOB_RESTART (instead of the more obvious
2067 * JOB_START) here so that those dependency jobs will be added
2068 * as well. */
4bd29fe5 2069 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, &error, NULL);
48bb5876 2070 if (r < 0)
034c6ed7
LP
2071 goto fail;
2072
7a0019d3
LP
2073 /* Count the jobs we enqueue for restarting. This counter is maintained as long as the unit isn't fully
2074 * stopped, i.e. as long as it remains up or remains in auto-start states. The use can reset the counter
2075 * explicitly however via the usual "systemctl reset-failure" logic. */
2076 s->n_restarts ++;
2077 s->flush_n_restarts = false;
2078
2079 log_struct(LOG_INFO,
2080 "MESSAGE_ID=" SD_MESSAGE_UNIT_RESTART_SCHEDULED_STR,
2081 LOG_UNIT_ID(UNIT(s)),
f1c50bec 2082 LOG_UNIT_INVOCATION_ID(UNIT(s)),
7a0019d3
LP
2083 LOG_UNIT_MESSAGE(UNIT(s), "Scheduled restart job, restart counter is at %u.", s->n_restarts),
2084 "N_RESTARTS=%u", s->n_restarts,
2085 NULL);
2086
2087 /* Notify clients about changed restart counter */
2088 unit_add_to_dbus_queue(UNIT(s));
2089
a8bb2e65
LP
2090 /* Note that we stay in the SERVICE_AUTO_RESTART state here,
2091 * it will be canceled as part of the service_stop() call that
2092 * is executed as part of JOB_RESTART. */
2093
034c6ed7
LP
2094 return;
2095
2096fail:
f2341e0a 2097 log_unit_warning(UNIT(s), "Failed to schedule restart job: %s", bus_error_message(&error, -r));
f42806df 2098 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
034c6ed7
LP
2099}
2100
308d72dc 2101static void service_enter_reload_by_notify(Service *s) {
15d167f8
JW
2102 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
2103 int r;
2104
308d72dc
LP
2105 assert(s);
2106
36c16a7c 2107 service_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_start_usec));
308d72dc 2108 service_set_state(s, SERVICE_RELOAD);
15d167f8
JW
2109
2110 /* service_enter_reload_by_notify is never called during a reload, thus no loops are possible. */
2111 r = manager_propagate_reload(UNIT(s)->manager, UNIT(s), JOB_FAIL, &error);
2112 if (r < 0)
2113 log_unit_warning(UNIT(s), "Failed to schedule propagation of reload: %s", bus_error_message(&error, -r));
308d72dc
LP
2114}
2115
034c6ed7
LP
2116static void service_enter_reload(Service *s) {
2117 int r;
2118
2119 assert(s);
2120
5e94833f 2121 service_unwatch_control_pid(s);
95c906ae 2122 s->reload_result = SERVICE_SUCCESS;
5e94833f 2123
117dcc57
ZJS
2124 s->control_command = s->exec_command[SERVICE_EXEC_RELOAD];
2125 if (s->control_command) {
867b3b7d
LP
2126 s->control_command_id = SERVICE_EXEC_RELOAD;
2127
ecedd90f
LP
2128 r = service_spawn(s,
2129 s->control_command,
21b2ce39 2130 s->timeout_start_usec,
1703fa41 2131 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL,
ecedd90f
LP
2132 &s->control_pid);
2133 if (r < 0)
034c6ed7
LP
2134 goto fail;
2135
80876c20
LP
2136 service_set_state(s, SERVICE_RELOAD);
2137 } else
f42806df 2138 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2139
2140 return;
2141
2142fail:
f2341e0a 2143 log_unit_warning_errno(UNIT(s), r, "Failed to run 'reload' task: %m");
f42806df
LP
2144 s->reload_result = SERVICE_FAILURE_RESOURCES;
2145 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
2146}
2147
f42806df 2148static void service_run_next_control(Service *s) {
36c16a7c 2149 usec_t timeout;
034c6ed7
LP
2150 int r;
2151
2152 assert(s);
2153 assert(s->control_command);
2154 assert(s->control_command->command_next);
2155
34e9ba66 2156 assert(s->control_command_id != SERVICE_EXEC_START);
034c6ed7 2157
34e9ba66 2158 s->control_command = s->control_command->command_next;
5e94833f
LP
2159 service_unwatch_control_pid(s);
2160
36c16a7c
LP
2161 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
2162 timeout = s->timeout_start_usec;
2163 else
2164 timeout = s->timeout_stop_usec;
2165
ecedd90f
LP
2166 r = service_spawn(s,
2167 s->control_command,
36c16a7c 2168 timeout,
1703fa41 2169 EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_IS_CONTROL|
136dc4c4
LP
2170 (IN_SET(s->control_command_id, SERVICE_EXEC_START_PRE, SERVICE_EXEC_STOP_POST) ? EXEC_APPLY_TTY_STDIN : 0)|
2171 (IN_SET(s->control_command_id, SERVICE_EXEC_STOP, SERVICE_EXEC_STOP_POST) ? EXEC_SETENV_RESULT : 0),
ecedd90f
LP
2172 &s->control_pid);
2173 if (r < 0)
034c6ed7
LP
2174 goto fail;
2175
2176 return;
2177
2178fail:
f2341e0a 2179 log_unit_warning_errno(UNIT(s), r, "Failed to run next control task: %m");
034c6ed7 2180
4cd9fa81 2181 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START_POST, SERVICE_STOP))
f42806df 2182 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
034c6ed7 2183 else if (s->state == SERVICE_STOP_POST)
f42806df 2184 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
e2f3b44c 2185 else if (s->state == SERVICE_RELOAD) {
f42806df
LP
2186 s->reload_result = SERVICE_FAILURE_RESOURCES;
2187 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c 2188 } else
f42806df 2189 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
5cb5a6ff
LP
2190}
2191
f42806df 2192static void service_run_next_main(Service *s) {
34e9ba66
LP
2193 pid_t pid;
2194 int r;
2195
2196 assert(s);
867b3b7d
LP
2197 assert(s->main_command);
2198 assert(s->main_command->command_next);
2199 assert(s->type == SERVICE_ONESHOT);
34e9ba66 2200
867b3b7d 2201 s->main_command = s->main_command->command_next;
34e9ba66
LP
2202 service_unwatch_main_pid(s);
2203
ecedd90f
LP
2204 r = service_spawn(s,
2205 s->main_command,
21b2ce39 2206 s->timeout_start_usec,
1703fa41 2207 EXEC_PASS_FDS|EXEC_APPLY_SANDBOXING|EXEC_APPLY_CHROOT|EXEC_APPLY_TTY_STDIN|EXEC_SET_WATCHDOG,
ecedd90f
LP
2208 &pid);
2209 if (r < 0)
34e9ba66
LP
2210 goto fail;
2211
2212 service_set_main_pid(s, pid);
2213
2214 return;
2215
2216fail:
f2341e0a 2217 log_unit_warning_errno(UNIT(s), r, "Failed to run next main task: %m");
f42806df 2218 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
34e9ba66
LP
2219}
2220
87f0e418
LP
2221static int service_start(Unit *u) {
2222 Service *s = SERVICE(u);
07299350 2223 int r;
5cb5a6ff
LP
2224
2225 assert(s);
2226
034c6ed7
LP
2227 /* We cannot fulfill this request right now, try again later
2228 * please! */
a00973af
LP
2229 if (IN_SET(s->state,
2230 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
2231 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))
5cb5a6ff
LP
2232 return -EAGAIN;
2233
034c6ed7 2234 /* Already on it! */
a00973af 2235 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST))
034c6ed7
LP
2236 return 0;
2237
2e9d6c12 2238 /* A service that will be restarted must be stopped first to
7f2cddae 2239 * trigger BindsTo and/or OnFailure dependencies. If a user
2e9d6c12 2240 * does not want to wait for the holdoff time to elapse, the
d4943dc7
LP
2241 * service should be manually restarted, not started. We
2242 * simply return EAGAIN here, so that any start jobs stay
2243 * queued, and assume that the auto restart timer will
2244 * eventually trigger the restart. */
2245 if (s->state == SERVICE_AUTO_RESTART)
a8bb2e65 2246 return -EAGAIN;
2e9d6c12 2247
a00973af 2248 assert(IN_SET(s->state, SERVICE_DEAD, SERVICE_FAILED));
5cb5a6ff 2249
07299350
LP
2250 /* Make sure we don't enter a busy loop of some kind. */
2251 r = unit_start_limit_test(u);
2252 if (r < 0) {
2253 service_enter_dead(s, SERVICE_FAILURE_START_LIMIT_HIT, false);
2254 return r;
2255 }
2256
4b58153d
LP
2257 r = unit_acquire_invocation_id(u);
2258 if (r < 0)
2259 return r;
2260
f42806df
LP
2261 s->result = SERVICE_SUCCESS;
2262 s->reload_result = SERVICE_SUCCESS;
034c6ed7 2263 s->main_pid_known = false;
6dfa5494 2264 s->main_pid_alien = false;
47342320 2265 s->forbid_restart = false;
3c7416b6
LP
2266
2267 u->reset_accounting = true;
034c6ed7 2268
a1e58e8e 2269 s->status_text = mfree(s->status_text);
8cfdb077
LP
2270 s->status_errno = 0;
2271
308d72dc
LP
2272 s->notify_state = NOTIFY_UNKNOWN;
2273
2787d83c
M
2274 s->watchdog_override_enable = false;
2275 s->watchdog_override_usec = 0;
2276
7a0019d3
LP
2277 /* This is not an automatic restart? Flush the restart counter then */
2278 if (s->flush_n_restarts) {
2279 s->n_restarts = 0;
2280 s->flush_n_restarts = false;
2281 }
2282
034c6ed7 2283 service_enter_start_pre(s);
82a2b6bb 2284 return 1;
5cb5a6ff
LP
2285}
2286
87f0e418
LP
2287static int service_stop(Unit *u) {
2288 Service *s = SERVICE(u);
5cb5a6ff
LP
2289
2290 assert(s);
2291
a509f0e6 2292 /* Don't create restart jobs from manual stops. */
47342320 2293 s->forbid_restart = true;
034c6ed7 2294
e537352b 2295 /* Already on it */
a00973af
LP
2296 if (IN_SET(s->state,
2297 SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
2298 SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))
e537352b
LP
2299 return 0;
2300
f0c7b229 2301 /* A restart will be scheduled or is in progress. */
034c6ed7 2302 if (s->state == SERVICE_AUTO_RESTART) {
0c7f15b3 2303 service_set_state(s, SERVICE_DEAD);
034c6ed7
LP
2304 return 0;
2305 }
2306
3f6c78dc
LP
2307 /* If there's already something running we go directly into
2308 * kill mode. */
a00973af 2309 if (IN_SET(s->state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD)) {
f42806df 2310 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
3f6c78dc
LP
2311 return 0;
2312 }
5cb5a6ff 2313
a00973af 2314 assert(IN_SET(s->state, SERVICE_RUNNING, SERVICE_EXITED));
3a762661 2315
f42806df 2316 service_enter_stop(s, SERVICE_SUCCESS);
82a2b6bb 2317 return 1;
5cb5a6ff
LP
2318}
2319
87f0e418
LP
2320static int service_reload(Unit *u) {
2321 Service *s = SERVICE(u);
034c6ed7
LP
2322
2323 assert(s);
2324
3742095b 2325 assert(IN_SET(s->state, SERVICE_RUNNING, SERVICE_EXITED));
034c6ed7
LP
2326
2327 service_enter_reload(s);
2d018ae2 2328 return 1;
5cb5a6ff
LP
2329}
2330
44a6b1b6 2331_pure_ static bool service_can_reload(Unit *u) {
87f0e418 2332 Service *s = SERVICE(u);
034c6ed7
LP
2333
2334 assert(s);
2335
2336 return !!s->exec_command[SERVICE_EXEC_RELOAD];
2337}
2338
e266c068
MS
2339static unsigned service_exec_command_index(Unit *u, ServiceExecCommand id, ExecCommand *current) {
2340 Service *s = SERVICE(u);
2341 unsigned idx = 0;
2342 ExecCommand *first, *c;
2343
2344 assert(s);
2345
2346 first = s->exec_command[id];
2347
2348 /* Figure out where we are in the list by walking back to the beginning */
2349 for (c = current; c != first; c = c->command_prev)
2350 idx++;
2351
2352 return idx;
2353}
2354
2355static int service_serialize_exec_command(Unit *u, FILE *f, ExecCommand *command) {
2356 Service *s = SERVICE(u);
2357 ServiceExecCommand id;
2358 unsigned idx;
2359 const char *type;
2360 char **arg;
e266c068
MS
2361 _cleanup_free_ char *args = NULL, *p = NULL;
2362 size_t allocated = 0, length = 0;
2363
2364 assert(s);
2365 assert(f);
2366
2367 if (!command)
2368 return 0;
2369
2370 if (command == s->control_command) {
2371 type = "control";
2372 id = s->control_command_id;
2373 } else {
2374 type = "main";
2375 id = SERVICE_EXEC_START;
2376 }
2377
2378 idx = service_exec_command_index(u, id, command);
2379
2380 STRV_FOREACH(arg, command->argv) {
2381 size_t n;
2382 _cleanup_free_ char *e = NULL;
2383
2384 e = xescape(*arg, WHITESPACE);
2385 if (!e)
2386 return -ENOMEM;
2387
2388 n = strlen(e);
2389 if (!GREEDY_REALLOC(args, allocated, length + 1 + n + 1))
2390 return -ENOMEM;
2391
2392 if (length > 0)
2393 args[length++] = ' ';
2394
2395 memcpy(args + length, e, n);
2396 length += n;
2397 }
2398
2399 if (!GREEDY_REALLOC(args, allocated, length + 1))
2400 return -ENOMEM;
2401 args[length++] = 0;
2402
2403 p = xescape(command->path, WHITESPACE);
2404 if (!p)
2405 return -ENOMEM;
2406
2407 fprintf(f, "%s-command=%s %u %s %s\n", type, service_exec_command_to_string(id), idx, p, args);
2408
2409 return 0;
2410}
2411
a16e1123
LP
2412static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2413 Service *s = SERVICE(u);
2339fc93 2414 ServiceFDStore *fs;
a34ceba6 2415 int r;
a16e1123
LP
2416
2417 assert(u);
2418 assert(f);
2419 assert(fds);
2420
2421 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
f42806df
LP
2422 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2423 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
a16e1123
LP
2424
2425 if (s->control_pid > 0)
f06db334 2426 unit_serialize_item_format(u, f, "control-pid", PID_FMT, s->control_pid);
a16e1123 2427
5925dd3c 2428 if (s->main_pid_known && s->main_pid > 0)
ccd06097 2429 unit_serialize_item_format(u, f, "main-pid", PID_FMT, s->main_pid);
a16e1123
LP
2430
2431 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
de1d4f9b 2432 unit_serialize_item(u, f, "bus-name-good", yes_no(s->bus_name_good));
d8ccf5fd 2433 unit_serialize_item(u, f, "bus-name-owner", s->bus_name_owner);
a16e1123 2434
7a0019d3 2435 unit_serialize_item_format(u, f, "n-restarts", "%u", s->n_restarts);
7f923884 2436 unit_serialize_item(u, f, "flush-n-restarts", yes_no(s->flush_n_restarts));
7a0019d3 2437
a34ceba6
LP
2438 r = unit_serialize_item_escaped(u, f, "status-text", s->status_text);
2439 if (r < 0)
2440 return r;
3a2776bc 2441
e266c068
MS
2442 service_serialize_exec_command(u, f, s->control_command);
2443 service_serialize_exec_command(u, f, s->main_command);
a16e1123 2444
a34ceba6
LP
2445 r = unit_serialize_item_fd(u, f, fds, "stdin-fd", s->stdin_fd);
2446 if (r < 0)
2447 return r;
2448 r = unit_serialize_item_fd(u, f, fds, "stdout-fd", s->stdout_fd);
2449 if (r < 0)
2450 return r;
2451 r = unit_serialize_item_fd(u, f, fds, "stderr-fd", s->stderr_fd);
2452 if (r < 0)
2453 return r;
e44da745 2454
9dfb64f8
ZJS
2455 if (UNIT_ISSET(s->accept_socket)) {
2456 r = unit_serialize_item(u, f, "accept-socket", UNIT_DEREF(s->accept_socket)->id);
2457 if (r < 0)
2458 return r;
2459 }
2460
a34ceba6 2461 r = unit_serialize_item_fd(u, f, fds, "socket-fd", s->socket_fd);
a34ceba6
LP
2462 if (r < 0)
2463 return r;
e44da745 2464
2339fc93 2465 LIST_FOREACH(fd_store, fs, s->fd_store) {
8dd4c05b 2466 _cleanup_free_ char *c = NULL;
2339fc93
LP
2467 int copy;
2468
2469 copy = fdset_put_dup(fds, fs->fd);
2470 if (copy < 0)
2471 return copy;
2472
8dd4c05b
LP
2473 c = cescape(fs->fdname);
2474
2475 unit_serialize_item_format(u, f, "fd-store-fd", "%i %s", copy, strempty(c));
2339fc93
LP
2476 }
2477
ecdbca40 2478 if (s->main_exec_status.pid > 0) {
f06db334
LP
2479 unit_serialize_item_format(u, f, "main-exec-status-pid", PID_FMT, s->main_exec_status.pid);
2480 dual_timestamp_serialize(f, "main-exec-status-start", &s->main_exec_status.start_timestamp);
2481 dual_timestamp_serialize(f, "main-exec-status-exit", &s->main_exec_status.exit_timestamp);
ecdbca40 2482
799fd0fd 2483 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
f06db334
LP
2484 unit_serialize_item_format(u, f, "main-exec-status-code", "%i", s->main_exec_status.code);
2485 unit_serialize_item_format(u, f, "main-exec-status-status", "%i", s->main_exec_status.status);
ecdbca40
LP
2486 }
2487 }
f06db334 2488
36b693a6 2489 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
ecdbca40 2490
a34ceba6 2491 unit_serialize_item(u, f, "forbid-restart", yes_no(s->forbid_restart));
6aca9a58 2492
2787d83c
M
2493 if (s->watchdog_override_enable)
2494 unit_serialize_item_format(u, f, "watchdog-override-usec", USEC_FMT, s->watchdog_override_usec);
2495
a16e1123
LP
2496 return 0;
2497}
2498
e266c068
MS
2499static int service_deserialize_exec_command(Unit *u, const char *key, const char *value) {
2500 Service *s = SERVICE(u);
2501 int r;
2502 unsigned idx = 0, i;
2503 bool control, found = false;
2504 ServiceExecCommand id = _SERVICE_EXEC_COMMAND_INVALID;
2505 ExecCommand *command = NULL;
6eeec374 2506 _cleanup_free_ char *path = NULL;
e266c068
MS
2507 _cleanup_strv_free_ char **argv = NULL;
2508
2509 enum ExecCommandState {
2510 STATE_EXEC_COMMAND_TYPE,
2511 STATE_EXEC_COMMAND_INDEX,
2512 STATE_EXEC_COMMAND_PATH,
2513 STATE_EXEC_COMMAND_ARGS,
2514 _STATE_EXEC_COMMAND_MAX,
2515 _STATE_EXEC_COMMAND_INVALID = -1,
2516 } state;
2517
2518 assert(s);
2519 assert(key);
2520 assert(value);
2521
2522 control = streq(key, "control-command");
2523
2524 state = STATE_EXEC_COMMAND_TYPE;
2525
2526 for (;;) {
2527 _cleanup_free_ char *arg = NULL;
2528
2529 r = extract_first_word(&value, &arg, NULL, EXTRACT_CUNESCAPE);
2530 if (r == 0)
2531 break;
2532 else if (r < 0)
2533 return r;
2534
2535 switch (state) {
2536 case STATE_EXEC_COMMAND_TYPE:
2537 id = service_exec_command_from_string(arg);
2538 if (id < 0)
2539 return -EINVAL;
2540
2541 state = STATE_EXEC_COMMAND_INDEX;
2542 break;
2543 case STATE_EXEC_COMMAND_INDEX:
2544 r = safe_atou(arg, &idx);
2545 if (r < 0)
2546 return -EINVAL;
2547
2548 state = STATE_EXEC_COMMAND_PATH;
2549 break;
2550 case STATE_EXEC_COMMAND_PATH:
2551 path = arg;
2552 arg = NULL;
2553 state = STATE_EXEC_COMMAND_ARGS;
2554
2555 if (!path_is_absolute(path))
2556 return -EINVAL;
2557 break;
2558 case STATE_EXEC_COMMAND_ARGS:
2559 r = strv_extend(&argv, arg);
2560 if (r < 0)
2561 return -ENOMEM;
2562 break;
2563 default:
2564 assert_not_reached("Unknown error at deserialization of exec command");
2565 break;
2566 }
2567 }
2568
2569 if (state != STATE_EXEC_COMMAND_ARGS)
2570 return -EINVAL;
2571
2572 /* Let's check whether exec command on given offset matches data that we just deserialized */
2573 for (command = s->exec_command[id], i = 0; command; command = command->command_next, i++) {
2574 if (i != idx)
2575 continue;
2576
2577 found = strv_equal(argv, command->argv) && streq(command->path, path);
2578 break;
2579 }
2580
2581 if (!found) {
2582 /* Command at the index we serialized is different, let's look for command that exactly
2583 * matches but is on different index. If there is no such command we will not resume execution. */
2584 for (command = s->exec_command[id]; command; command = command->command_next)
2585 if (strv_equal(command->argv, argv) && streq(command->path, path))
2586 break;
2587 }
2588
2589 if (command && control)
2590 s->control_command = command;
2591 else if (command)
2592 s->main_command = command;
2593 else
2594 log_unit_warning(u, "Current command vanished from the unit file, execution of the command list won't be resumed.");
2595
2596 return 0;
2597}
2598
a16e1123
LP
2599static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2600 Service *s = SERVICE(u);
2339fc93 2601 int r;
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)
f2341e0a 2613 log_unit_debug(u, "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)
f2341e0a 2621 log_unit_debug(u, "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)
f2341e0a 2630 log_unit_debug(u, "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)
f2341e0a 2638 log_unit_debug(u, "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)
f2341e0a 2645 log_unit_debug(u, "Failed to parse main-pid value: %s", value);
eabd3e56
LP
2646 else
2647 (void) service_set_main_pid(s, pid);
a16e1123
LP
2648 } else if (streq(key, "main-pid-known")) {
2649 int b;
2650
117dcc57
ZJS
2651 b = parse_boolean(value);
2652 if (b < 0)
f2341e0a 2653 log_unit_debug(u, "Failed to parse main-pid-known value: %s", value);
a16e1123
LP
2654 else
2655 s->main_pid_known = b;
de1d4f9b
WF
2656 } else if (streq(key, "bus-name-good")) {
2657 int b;
2658
2659 b = parse_boolean(value);
2660 if (b < 0)
2661 log_unit_debug(u, "Failed to parse bus-name-good value: %s", value);
2662 else
2663 s->bus_name_good = b;
d8ccf5fd
DM
2664 } else if (streq(key, "bus-name-owner")) {
2665 r = free_and_strdup(&s->bus_name_owner, value);
2666 if (r < 0)
2667 log_unit_error_errno(u, r, "Unable to deserialize current bus owner %s: %m", value);
3a2776bc
LP
2668 } else if (streq(key, "status-text")) {
2669 char *t;
2670
f2341e0a
LP
2671 r = cunescape(value, 0, &t);
2672 if (r < 0)
2673 log_unit_debug_errno(u, r, "Failed to unescape status text: %s", value);
117dcc57 2674 else {
3a2776bc
LP
2675 free(s->status_text);
2676 s->status_text = t;
2677 }
2678
9dfb64f8
ZJS
2679 } else if (streq(key, "accept-socket")) {
2680 Unit *socket;
2681
2682 r = manager_load_unit(u->manager, value, NULL, NULL, &socket);
2683 if (r < 0)
2684 log_unit_debug_errno(u, r, "Failed to load accept-socket unit: %s", value);
2685 else {
7f7d01ed 2686 unit_ref_set(&s->accept_socket, u, socket);
9dfb64f8
ZJS
2687 SOCKET(socket)->n_connections++;
2688 }
2689
a16e1123
LP
2690 } else if (streq(key, "socket-fd")) {
2691 int fd;
2692
2693 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
f2341e0a 2694 log_unit_debug(u, "Failed to parse socket-fd value: %s", value);
a16e1123 2695 else {
574634bc 2696 asynchronous_close(s->socket_fd);
a16e1123
LP
2697 s->socket_fd = fdset_remove(fds, fd);
2698 }
2339fc93 2699 } else if (streq(key, "fd-store-fd")) {
8dd4c05b
LP
2700 const char *fdv;
2701 size_t pf;
2339fc93
LP
2702 int fd;
2703
8dd4c05b
LP
2704 pf = strcspn(value, WHITESPACE);
2705 fdv = strndupa(value, pf);
2706
2707 if (safe_atoi(fdv, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
f2341e0a 2708 log_unit_debug(u, "Failed to parse fd-store-fd value: %s", value);
2339fc93 2709 else {
8dd4c05b
LP
2710 _cleanup_free_ char *t = NULL;
2711 const char *fdn;
2712
2713 fdn = value + pf;
2714 fdn += strspn(fdn, WHITESPACE);
2715 (void) cunescape(fdn, 0, &t);
2716
2717 r = service_add_fd_store(s, fd, t);
2339fc93 2718 if (r < 0)
f2341e0a 2719 log_unit_error_errno(u, r, "Failed to add fd to store: %m");
9021ff17 2720 else
2339fc93
LP
2721 fdset_remove(fds, fd);
2722 }
2723
ecdbca40
LP
2724 } else if (streq(key, "main-exec-status-pid")) {
2725 pid_t pid;
2726
e364ad06 2727 if (parse_pid(value, &pid) < 0)
f2341e0a 2728 log_unit_debug(u, "Failed to parse main-exec-status-pid value: %s", value);
ecdbca40
LP
2729 else
2730 s->main_exec_status.pid = pid;
2731 } else if (streq(key, "main-exec-status-code")) {
2732 int i;
2733
e364ad06 2734 if (safe_atoi(value, &i) < 0)
f2341e0a 2735 log_unit_debug(u, "Failed to parse main-exec-status-code value: %s", value);
ecdbca40
LP
2736 else
2737 s->main_exec_status.code = i;
2738 } else if (streq(key, "main-exec-status-status")) {
2739 int i;
2740
e364ad06 2741 if (safe_atoi(value, &i) < 0)
f2341e0a 2742 log_unit_debug(u, "Failed to parse main-exec-status-status value: %s", value);
ecdbca40
LP
2743 else
2744 s->main_exec_status.status = i;
799fd0fd
LP
2745 } else if (streq(key, "main-exec-status-start"))
2746 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2747 else if (streq(key, "main-exec-status-exit"))
2748 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
a6927d7f
MO
2749 else if (streq(key, "watchdog-timestamp"))
2750 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
613b411c 2751 else if (streq(key, "forbid-restart")) {
6aca9a58
SE
2752 int b;
2753
2754 b = parse_boolean(value);
2755 if (b < 0)
f2341e0a 2756 log_unit_debug(u, "Failed to parse forbid-restart value: %s", value);
6aca9a58
SE
2757 else
2758 s->forbid_restart = b;
a34ceba6
LP
2759 } else if (streq(key, "stdin-fd")) {
2760 int fd;
2761
2762 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2763 log_unit_debug(u, "Failed to parse stdin-fd value: %s", value);
2764 else {
2765 asynchronous_close(s->stdin_fd);
2766 s->stdin_fd = fdset_remove(fds, fd);
1e22b5cd 2767 s->exec_context.stdio_as_fds = true;
a34ceba6
LP
2768 }
2769 } else if (streq(key, "stdout-fd")) {
2770 int fd;
2771
2772 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2773 log_unit_debug(u, "Failed to parse stdout-fd value: %s", value);
2774 else {
2775 asynchronous_close(s->stdout_fd);
2776 s->stdout_fd = fdset_remove(fds, fd);
1e22b5cd 2777 s->exec_context.stdio_as_fds = true;
a34ceba6
LP
2778 }
2779 } else if (streq(key, "stderr-fd")) {
2780 int fd;
2781
2782 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2783 log_unit_debug(u, "Failed to parse stderr-fd value: %s", value);
2784 else {
2785 asynchronous_close(s->stderr_fd);
2786 s->stderr_fd = fdset_remove(fds, fd);
1e22b5cd 2787 s->exec_context.stdio_as_fds = true;
a34ceba6 2788 }
2787d83c
M
2789 } else if (streq(key, "watchdog-override-usec")) {
2790 usec_t watchdog_override_usec;
2791 if (timestamp_deserialize(value, &watchdog_override_usec) < 0)
2792 log_unit_debug(u, "Failed to parse watchdog_override_usec value: %s", value);
2793 else {
2794 s->watchdog_override_enable = true;
2795 s->watchdog_override_usec = watchdog_override_usec;
2796 }
e266c068
MS
2797 } else if (STR_IN_SET(key, "main-command", "control-command")) {
2798 r = service_deserialize_exec_command(u, key, value);
2799 if (r < 0)
2800 log_unit_debug_errno(u, r, "Failed to parse serialized command \"%s\": %m", value);
7a0019d3
LP
2801
2802 } else if (streq(key, "n-restarts")) {
2803 r = safe_atou(value, &s->n_restarts);
2804 if (r < 0)
2805 log_unit_debug_errno(u, r, "Failed to parse serialized restart counter '%s': %m", value);
2806
2807 } else if (streq(key, "flush-n-restarts")) {
2808 r = parse_boolean(value);
2809 if (r < 0)
2810 log_unit_debug_errno(u, r, "Failed to parse serialized flush restart counter setting '%s': %m", value);
2811 else
2812 s->flush_n_restarts = r;
c17ec25e 2813 } else
f2341e0a 2814 log_unit_debug(u, "Unknown serialization key: %s", key);
a16e1123
LP
2815
2816 return 0;
2817}
2818
44a6b1b6 2819_pure_ static UnitActiveState service_active_state(Unit *u) {
e056b01d
LP
2820 const UnitActiveState *table;
2821
87f0e418 2822 assert(u);
5cb5a6ff 2823
e056b01d
LP
2824 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2825
2826 return table[SERVICE(u)->state];
034c6ed7
LP
2827}
2828
10a94420
LP
2829static const char *service_sub_state_to_string(Unit *u) {
2830 assert(u);
2831
2832 return service_state_to_string(SERVICE(u)->state);
2833}
2834
f2f725e5 2835static bool service_may_gc(Unit *u) {
701cc384
LP
2836 Service *s = SERVICE(u);
2837
2838 assert(s);
2839
e98b2fbb 2840 /* Never clean up services that still have a process around, even if the service is formally dead. Note that
f2f725e5 2841 * unit_may_gc() already checked our cgroup for us, we just check our two additional PIDs, too, in case they
e98b2fbb
LP
2842 * have moved outside of the cgroup. */
2843
2844 if (main_pid_good(s) > 0 ||
6d55002a 2845 control_pid_good(s) > 0)
f2f725e5 2846 return false;
6d55002a 2847
f2f725e5 2848 return true;
6d55002a
LP
2849}
2850
3a111838
MS
2851static int service_retry_pid_file(Service *s) {
2852 int r;
2853
2854 assert(s->pid_file);
3742095b 2855 assert(IN_SET(s->state, SERVICE_START, SERVICE_START_POST));
3a111838
MS
2856
2857 r = service_load_pid_file(s, false);
2858 if (r < 0)
2859 return r;
2860
2861 service_unwatch_pid_file(s);
2862
f42806df 2863 service_enter_running(s, SERVICE_SUCCESS);
3a111838
MS
2864 return 0;
2865}
2866
2867static int service_watch_pid_file(Service *s) {
2868 int r;
2869
f2341e0a 2870 log_unit_debug(UNIT(s), "Setting watch for PID file %s", s->pid_file_pathspec->path);
8bb2d17d 2871
718db961 2872 r = path_spec_watch(s->pid_file_pathspec, service_dispatch_io);
3a111838
MS
2873 if (r < 0)
2874 goto fail;
2875
2876 /* the pidfile might have appeared just before we set the watch */
f2341e0a 2877 log_unit_debug(UNIT(s), "Trying to read PID file %s in case it changed", s->pid_file_pathspec->path);
3a111838
MS
2878 service_retry_pid_file(s);
2879
2880 return 0;
2881fail:
f2341e0a 2882 log_unit_error_errno(UNIT(s), r, "Failed to set a watch for PID file %s: %m", s->pid_file_pathspec->path);
3a111838
MS
2883 service_unwatch_pid_file(s);
2884 return r;
2885}
2886
2887static int service_demand_pid_file(Service *s) {
2888 PathSpec *ps;
2889
2890 assert(s->pid_file);
2891 assert(!s->pid_file_pathspec);
2892
2893 ps = new0(PathSpec, 1);
2894 if (!ps)
2895 return -ENOMEM;
2896
718db961 2897 ps->unit = UNIT(s);
3a111838
MS
2898 ps->path = strdup(s->pid_file);
2899 if (!ps->path) {
2900 free(ps);
2901 return -ENOMEM;
2902 }
2903
2904 path_kill_slashes(ps->path);
2905
2906 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2907 * keep their PID file open all the time. */
2908 ps->type = PATH_MODIFIED;
2909 ps->inotify_fd = -1;
2910
2911 s->pid_file_pathspec = ps;
2912
2913 return service_watch_pid_file(s);
2914}
2915
718db961 2916static int service_dispatch_io(sd_event_source *source, int fd, uint32_t events, void *userdata) {
e14c2802
LP
2917 PathSpec *p = userdata;
2918 Service *s;
2919
2920 assert(p);
2921
2922 s = SERVICE(p->unit);
3a111838
MS
2923
2924 assert(s);
2925 assert(fd >= 0);
3742095b 2926 assert(IN_SET(s->state, SERVICE_START, SERVICE_START_POST));
3a111838 2927 assert(s->pid_file_pathspec);
57020a3a 2928 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
3a111838 2929
f2341e0a 2930 log_unit_debug(UNIT(s), "inotify event");
3a111838 2931
e14c2802 2932 if (path_spec_fd_event(p, events) < 0)
3a111838
MS
2933 goto fail;
2934
2935 if (service_retry_pid_file(s) == 0)
718db961 2936 return 0;
3a111838
MS
2937
2938 if (service_watch_pid_file(s) < 0)
2939 goto fail;
2940
718db961
LP
2941 return 0;
2942
3a111838
MS
2943fail:
2944 service_unwatch_pid_file(s);
f42806df 2945 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
718db961 2946 return 0;
3a111838
MS
2947}
2948
a911bb9a
LP
2949static void service_notify_cgroup_empty_event(Unit *u) {
2950 Service *s = SERVICE(u);
2951
2952 assert(u);
2953
f2341e0a 2954 log_unit_debug(u, "cgroup is empty");
a911bb9a
LP
2955
2956 switch (s->state) {
2957
2958 /* Waiting for SIGCHLD is usually more interesting,
2959 * because it includes return codes/signals. Which is
2960 * why we ignore the cgroup events for most cases,
2961 * except when we don't know pid which to expect the
2962 * SIGCHLD for. */
2963
2964 case SERVICE_START:
3c751b1b
LP
2965 if (s->type == SERVICE_NOTIFY &&
2966 main_pid_good(s) == 0 &&
2967 control_pid_good(s) == 0) {
3d474ef7 2968 /* No chance of getting a ready notification anymore */
c3fda31d 2969 service_enter_stop_post(s, SERVICE_FAILURE_PROTOCOL);
71e529fc
JW
2970 break;
2971 }
2972
4831981d 2973 _fallthrough_;
71e529fc 2974 case SERVICE_START_POST:
3c751b1b
LP
2975 if (s->pid_file_pathspec &&
2976 main_pid_good(s) == 0 &&
2977 control_pid_good(s) == 0) {
2978
3d474ef7 2979 /* Give up hoping for the daemon to write its PID file */
f2341e0a 2980 log_unit_warning(u, "Daemon never wrote its PID file. Failing.");
8bb2d17d 2981
a911bb9a
LP
2982 service_unwatch_pid_file(s);
2983 if (s->state == SERVICE_START)
c3fda31d 2984 service_enter_stop_post(s, SERVICE_FAILURE_PROTOCOL);
a911bb9a 2985 else
c35755fb 2986 service_enter_stop(s, SERVICE_FAILURE_PROTOCOL);
a911bb9a
LP
2987 }
2988 break;
2989
2990 case SERVICE_RUNNING:
2991 /* service_enter_running() will figure out what to do */
2992 service_enter_running(s, SERVICE_SUCCESS);
2993 break;
2994
db2cb23b 2995 case SERVICE_STOP_SIGABRT:
a911bb9a
LP
2996 case SERVICE_STOP_SIGTERM:
2997 case SERVICE_STOP_SIGKILL:
2998
b13ddbbc 2999 if (main_pid_good(s) <= 0 && control_pid_good(s) <= 0)
a911bb9a
LP
3000 service_enter_stop_post(s, SERVICE_SUCCESS);
3001
3002 break;
3003
3004 case SERVICE_STOP_POST:
3005 case SERVICE_FINAL_SIGTERM:
3006 case SERVICE_FINAL_SIGKILL:
b13ddbbc 3007 if (main_pid_good(s) <= 0 && control_pid_good(s) <= 0)
a911bb9a
LP
3008 service_enter_dead(s, SERVICE_SUCCESS, true);
3009
3010 break;
3011
3012 default:
3013 ;
3014 }
3015}
3016
87f0e418 3017static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
5cdabc8d 3018 bool notify_dbus = true;
87f0e418 3019 Service *s = SERVICE(u);
f42806df 3020 ServiceResult f;
5cb5a6ff
LP
3021
3022 assert(s);
034c6ed7
LP
3023 assert(pid >= 0);
3024
1f0958f6 3025 if (is_clean_exit(code, status, s->type == SERVICE_ONESHOT ? EXIT_CLEAN_COMMAND : EXIT_CLEAN_DAEMON, &s->success_status))
f42806df
LP
3026 f = SERVICE_SUCCESS;
3027 else if (code == CLD_EXITED)
3028 f = SERVICE_FAILURE_EXIT_CODE;
3029 else if (code == CLD_KILLED)
3030 f = SERVICE_FAILURE_SIGNAL;
3031 else if (code == CLD_DUMPED)
3032 f = SERVICE_FAILURE_CORE_DUMP;
d06dacd0 3033 else
cfc4eb4c 3034 assert_not_reached("Unknown code");
034c6ed7
LP
3035
3036 if (s->main_pid == pid) {
db01f8b3
MS
3037 /* Forking services may occasionally move to a new PID.
3038 * As long as they update the PID file before exiting the old
3039 * PID, they're fine. */
db256aab 3040 if (service_load_pid_file(s, false) > 0)
db01f8b3 3041 return;
034c6ed7 3042
034c6ed7 3043 s->main_pid = 0;
6ea832a2 3044 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
034c6ed7 3045
867b3b7d 3046 if (s->main_command) {
fbeefb45
LP
3047 /* If this is not a forking service than the
3048 * main process got started and hence we copy
3049 * the exit status so that it is recorded both
3050 * as main and as control process exit
3051 * status */
3052
867b3b7d 3053 s->main_command->exec_status = s->main_exec_status;
b708e7ce 3054
3ed0cd26 3055 if (s->main_command->flags & EXEC_COMMAND_IGNORE_FAILURE)
f42806df 3056 f = SERVICE_SUCCESS;
fbeefb45
LP
3057 } else if (s->exec_command[SERVICE_EXEC_START]) {
3058
3059 /* If this is a forked process, then we should
3060 * ignore the return value if this was
3061 * configured for the starter process */
3062
3ed0cd26 3063 if (s->exec_command[SERVICE_EXEC_START]->flags & EXEC_COMMAND_IGNORE_FAILURE)
fbeefb45 3064 f = SERVICE_SUCCESS;
034c6ed7
LP
3065 }
3066
5368222d
LP
3067 /* When this is a successful exit, let's log about the exit code on DEBUG level. If this is a failure
3068 * and the process exited on its own via exit(), then let's make this a NOTICE, under the assumption
3069 * that the service already logged the reason at a higher log level on its own. However, if the service
3070 * died due to a signal, then it most likely didn't say anything about any reason, hence let's raise
3071 * our log level to WARNING then. */
3072
3073 log_struct(f == SERVICE_SUCCESS ? LOG_DEBUG :
3074 (code == CLD_EXITED ? LOG_NOTICE : LOG_WARNING),
f2341e0a
LP
3075 LOG_UNIT_MESSAGE(u, "Main process exited, code=%s, status=%i/%s",
3076 sigchld_code_to_string(code), status,
e2cc6eca
LP
3077 strna(code == CLD_EXITED
3078 ? exit_status_to_string(status, EXIT_STATUS_FULL)
3079 : signal_to_string(status))),
f2341e0a
LP
3080 "EXIT_CODE=%s", sigchld_code_to_string(code),
3081 "EXIT_STATUS=%i", status,
ba360bb0 3082 LOG_UNIT_ID(u),
f1c50bec 3083 LOG_UNIT_INVOCATION_ID(u),
f2341e0a 3084 NULL);
f42806df 3085
a0fef983 3086 if (s->result == SERVICE_SUCCESS)
f42806df 3087 s->result = f;
034c6ed7 3088
867b3b7d
LP
3089 if (s->main_command &&
3090 s->main_command->command_next &&
b58aeb70 3091 s->type == SERVICE_ONESHOT &&
f42806df 3092 f == SERVICE_SUCCESS) {
034c6ed7 3093
34e9ba66
LP
3094 /* There is another command to *
3095 * execute, so let's do that. */
034c6ed7 3096
f2341e0a 3097 log_unit_debug(u, "Running next main command for state %s.", service_state_to_string(s->state));
f42806df 3098 service_run_next_main(s);
034c6ed7 3099
34e9ba66
LP
3100 } else {
3101
3102 /* The service exited, so the service is officially
3103 * gone. */
867b3b7d 3104 s->main_command = NULL;
34e9ba66
LP
3105
3106 switch (s->state) {
3107
3108 case SERVICE_START_POST:
3109 case SERVICE_RELOAD:
3110 case SERVICE_STOP:
3111 /* Need to wait until the operation is
3112 * done */
c4653a4d 3113 break;
7d55e835 3114
34e9ba66
LP
3115 case SERVICE_START:
3116 if (s->type == SERVICE_ONESHOT) {
3117 /* This was our main goal, so let's go on */
f42806df 3118 if (f == SERVICE_SUCCESS)
34e9ba66
LP
3119 service_enter_start_post(s);
3120 else
c3fda31d 3121 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
34e9ba66 3122 break;
3d474ef7
JW
3123 } else if (s->type == SERVICE_NOTIFY) {
3124 /* Only enter running through a notification, so that the
3125 * SERVICE_START state signifies that no ready notification
3126 * has been received */
3127 if (f != SERVICE_SUCCESS)
c3fda31d 3128 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
df66b93f
JW
3129 else if (!s->remain_after_exit || s->notify_access == NOTIFY_MAIN)
3130 /* The service has never been and will never be active */
c3fda31d 3131 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_PROTOCOL);
3d474ef7 3132 break;
34e9ba66 3133 }
034c6ed7 3134
4831981d 3135 _fallthrough_;
34e9ba66 3136 case SERVICE_RUNNING:
f42806df 3137 service_enter_running(s, f);
34e9ba66 3138 break;
034c6ed7 3139
db2cb23b 3140 case SERVICE_STOP_SIGABRT:
34e9ba66
LP
3141 case SERVICE_STOP_SIGTERM:
3142 case SERVICE_STOP_SIGKILL:
5cb5a6ff 3143
b13ddbbc 3144 if (control_pid_good(s) <= 0)
f42806df 3145 service_enter_stop_post(s, f);
5cb5a6ff 3146
34e9ba66
LP
3147 /* If there is still a control process, wait for that first */
3148 break;
3149
bf108e55
LP
3150 case SERVICE_STOP_POST:
3151 case SERVICE_FINAL_SIGTERM:
3152 case SERVICE_FINAL_SIGKILL:
3153
b13ddbbc 3154 if (control_pid_good(s) <= 0)
bf108e55
LP
3155 service_enter_dead(s, f, true);
3156 break;
3157
34e9ba66
LP
3158 default:
3159 assert_not_reached("Uh, main process died at wrong time.");
3160 }
034c6ed7 3161 }
5cb5a6ff 3162
034c6ed7 3163 } else if (s->control_pid == pid) {
34e9ba66
LP
3164 s->control_pid = 0;
3165
b708e7ce 3166 if (s->control_command) {
8bb2d17d 3167 exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
a16e1123 3168
3ed0cd26 3169 if (s->control_command->flags & EXEC_COMMAND_IGNORE_FAILURE)
f42806df 3170 f = SERVICE_SUCCESS;
b708e7ce
LP
3171 }
3172
f2341e0a
LP
3173 log_unit_full(u, f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE, 0,
3174 "Control process exited, code=%s status=%i",
3175 sigchld_code_to_string(code), status);
f42806df 3176
a0fef983 3177 if (s->result == SERVICE_SUCCESS)
f42806df 3178 s->result = f;
034c6ed7 3179
34e9ba66
LP
3180 if (s->control_command &&
3181 s->control_command->command_next &&
f42806df 3182 f == SERVICE_SUCCESS) {
034c6ed7
LP
3183
3184 /* There is another command to *
3185 * execute, so let's do that. */
3186
f2341e0a 3187 log_unit_debug(u, "Running next control command for state %s.", service_state_to_string(s->state));
f42806df 3188 service_run_next_control(s);
034c6ed7 3189
80876c20 3190 } else {
034c6ed7
LP
3191 /* No further commands for this step, so let's
3192 * figure out what to do next */
3193
a16e1123
LP
3194 s->control_command = NULL;
3195 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
3196
f2341e0a 3197 log_unit_debug(u, "Got final SIGCHLD for state %s.", service_state_to_string(s->state));
bd982a8b 3198
034c6ed7
LP
3199 switch (s->state) {
3200
3201 case SERVICE_START_PRE:
f42806df 3202 if (f == SERVICE_SUCCESS)
034c6ed7
LP
3203 service_enter_start(s);
3204 else
c3fda31d 3205 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3206 break;
3207
3208 case SERVICE_START:
bfba3256
LP
3209 if (s->type != SERVICE_FORKING)
3210 /* Maybe spurious event due to a reload that changed the type? */
3211 break;
034c6ed7 3212
f42806df 3213 if (f != SERVICE_SUCCESS) {
c3fda31d 3214 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3a111838
MS
3215 break;
3216 }
034c6ed7 3217
3a111838 3218 if (s->pid_file) {
f42806df
LP
3219 bool has_start_post;
3220 int r;
3221
3a111838
MS
3222 /* Let's try to load the pid file here if we can.
3223 * The PID file might actually be created by a START_POST
3224 * script. In that case don't worry if the loading fails. */
f42806df
LP
3225
3226 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3227 r = service_load_pid_file(s, !has_start_post);
3a111838
MS
3228 if (!has_start_post && r < 0) {
3229 r = service_demand_pid_file(s);
b13ddbbc 3230 if (r < 0 || cgroup_good(s) == 0)
c3fda31d 3231 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_PROTOCOL);
3a111838
MS
3232 break;
3233 }
034c6ed7 3234 } else
783e05d6 3235 service_search_main_pid(s);
034c6ed7 3236
3a111838 3237 service_enter_start_post(s);
034c6ed7
LP
3238 break;
3239
3240 case SERVICE_START_POST:
f42806df 3241 if (f != SERVICE_SUCCESS) {
ce359e98 3242 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
2096e009 3243 break;
034c6ed7
LP
3244 }
3245
2096e009 3246 if (s->pid_file) {
f42806df
LP
3247 int r;
3248
3249 r = service_load_pid_file(s, true);
2096e009
MS
3250 if (r < 0) {
3251 r = service_demand_pid_file(s);
b13ddbbc 3252 if (r < 0 || cgroup_good(s) == 0)
c35755fb 3253 service_enter_stop(s, SERVICE_FAILURE_PROTOCOL);
2096e009
MS
3254 break;
3255 }
3256 } else
783e05d6 3257 service_search_main_pid(s);
2096e009 3258
f42806df 3259 service_enter_running(s, SERVICE_SUCCESS);
3185a36b 3260 break;
034c6ed7
LP
3261
3262 case SERVICE_RELOAD:
7236ce6e
ZJS
3263 if (f == SERVICE_SUCCESS)
3264 if (service_load_pid_file(s, true) < 0)
3265 service_search_main_pid(s);
3185a36b 3266
f42806df
LP
3267 s->reload_result = f;
3268 service_enter_running(s, SERVICE_SUCCESS);
034c6ed7
LP
3269 break;
3270
3271 case SERVICE_STOP:
f42806df 3272 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
034c6ed7
LP
3273 break;
3274
db2cb23b 3275 case SERVICE_STOP_SIGABRT:
034c6ed7
LP
3276 case SERVICE_STOP_SIGTERM:
3277 case SERVICE_STOP_SIGKILL:
3278 if (main_pid_good(s) <= 0)
f42806df 3279 service_enter_stop_post(s, f);
034c6ed7
LP
3280
3281 /* If there is still a service
3282 * process around, wait until
3283 * that one quit, too */
3284 break;
3285
3286 case SERVICE_STOP_POST:
3287 case SERVICE_FINAL_SIGTERM:
3288 case SERVICE_FINAL_SIGKILL:
bf108e55
LP
3289 if (main_pid_good(s) <= 0)
3290 service_enter_dead(s, f, true);
034c6ed7
LP
3291 break;
3292
3293 default:
3294 assert_not_reached("Uh, control process died at wrong time.");
3295 }
3296 }
5cdabc8d
LP
3297 } else /* Neither control nor main PID? If so, don't notify about anything */
3298 notify_dbus = false;
c4e2ceae
LP
3299
3300 /* Notify clients about changed exit status */
5cdabc8d
LP
3301 if (notify_dbus)
3302 unit_add_to_dbus_queue(u);
a911bb9a 3303
11aef522
LP
3304 /* If we get a SIGCHLD event for one of the processes we were interested in, then we look for others to watch,
3305 * under the assumption that we'll sooner or later get a SIGCHLD for them, as the original process we watched
3306 * was probably the parent of them, and they are hence now our children. */
a911bb9a
LP
3307 unit_tidy_watch_pids(u, s->main_pid, s->control_pid);
3308 unit_watch_all_pids(u);
3309
11aef522
LP
3310 /* If the PID set is empty now, then let's check if the cgroup is empty too and finish off the unit. */
3311 unit_synthesize_cgroup_empty_event(u);
034c6ed7
LP
3312}
3313
718db961
LP
3314static int service_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata) {
3315 Service *s = SERVICE(userdata);
034c6ed7
LP
3316
3317 assert(s);
718db961 3318 assert(source == s->timer_event_source);
034c6ed7
LP
3319
3320 switch (s->state) {
3321
3322 case SERVICE_START_PRE:
3323 case SERVICE_START:
f2341e0a 3324 log_unit_warning(UNIT(s), "%s operation timed out. Terminating.", s->state == SERVICE_START ? "Start" : "Start-pre");
c3fda31d 3325 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
80876c20
LP
3326 break;
3327
034c6ed7 3328 case SERVICE_START_POST:
f2341e0a 3329 log_unit_warning(UNIT(s), "Start-post operation timed out. Stopping.");
ce359e98 3330 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3331 break;
3332
36c16a7c
LP
3333 case SERVICE_RUNNING:
3334 log_unit_warning(UNIT(s), "Service reached runtime time limit. Stopping.");
3335 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
3336 break;
3337
e2f3b44c 3338 case SERVICE_RELOAD:
089b64d5 3339 log_unit_warning(UNIT(s), "Reload operation timed out. Killing reload process.");
e9a4f676 3340 service_kill_control_process(s);
f42806df
LP
3341 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3342 service_enter_running(s, SERVICE_SUCCESS);
e2f3b44c
LP
3343 break;
3344
034c6ed7 3345 case SERVICE_STOP:
f2341e0a 3346 log_unit_warning(UNIT(s), "Stopping timed out. Terminating.");
f42806df 3347 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3348 break;
3349
db2cb23b 3350 case SERVICE_STOP_SIGABRT:
f2341e0a 3351 log_unit_warning(UNIT(s), "State 'stop-sigabrt' timed out. Terminating.");
2ab2ab7b 3352 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
db2cb23b
UTL
3353 break;
3354
034c6ed7 3355 case SERVICE_STOP_SIGTERM:
4819ff03 3356 if (s->kill_context.send_sigkill) {
f2341e0a 3357 log_unit_warning(UNIT(s), "State 'stop-sigterm' timed out. Killing.");
f42806df 3358 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3359 } else {
f2341e0a 3360 log_unit_warning(UNIT(s), "State 'stop-sigterm' timed out. Skipping SIGKILL.");
f42806df 3361 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
ba035df2
LP
3362 }
3363
034c6ed7
LP
3364 break;
3365
3366 case SERVICE_STOP_SIGKILL:
35b8ca3a 3367 /* Uh, we sent a SIGKILL and it is still not gone?
034c6ed7
LP
3368 * Must be something we cannot kill, so let's just be
3369 * weirded out and continue */
3370
f2341e0a 3371 log_unit_warning(UNIT(s), "Processes still around after SIGKILL. Ignoring.");
f42806df 3372 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3373 break;
3374
3375 case SERVICE_STOP_POST:
f2341e0a 3376 log_unit_warning(UNIT(s), "State 'stop-post' timed out. Terminating.");
f42806df 3377 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
034c6ed7
LP
3378 break;
3379
3380 case SERVICE_FINAL_SIGTERM:
4819ff03 3381 if (s->kill_context.send_sigkill) {
f2341e0a 3382 log_unit_warning(UNIT(s), "State 'stop-final-sigterm' timed out. Killing.");
f42806df 3383 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
ba035df2 3384 } else {
f2341e0a 3385 log_unit_warning(UNIT(s), "State 'stop-final-sigterm' timed out. Skipping SIGKILL. Entering failed mode.");
f42806df 3386 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
ba035df2
LP
3387 }
3388
034c6ed7
LP
3389 break;
3390
3391 case SERVICE_FINAL_SIGKILL:
f2341e0a 3392 log_unit_warning(UNIT(s), "Processes still around after final SIGKILL. Entering failed mode.");
f42806df 3393 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
034c6ed7
LP
3394 break;
3395
3396 case SERVICE_AUTO_RESTART:
f2341e0a 3397 log_unit_info(UNIT(s),
ef417cfd 3398 s->restart_usec > 0 ?
f2341e0a
LP
3399 "Service hold-off time over, scheduling restart." :
3400 "Service has no hold-off time, scheduling restart.");
034c6ed7
LP
3401 service_enter_restart(s);
3402 break;
3403
3404 default:
3405 assert_not_reached("Timeout at wrong time.");
3406 }
718db961
LP
3407
3408 return 0;
3409}
3410
3411static int service_dispatch_watchdog(sd_event_source *source, usec_t usec, void *userdata) {
3412 Service *s = SERVICE(userdata);
a7850c7d 3413 char t[FORMAT_TIMESPAN_MAX];
2787d83c 3414 usec_t watchdog_usec;
718db961
LP
3415
3416 assert(s);
3417 assert(source == s->watchdog_event_source);
3418
2787d83c
M
3419 watchdog_usec = service_get_watchdog_usec(s);
3420
2a12e32e
JK
3421 if (UNIT(s)->manager->service_watchdogs) {
3422 log_unit_error(UNIT(s), "Watchdog timeout (limit %s)!",
3423 format_timespan(t, sizeof(t), watchdog_usec, 1));
8bb2d17d 3424
2a12e32e
JK
3425 service_enter_signal(s, SERVICE_STOP_SIGABRT, SERVICE_FAILURE_WATCHDOG);
3426 } else
3427 log_unit_warning(UNIT(s), "Watchdog disabled! Ignoring watchdog timeout (limit %s)!",
3428 format_timespan(t, sizeof(t), watchdog_usec, 1));
842129f5 3429
718db961 3430 return 0;
5cb5a6ff
LP
3431}
3432
e3285237
LP
3433static bool service_notify_message_authorized(Service *s, pid_t pid, char **tags, FDSet *fds) {
3434 assert(s);
8c47c732 3435
c952c6ec 3436 if (s->notify_access == NOTIFY_NONE) {
e3285237
LP
3437 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception is disabled.", pid);
3438 return false;
3439 }
3440
3441 if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
336c6e46 3442 if (s->main_pid != 0)
e3285237 3443 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT, pid, s->main_pid);
336c6e46 3444 else
e3285237
LP
3445 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for main PID which is currently not known", pid);
3446
3447 return false;
3448 }
3449
3450 if (s->notify_access == NOTIFY_EXEC && pid != s->main_pid && pid != s->control_pid) {
6375bd20 3451 if (s->main_pid != 0 && s->control_pid != 0)
e3285237 3452 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT" and control PID "PID_FMT,
6375bd20
JW
3453 pid, s->main_pid, s->control_pid);
3454 else if (s->main_pid != 0)
e3285237 3455 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for main PID "PID_FMT, pid, s->main_pid);
6375bd20 3456 else if (s->control_pid != 0)
e3285237 3457 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for control PID "PID_FMT, pid, s->control_pid);
6375bd20 3458 else
e3285237
LP
3459 log_unit_warning(UNIT(s), "Got notification message from PID "PID_FMT", but reception only permitted for main PID and control PID which are currently not known", pid);
3460
3461 return false;
9711848f
LP
3462 }
3463
e3285237
LP
3464 return true;
3465}
3466
db256aab
LP
3467static void service_notify_message(
3468 Unit *u,
3469 const struct ucred *ucred,
3470 char **tags,
3471 FDSet *fds) {
3472
e3285237
LP
3473 Service *s = SERVICE(u);
3474 bool notify_dbus = false;
3475 const char *e;
cc2b7b11 3476 char **i;
db256aab 3477 int r;
e3285237
LP
3478
3479 assert(u);
db256aab 3480 assert(ucred);
e3285237 3481
db256aab 3482 if (!service_notify_message_authorized(SERVICE(u), ucred->pid, tags, fds))
e3285237
LP
3483 return;
3484
f1d34068 3485 if (DEBUG_LOGGING) {
9711848f
LP
3486 _cleanup_free_ char *cc = NULL;
3487
3488 cc = strv_join(tags, ", ");
db256aab 3489 log_unit_debug(u, "Got notification message from PID "PID_FMT" (%s)", ucred->pid, isempty(cc) ? "n/a" : cc);
9711848f 3490 }
c952c6ec 3491
8c47c732 3492 /* Interpret MAINPID= */
28849dba 3493 e = strv_find_startswith(tags, "MAINPID=");
5e56b378 3494 if (e && IN_SET(s->state, SERVICE_START, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD)) {
db256aab
LP
3495 pid_t new_main_pid;
3496
3497 if (parse_pid(e, &new_main_pid) < 0)
3498 log_unit_warning(u, "Failed to parse MAINPID= field in notification message, ignoring: %s", e);
3499 else if (!s->main_pid_known || new_main_pid != s->main_pid) {
3500
3501 r = service_is_suitable_main_pid(s, new_main_pid, LOG_WARNING);
3502 if (r == 0) {
3503 /* The new main PID is a bit suspicous, which is OK if the sender is privileged. */
3504
3505 if (ucred->uid == 0) {
3506 log_unit_debug(u, "New main PID "PID_FMT" does not belong to service, but we'll accept it as the request to change it came from a privileged process.", new_main_pid);
3507 r = 1;
3508 } else
3509 log_unit_debug(u, "New main PID "PID_FMT" does not belong to service, refusing.", new_main_pid);
3510 }
3511 if (r > 0) {
3512 service_set_main_pid(s, new_main_pid);
3513 unit_watch_pid(UNIT(s), new_main_pid);
3514 notify_dbus = true;
3515 }
8c47c732
LP
3516 }
3517 }
3518
cc2b7b11
LP
3519 /* Interpret READY=/STOPPING=/RELOADING=. Last one wins. */
3520 STRV_FOREACH_BACKWARDS(i, tags) {
308d72dc 3521
cc2b7b11
LP
3522 if (streq(*i, "READY=1")) {
3523 s->notify_state = NOTIFY_READY;
308d72dc 3524
cc2b7b11
LP
3525 /* Type=notify services inform us about completed
3526 * initialization with READY=1 */
3527 if (s->type == SERVICE_NOTIFY && s->state == SERVICE_START)
3528 service_enter_start_post(s);
308d72dc 3529
cc2b7b11
LP
3530 /* Sending READY=1 while we are reloading informs us
3531 * that the reloading is complete */
3532 if (s->state == SERVICE_RELOAD && s->control_pid == 0)
3533 service_enter_running(s, SERVICE_SUCCESS);
308d72dc 3534
cc2b7b11
LP
3535 notify_dbus = true;
3536 break;
308d72dc 3537
cc2b7b11
LP
3538 } else if (streq(*i, "RELOADING=1")) {
3539 s->notify_state = NOTIFY_RELOADING;
308d72dc 3540
cc2b7b11
LP
3541 if (s->state == SERVICE_RUNNING)
3542 service_enter_reload_by_notify(s);
308d72dc 3543
cc2b7b11
LP
3544 notify_dbus = true;
3545 break;
308d72dc 3546
cc2b7b11
LP
3547 } else if (streq(*i, "STOPPING=1")) {
3548 s->notify_state = NOTIFY_STOPPING;
308d72dc 3549
cc2b7b11
LP
3550 if (s->state == SERVICE_RUNNING)
3551 service_enter_stop_by_notify(s);
308d72dc 3552
cc2b7b11
LP
3553 notify_dbus = true;
3554 break;
3555 }
8c47c732
LP
3556 }
3557
3558 /* Interpret STATUS= */
28849dba 3559 e = strv_find_startswith(tags, "STATUS=");
7f110ff9 3560 if (e) {
28849dba 3561 _cleanup_free_ char *t = NULL;
8c47c732 3562
28849dba
LP
3563 if (!isempty(e)) {
3564 if (!utf8_is_valid(e))
f2341e0a 3565 log_unit_warning(u, "Status message in notification message is not UTF-8 clean.");
28849dba 3566 else {
28849dba
LP
3567 t = strdup(e);
3568 if (!t)
3569 log_oom();
3a2776bc 3570 }
28849dba 3571 }
8c47c732 3572
30b5275a 3573 if (!streq_ptr(s->status_text, t)) {
3b319885 3574 free_and_replace(s->status_text, t);
30b5275a 3575 notify_dbus = true;
28849dba 3576 }
8c47c732 3577 }
842129f5 3578
4774e357 3579 /* Interpret ERRNO= */
28849dba 3580 e = strv_find_startswith(tags, "ERRNO=");
4774e357
MAA
3581 if (e) {
3582 int status_errno;
3583
2fa40742
LP
3584 status_errno = parse_errno(e);
3585 if (status_errno < 0)
3586 log_unit_warning_errno(u, status_errno,
3587 "Failed to parse ERRNO= field in notification message: %s", e);
3588 else if (s->status_errno != status_errno) {
3589 s->status_errno = status_errno;
3590 notify_dbus = true;
4774e357
MAA
3591 }
3592 }
3593
a327431b
DB
3594 /* Interpret EXTEND_TIMEOUT= */
3595 e = strv_find_startswith(tags, "EXTEND_TIMEOUT_USEC=");
3596 if (e) {
3597 usec_t extend_timeout_usec;
3598 if (safe_atou64(e, &extend_timeout_usec) < 0)
3599 log_unit_warning(u, "Failed to parse EXTEND_TIMEOUT_USEC=%s", e);
3600 else
3601 service_extend_timeout(s, extend_timeout_usec);
3602 }
3603
6f285378 3604 /* Interpret WATCHDOG= */
1f6b4113 3605 if (strv_find(tags, "WATCHDOG=1"))
842129f5 3606 service_reset_watchdog(s);
c4e2ceae 3607
c45d11cb
LP
3608 e = strv_find_startswith(tags, "WATCHDOG_USEC=");
3609 if (e) {
3610 usec_t watchdog_override_usec;
3611 if (safe_atou64(e, &watchdog_override_usec) < 0)
3612 log_unit_warning(u, "Failed to parse WATCHDOG_USEC=%s", e);
3613 else
3614 service_reset_watchdog_timeout(s, watchdog_override_usec);
3615 }
3616
e78ee06d
LP
3617 /* Process FD store messages. Either FDSTOREREMOVE=1 for removal, or FDSTORE=1 for addition. In both cases,
3618 * process FDNAME= for picking the file descriptor name to use. Note that FDNAME= is required when removing
3619 * fds, but optional when pushing in new fds, for compatibility reasons. */
3620 if (strv_find(tags, "FDSTOREREMOVE=1")) {
3621 const char *name;
3622
3623 name = strv_find_startswith(tags, "FDNAME=");
3624 if (!name || !fdname_is_valid(name))
3625 log_unit_warning(u, "FDSTOREREMOVE=1 requested, but no valid file descriptor name passed, ignoring.");
3626 else
3627 service_remove_fd_store(s, name);
3628
3629 } else if (strv_find(tags, "FDSTORE=1")) {
8dd4c05b
LP
3630 const char *name;
3631
3632 name = strv_find_startswith(tags, "FDNAME=");
3633 if (name && !fdname_is_valid(name)) {
3634 log_unit_warning(u, "Passed FDNAME= name is invalid, ignoring.");
3635 name = NULL;
3636 }
3637
e78ee06d 3638 (void) service_add_fd_store_set(s, fds, name);
8dd4c05b 3639 }
a354329f 3640
c4e2ceae 3641 /* Notify clients about changed status or main pid */
30b5275a
LP
3642 if (notify_dbus)
3643 unit_add_to_dbus_queue(u);
8c47c732
LP
3644}
3645
7a7821c8 3646static int service_get_timeout(Unit *u, usec_t *timeout) {
68db7a3b 3647 Service *s = SERVICE(u);
7a7821c8 3648 uint64_t t;
68db7a3b
ZJS
3649 int r;
3650
3651 if (!s->timer_event_source)
3652 return 0;
3653
7a7821c8 3654 r = sd_event_source_get_time(s->timer_event_source, &t);
68db7a3b
ZJS
3655 if (r < 0)
3656 return r;
7a7821c8
LP
3657 if (t == USEC_INFINITY)
3658 return 0;
68db7a3b 3659
7a7821c8 3660 *timeout = t;
68db7a3b
ZJS
3661 return 1;
3662}
3663
05e343b7
LP
3664static void service_bus_name_owner_change(
3665 Unit *u,
3666 const char *name,
3667 const char *old_owner,
3668 const char *new_owner) {
3669
3670 Service *s = SERVICE(u);
718db961 3671 int r;
05e343b7
LP
3672
3673 assert(s);
3674 assert(name);
3675
3676 assert(streq(s->bus_name, name));
3677 assert(old_owner || new_owner);
3678
3679 if (old_owner && new_owner)
f2341e0a 3680 log_unit_debug(u, "D-Bus name %s changed owner from %s to %s", name, old_owner, new_owner);
05e343b7 3681 else if (old_owner)
f2341e0a 3682 log_unit_debug(u, "D-Bus name %s no longer registered by %s", name, old_owner);
05e343b7 3683 else
f2341e0a 3684 log_unit_debug(u, "D-Bus name %s now registered by %s", name, new_owner);
05e343b7
LP
3685
3686 s->bus_name_good = !!new_owner;
3687
d8ccf5fd
DM
3688 /* Track the current owner, so we can reconstruct changes after a daemon reload */
3689 r = free_and_strdup(&s->bus_name_owner, new_owner);
3690 if (r < 0) {
3691 log_unit_error_errno(u, r, "Unable to set new bus name owner %s: %m", new_owner);
3692 return;
3693 }
3694
05e343b7
LP
3695 if (s->type == SERVICE_DBUS) {
3696
3697 /* service_enter_running() will figure out what to
3698 * do */
3699 if (s->state == SERVICE_RUNNING)
f42806df 3700 service_enter_running(s, SERVICE_SUCCESS);
05e343b7
LP
3701 else if (s->state == SERVICE_START && new_owner)
3702 service_enter_start_post(s);
3703
3704 } else if (new_owner &&
3705 s->main_pid <= 0 &&
a6951a50
LP
3706 IN_SET(s->state,
3707 SERVICE_START,
3708 SERVICE_START_POST,
3709 SERVICE_RUNNING,
3710 SERVICE_RELOAD)) {
05e343b7 3711
4afd3348 3712 _cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
718db961 3713 pid_t pid;
05e343b7 3714
718db961 3715 /* Try to acquire PID from bus service */
05e343b7 3716
056f95d0 3717 r = sd_bus_get_name_creds(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
5b12334d
LP
3718 if (r >= 0)
3719 r = sd_bus_creds_get_pid(creds, &pid);
718db961 3720 if (r >= 0) {
7c102d60 3721 log_unit_debug(u, "D-Bus name %s is now owned by process " PID_FMT, name, pid);
05e343b7 3722
718db961
LP
3723 service_set_main_pid(s, pid);
3724 unit_watch_pid(UNIT(s), pid);
3725 }
7400b9d2 3726 }
05e343b7
LP
3727}
3728
16115b0a 3729int service_set_socket_fd(Service *s, int fd, Socket *sock, bool selinux_context_net) {
79a98c60
LP
3730 _cleanup_free_ char *peer = NULL;
3731 int r;
57020a3a 3732
4f2d528d
LP
3733 assert(s);
3734 assert(fd >= 0);
3735
7f2fbbff
LP
3736 /* This is called by the socket code when instantiating a new service for a stream socket and the socket needs
3737 * to be configured. We take ownership of the passed fd on success. */
4f2d528d 3738
1124fe6f 3739 if (UNIT(s)->load_state != UNIT_LOADED)
4f2d528d
LP
3740 return -EINVAL;
3741
3742 if (s->socket_fd >= 0)
3743 return -EBUSY;
3744
3745 if (s->state != SERVICE_DEAD)
3746 return -EAGAIN;
3747
366b7db4 3748 if (getpeername_pretty(fd, true, &peer) >= 0) {
79a98c60
LP
3749
3750 if (UNIT(s)->description) {
3751 _cleanup_free_ char *a;
3752
605405c6 3753 a = strjoin(UNIT(s)->description, " (", peer, ")");
79a98c60
LP
3754 if (!a)
3755 return -ENOMEM;
3756
3757 r = unit_set_description(UNIT(s), a);
3758 } else
3759 r = unit_set_description(UNIT(s), peer);
3760
3761 if (r < 0)
3762 return r;
3763 }
3764
eef85c4a 3765 r = unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false, UNIT_DEPENDENCY_IMPLICIT);
7f2fbbff
LP
3766 if (r < 0)
3767 return r;
3768
4f2d528d 3769 s->socket_fd = fd;
16115b0a 3770 s->socket_fd_selinux_context_net = selinux_context_net;
6cf6bbc2 3771
7f7d01ed 3772 unit_ref_set(&s->accept_socket, UNIT(s), UNIT(sock));
7f2fbbff 3773 return 0;
4f2d528d
LP
3774}
3775
fdf20a31 3776static void service_reset_failed(Unit *u) {
5632e374
LP
3777 Service *s = SERVICE(u);
3778
3779 assert(s);
3780
fdf20a31 3781 if (s->state == SERVICE_FAILED)
5632e374
LP
3782 service_set_state(s, SERVICE_DEAD);
3783
f42806df
LP
3784 s->result = SERVICE_SUCCESS;
3785 s->reload_result = SERVICE_SUCCESS;
7a0019d3
LP
3786 s->n_restarts = 0;
3787 s->flush_n_restarts = false;
5632e374
LP
3788}
3789
718db961 3790static int service_kill(Unit *u, KillWho who, int signo, sd_bus_error *error) {
8a0867d6 3791 Service *s = SERVICE(u);
41efeaec 3792
a6951a50
LP
3793 assert(s);
3794
814cc562 3795 return unit_kill_common(u, who, signo, s->main_pid, s->control_pid, error);
8a0867d6
LP
3796}
3797
291d565a
LP
3798static int service_main_pid(Unit *u) {
3799 Service *s = SERVICE(u);
3800
3801 assert(s);
3802
3803 return s->main_pid;
3804}
3805
3806static int service_control_pid(Unit *u) {
3807 Service *s = SERVICE(u);
3808
3809 assert(s);
3810
3811 return s->control_pid;
3812}
3813
bb2c7685
LP
3814static bool service_needs_console(Unit *u) {
3815 Service *s = SERVICE(u);
3816
3817 assert(s);
3818
3819 /* We provide our own implementation of this here, instead of relying of the generic implementation
3820 * unit_needs_console() provides, since we want to return false if we are in SERVICE_EXITED state. */
3821
3822 if (!exec_context_may_touch_console(&s->exec_context))
3823 return false;
3824
3825 return IN_SET(s->state,
3826 SERVICE_START_PRE,
3827 SERVICE_START,
3828 SERVICE_START_POST,
3829 SERVICE_RUNNING,
3830 SERVICE_RELOAD,
3831 SERVICE_STOP,
3832 SERVICE_STOP_SIGABRT,
3833 SERVICE_STOP_SIGTERM,
3834 SERVICE_STOP_SIGKILL,
3835 SERVICE_STOP_POST,
3836 SERVICE_FINAL_SIGTERM,
3837 SERVICE_FINAL_SIGKILL);
3838}
3839
94f04347 3840static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
525ee6f4
LP
3841 [SERVICE_RESTART_NO] = "no",
3842 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
50caaedb 3843 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
6cfe2fde 3844 [SERVICE_RESTART_ON_ABNORMAL] = "on-abnormal",
dc99a976 3845 [SERVICE_RESTART_ON_WATCHDOG] = "on-watchdog",
50caaedb 3846 [SERVICE_RESTART_ON_ABORT] = "on-abort",
6cfe2fde 3847 [SERVICE_RESTART_ALWAYS] = "always",
94f04347
LP
3848};
3849
3850DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3851
3852static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
94f04347 3853 [SERVICE_SIMPLE] = "simple",
0d624a78 3854 [SERVICE_FORKING] = "forking",
34e9ba66 3855 [SERVICE_ONESHOT] = "oneshot",
8c47c732 3856 [SERVICE_DBUS] = "dbus",
f2b68789
LP
3857 [SERVICE_NOTIFY] = "notify",
3858 [SERVICE_IDLE] = "idle"
94f04347
LP
3859};
3860
3861DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3862
e537352b 3863static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
94f04347
LP
3864 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3865 [SERVICE_EXEC_START] = "ExecStart",
3866 [SERVICE_EXEC_START_POST] = "ExecStartPost",
3867 [SERVICE_EXEC_RELOAD] = "ExecReload",
3868 [SERVICE_EXEC_STOP] = "ExecStop",
3869 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3870};
3871
3872DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3873
308d72dc
LP
3874static const char* const notify_state_table[_NOTIFY_STATE_MAX] = {
3875 [NOTIFY_UNKNOWN] = "unknown",
3876 [NOTIFY_READY] = "ready",
3877 [NOTIFY_RELOADING] = "reloading",
3878 [NOTIFY_STOPPING] = "stopping",
3879};
3880
3881DEFINE_STRING_TABLE_LOOKUP(notify_state, NotifyState);
3882
f42806df
LP
3883static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3884 [SERVICE_SUCCESS] = "success",
3885 [SERVICE_FAILURE_RESOURCES] = "resources",
c35755fb 3886 [SERVICE_FAILURE_PROTOCOL] = "protocol",
f42806df
LP
3887 [SERVICE_FAILURE_TIMEOUT] = "timeout",
3888 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3889 [SERVICE_FAILURE_SIGNAL] = "signal",
bb242b7b 3890 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
8d1b002a 3891 [SERVICE_FAILURE_WATCHDOG] = "watchdog",
07299350 3892 [SERVICE_FAILURE_START_LIMIT_HIT] = "start-limit-hit",
f42806df
LP
3893};
3894
3895DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3896
87f0e418 3897const UnitVTable service_vtable = {
7d17cfbc 3898 .object_size = sizeof(Service),
718db961
LP
3899 .exec_context_offset = offsetof(Service, exec_context),
3900 .cgroup_context_offset = offsetof(Service, cgroup_context),
3901 .kill_context_offset = offsetof(Service, kill_context),
613b411c 3902 .exec_runtime_offset = offsetof(Service, exec_runtime),
29206d46 3903 .dynamic_creds_offset = offsetof(Service, dynamic_creds),
3ef63c31 3904
f975e971
LP
3905 .sections =
3906 "Unit\0"
3907 "Service\0"
3908 "Install\0",
4ad49000 3909 .private_section = "Service",
71645aca 3910
1d9cc876
LP
3911 .can_transient = true,
3912 .can_delegate = true,
3913
034c6ed7
LP
3914 .init = service_init,
3915 .done = service_done,
a16e1123 3916 .load = service_load,
a354329f 3917 .release_resources = service_release_resources,
a16e1123
LP
3918
3919 .coldplug = service_coldplug,
034c6ed7 3920
5cb5a6ff
LP
3921 .dump = service_dump,
3922
3923 .start = service_start,
3924 .stop = service_stop,
3925 .reload = service_reload,
3926
034c6ed7
LP
3927 .can_reload = service_can_reload,
3928
8a0867d6
LP
3929 .kill = service_kill,
3930
a16e1123
LP
3931 .serialize = service_serialize,
3932 .deserialize_item = service_deserialize_item,
3933
5cb5a6ff 3934 .active_state = service_active_state,
10a94420 3935 .sub_state_to_string = service_sub_state_to_string,
5cb5a6ff 3936
deb4e708
MK
3937 .will_restart = service_will_restart,
3938
f2f725e5 3939 .may_gc = service_may_gc,
701cc384 3940
034c6ed7 3941 .sigchld_event = service_sigchld_event,
2c4104f0 3942
fdf20a31 3943 .reset_failed = service_reset_failed,
5632e374 3944
4ad49000 3945 .notify_cgroup_empty = service_notify_cgroup_empty_event,
8c47c732 3946 .notify_message = service_notify_message,
8e274523 3947
291d565a
LP
3948 .main_pid = service_main_pid,
3949 .control_pid = service_control_pid,
3950
05e343b7 3951 .bus_name_owner_change = service_bus_name_owner_change,
05e343b7 3952
718db961 3953 .bus_vtable = bus_service_vtable,
74c964d3
LP
3954 .bus_set_property = bus_service_set_property,
3955 .bus_commit_properties = bus_service_commit_properties,
4139c1b2 3956
68db7a3b 3957 .get_timeout = service_get_timeout,
bb2c7685 3958 .needs_console = service_needs_console,
718db961 3959
c6918296
MS
3960 .status_message_formats = {
3961 .starting_stopping = {
3962 [0] = "Starting %s...",
3963 [1] = "Stopping %s...",
3964 },
3965 .finished_start_job = {
3966 [JOB_DONE] = "Started %s.",
3967 [JOB_FAILED] = "Failed to start %s.",
c6918296
MS
3968 },
3969 .finished_stop_job = {
3970 [JOB_DONE] = "Stopped %s.",
3971 [JOB_FAILED] = "Stopped (with error) %s.",
c6918296
MS
3972 },
3973 },
5cb5a6ff 3974};