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