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