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