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