]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/core/service.c
service: for Type=idle units consider START_PRE, START, START_POST all as ACTIVE
[thirdparty/systemd.git] / src / core / service.c
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 /***
4 This file is part of systemd.
5
6 Copyright 2010 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 ***/
21
22 #include <errno.h>
23 #include <signal.h>
24 #include <dirent.h>
25 #include <unistd.h>
26 #include <sys/reboot.h>
27
28 #include "manager.h"
29 #include "unit.h"
30 #include "service.h"
31 #include "load-fragment.h"
32 #include "load-dropin.h"
33 #include "log.h"
34 #include "strv.h"
35 #include "unit-name.h"
36 #include "dbus-service.h"
37 #include "special.h"
38 #include "bus-errors.h"
39 #include "exit-status.h"
40 #include "def.h"
41 #include "path-util.h"
42 #include "util.h"
43 #include "utf8.h"
44
45 #ifdef HAVE_SYSV_COMPAT
46
47 #define DEFAULT_SYSV_TIMEOUT_USEC (5*USEC_PER_MINUTE)
48
49 typedef enum RunlevelType {
50 RUNLEVEL_UP,
51 RUNLEVEL_DOWN,
52 RUNLEVEL_SYSINIT
53 } RunlevelType;
54
55 static const struct {
56 const char *path;
57 const char *target;
58 const RunlevelType type;
59 } rcnd_table[] = {
60 /* Standard SysV runlevels for start-up */
61 { "rc1.d", SPECIAL_RESCUE_TARGET, RUNLEVEL_UP },
62 { "rc2.d", SPECIAL_RUNLEVEL2_TARGET, RUNLEVEL_UP },
63 { "rc3.d", SPECIAL_RUNLEVEL3_TARGET, RUNLEVEL_UP },
64 { "rc4.d", SPECIAL_RUNLEVEL4_TARGET, RUNLEVEL_UP },
65 { "rc5.d", SPECIAL_RUNLEVEL5_TARGET, RUNLEVEL_UP },
66
67 #ifdef TARGET_SUSE
68 /* SUSE style boot.d */
69 { "boot.d", SPECIAL_SYSINIT_TARGET, RUNLEVEL_SYSINIT },
70 #endif
71
72 #if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU) || defined(TARGET_ANGSTROM)
73 /* Debian style rcS.d */
74 { "rcS.d", SPECIAL_SYSINIT_TARGET, RUNLEVEL_SYSINIT },
75 #endif
76
77 /* Standard SysV runlevels for shutdown */
78 { "rc0.d", SPECIAL_POWEROFF_TARGET, RUNLEVEL_DOWN },
79 { "rc6.d", SPECIAL_REBOOT_TARGET, RUNLEVEL_DOWN }
80
81 /* Note that the order here matters, as we read the
82 directories in this order, and we want to make sure that
83 sysv_start_priority is known when we first load the
84 unit. And that value we only know from S links. Hence
85 UP/SYSINIT must be read before DOWN */
86 };
87
88 #define RUNLEVELS_UP "12345"
89 /* #define RUNLEVELS_DOWN "06" */
90 #define RUNLEVELS_BOOT "bBsS"
91 #endif
92
93 static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = {
94 [SERVICE_DEAD] = UNIT_INACTIVE,
95 [SERVICE_START_PRE] = UNIT_ACTIVATING,
96 [SERVICE_START] = UNIT_ACTIVATING,
97 [SERVICE_START_POST] = UNIT_ACTIVATING,
98 [SERVICE_RUNNING] = UNIT_ACTIVE,
99 [SERVICE_EXITED] = UNIT_ACTIVE,
100 [SERVICE_RELOAD] = UNIT_RELOADING,
101 [SERVICE_STOP] = UNIT_DEACTIVATING,
102 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
103 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
104 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
105 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
106 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
107 [SERVICE_FAILED] = UNIT_FAILED,
108 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
109 };
110
111 /* For Type=idle we never want to delay any other jobs, hence we
112 * consider idle jobs active as soon as we start working on them */
113 static const UnitActiveState state_translation_table_idle[_SERVICE_STATE_MAX] = {
114 [SERVICE_DEAD] = UNIT_INACTIVE,
115 [SERVICE_START_PRE] = UNIT_ACTIVE,
116 [SERVICE_START] = UNIT_ACTIVE,
117 [SERVICE_START_POST] = UNIT_ACTIVE,
118 [SERVICE_RUNNING] = UNIT_ACTIVE,
119 [SERVICE_EXITED] = UNIT_ACTIVE,
120 [SERVICE_RELOAD] = UNIT_RELOADING,
121 [SERVICE_STOP] = UNIT_DEACTIVATING,
122 [SERVICE_STOP_SIGTERM] = UNIT_DEACTIVATING,
123 [SERVICE_STOP_SIGKILL] = UNIT_DEACTIVATING,
124 [SERVICE_STOP_POST] = UNIT_DEACTIVATING,
125 [SERVICE_FINAL_SIGTERM] = UNIT_DEACTIVATING,
126 [SERVICE_FINAL_SIGKILL] = UNIT_DEACTIVATING,
127 [SERVICE_FAILED] = UNIT_FAILED,
128 [SERVICE_AUTO_RESTART] = UNIT_ACTIVATING
129 };
130
131 static void service_init(Unit *u) {
132 Service *s = SERVICE(u);
133 int i;
134
135 assert(u);
136 assert(u->load_state == UNIT_STUB);
137
138 s->timeout_usec = DEFAULT_TIMEOUT_USEC;
139 s->restart_usec = DEFAULT_RESTART_USEC;
140 s->type = _SERVICE_TYPE_INVALID;
141
142 s->watchdog_watch.type = WATCH_INVALID;
143
144 s->timer_watch.type = WATCH_INVALID;
145 #ifdef HAVE_SYSV_COMPAT
146 s->sysv_start_priority = -1;
147 s->sysv_start_priority_from_rcnd = -1;
148 #endif
149 s->socket_fd = -1;
150 s->guess_main_pid = true;
151
152 exec_context_init(&s->exec_context);
153 for (i = 0; i < RLIMIT_NLIMITS; i++)
154 if (UNIT(s)->manager->rlimit[i])
155 s->exec_context.rlimit[i] = newdup(struct rlimit, UNIT(s)->manager->rlimit[i], 1);
156
157 RATELIMIT_INIT(s->start_limit, 10*USEC_PER_SEC, 5);
158
159 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
160 }
161
162 static void service_unwatch_control_pid(Service *s) {
163 assert(s);
164
165 if (s->control_pid <= 0)
166 return;
167
168 unit_unwatch_pid(UNIT(s), s->control_pid);
169 s->control_pid = 0;
170 }
171
172 static void service_unwatch_main_pid(Service *s) {
173 assert(s);
174
175 if (s->main_pid <= 0)
176 return;
177
178 unit_unwatch_pid(UNIT(s), s->main_pid);
179 s->main_pid = 0;
180 }
181
182 static void service_unwatch_pid_file(Service *s) {
183 if (!s->pid_file_pathspec)
184 return;
185
186 log_debug("Stopping watch for %s's PID file %s", UNIT(s)->id, s->pid_file_pathspec->path);
187 path_spec_unwatch(s->pid_file_pathspec, UNIT(s));
188 path_spec_done(s->pid_file_pathspec);
189 free(s->pid_file_pathspec);
190 s->pid_file_pathspec = NULL;
191 }
192
193 static int service_set_main_pid(Service *s, pid_t pid) {
194 pid_t ppid;
195
196 assert(s);
197
198 if (pid <= 1)
199 return -EINVAL;
200
201 if (pid == getpid())
202 return -EINVAL;
203
204 s->main_pid = pid;
205 s->main_pid_known = true;
206
207 if (get_parent_of_pid(pid, &ppid) >= 0 && ppid != getpid()) {
208 log_warning("%s: Supervising process %lu which is not our child. We'll most likely not notice when it exits.",
209 UNIT(s)->id, (unsigned long) pid);
210
211 s->main_pid_alien = true;
212 } else
213 s->main_pid_alien = false;
214
215 exec_status_start(&s->main_exec_status, pid);
216
217 return 0;
218 }
219
220 static void service_close_socket_fd(Service *s) {
221 assert(s);
222
223 if (s->socket_fd < 0)
224 return;
225
226 close_nointr_nofail(s->socket_fd);
227 s->socket_fd = -1;
228 }
229
230 static void service_connection_unref(Service *s) {
231 assert(s);
232
233 if (!UNIT_DEREF(s->accept_socket))
234 return;
235
236 socket_connection_unref(SOCKET(UNIT_DEREF(s->accept_socket)));
237 unit_ref_unset(&s->accept_socket);
238 }
239
240 static void service_stop_watchdog(Service *s) {
241 assert(s);
242
243 unit_unwatch_timer(UNIT(s), &s->watchdog_watch);
244 s->watchdog_timestamp.realtime = 0;
245 s->watchdog_timestamp.monotonic = 0;
246 }
247
248 static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart);
249
250 static void service_handle_watchdog(Service *s) {
251 usec_t offset;
252 int r;
253
254 assert(s);
255
256 if (s->watchdog_usec == 0)
257 return;
258
259 offset = now(CLOCK_MONOTONIC) - s->watchdog_timestamp.monotonic;
260 if (offset >= s->watchdog_usec) {
261 log_error("%s watchdog timeout!", UNIT(s)->id);
262 service_enter_dead(s, SERVICE_FAILURE_WATCHDOG, true);
263 return;
264 }
265
266 r = unit_watch_timer(UNIT(s), s->watchdog_usec - offset, &s->watchdog_watch);
267 if (r < 0)
268 log_warning("%s failed to install watchdog timer: %s", UNIT(s)->id, strerror(-r));
269 }
270
271 static void service_reset_watchdog(Service *s) {
272 assert(s);
273
274 dual_timestamp_get(&s->watchdog_timestamp);
275 service_handle_watchdog(s);
276 }
277
278 static void service_done(Unit *u) {
279 Service *s = SERVICE(u);
280
281 assert(s);
282
283 free(s->pid_file);
284 s->pid_file = NULL;
285
286 #ifdef HAVE_SYSV_COMPAT
287 free(s->sysv_runlevels);
288 s->sysv_runlevels = NULL;
289 #endif
290
291 free(s->status_text);
292 s->status_text = NULL;
293
294 exec_context_done(&s->exec_context);
295 exec_command_free_array(s->exec_command, _SERVICE_EXEC_COMMAND_MAX);
296 s->control_command = NULL;
297 s->main_command = NULL;
298
299 /* This will leak a process, but at least no memory or any of
300 * our resources */
301 service_unwatch_main_pid(s);
302 service_unwatch_control_pid(s);
303 service_unwatch_pid_file(s);
304
305 if (s->bus_name) {
306 unit_unwatch_bus_name(u, s->bus_name);
307 free(s->bus_name);
308 s->bus_name = NULL;
309 }
310
311 service_close_socket_fd(s);
312 service_connection_unref(s);
313
314 unit_ref_unset(&s->accept_socket);
315
316 service_stop_watchdog(s);
317
318 unit_unwatch_timer(u, &s->timer_watch);
319 }
320
321 #ifdef HAVE_SYSV_COMPAT
322 static char *sysv_translate_name(const char *name) {
323 char *r;
324
325 if (!(r = new(char, strlen(name) + sizeof(".service"))))
326 return NULL;
327
328 #if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU) || defined(TARGET_ANGSTROM)
329 if (endswith(name, ".sh"))
330 /* Drop Debian-style .sh suffix */
331 strcpy(stpcpy(r, name) - 3, ".service");
332 #endif
333 #ifdef TARGET_SUSE
334 if (startswith(name, "boot."))
335 /* Drop SuSE-style boot. prefix */
336 strcpy(stpcpy(r, name + 5), ".service");
337 #endif
338 #ifdef TARGET_FRUGALWARE
339 if (startswith(name, "rc."))
340 /* Drop Frugalware-style rc. prefix */
341 strcpy(stpcpy(r, name + 3), ".service");
342 #endif
343 else
344 /* Normal init scripts */
345 strcpy(stpcpy(r, name), ".service");
346
347 return r;
348 }
349
350 static int sysv_translate_facility(const char *name, const char *filename, char **_r) {
351
352 /* We silently ignore the $ prefix here. According to the LSB
353 * spec it simply indicates whether something is a
354 * standardized name or a distribution-specific one. Since we
355 * just follow what already exists and do not introduce new
356 * uses or names we don't care who introduced a new name. */
357
358 static const char * const table[] = {
359 /* LSB defined facilities */
360 "local_fs", SPECIAL_LOCAL_FS_TARGET,
361 #if defined(TARGET_MANDRIVA) || defined(TARGET_MAGEIA)
362 #else
363 /* Due to unfortunate name selection in Mandriva,
364 * $network is provided by network-up which is ordered
365 * after network which actually starts interfaces.
366 * To break the loop, just ignore it */
367 "network", SPECIAL_NETWORK_TARGET,
368 #endif
369 "named", SPECIAL_NSS_LOOKUP_TARGET,
370 "portmap", SPECIAL_RPCBIND_TARGET,
371 "remote_fs", SPECIAL_REMOTE_FS_TARGET,
372 "syslog", SPECIAL_SYSLOG_TARGET,
373 "time", SPECIAL_TIME_SYNC_TARGET,
374
375 /* common extensions */
376 "mail-transfer-agent", SPECIAL_MAIL_TRANSFER_AGENT_TARGET,
377 "x-display-manager", SPECIAL_DISPLAY_MANAGER_SERVICE,
378 "null", NULL,
379
380 #if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU) || defined(TARGET_ANGSTROM)
381 "mail-transport-agent", SPECIAL_MAIL_TRANSFER_AGENT_TARGET,
382 #endif
383
384 #ifdef TARGET_FEDORA
385 "MTA", SPECIAL_MAIL_TRANSFER_AGENT_TARGET,
386 "smtpdaemon", SPECIAL_MAIL_TRANSFER_AGENT_TARGET,
387 "httpd", SPECIAL_HTTP_DAEMON_TARGET,
388 #endif
389
390 #ifdef TARGET_SUSE
391 "smtp", SPECIAL_MAIL_TRANSFER_AGENT_TARGET,
392 #endif
393 };
394
395 unsigned i;
396 char *r;
397 const char *n;
398
399 assert(name);
400 assert(_r);
401
402 n = *name == '$' ? name + 1 : name;
403
404 for (i = 0; i < ELEMENTSOF(table); i += 2) {
405
406 if (!streq(table[i], n))
407 continue;
408
409 if (!table[i+1])
410 return 0;
411
412 if (!(r = strdup(table[i+1])))
413 return -ENOMEM;
414
415 goto finish;
416 }
417
418 /* If we don't know this name, fallback heuristics to figure
419 * out whether something is a target or a service alias. */
420
421 if (*name == '$') {
422 if (!unit_prefix_is_valid(n))
423 return -EINVAL;
424
425 /* Facilities starting with $ are most likely targets */
426 r = unit_name_build(n, NULL, ".target");
427 } else if (filename && streq(name, filename))
428 /* Names equaling the file name of the services are redundant */
429 return 0;
430 else
431 /* Everything else we assume to be normal service names */
432 r = sysv_translate_name(n);
433
434 if (!r)
435 return -ENOMEM;
436
437 finish:
438 *_r = r;
439
440 return 1;
441 }
442
443 static int sysv_fix_order(Service *s) {
444 Unit *other;
445 int r;
446
447 assert(s);
448
449 if (s->sysv_start_priority < 0)
450 return 0;
451
452 /* For each pair of services where at least one lacks a LSB
453 * header, we use the start priority value to order things. */
454
455 LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_SERVICE]) {
456 Service *t;
457 UnitDependency d;
458 bool special_s, special_t;
459
460 t = SERVICE(other);
461
462 if (s == t)
463 continue;
464
465 if (UNIT(t)->load_state != UNIT_LOADED)
466 continue;
467
468 if (t->sysv_start_priority < 0)
469 continue;
470
471 /* If both units have modern headers we don't care
472 * about the priorities */
473 if ((UNIT(s)->fragment_path || s->sysv_has_lsb) &&
474 (UNIT(t)->fragment_path || t->sysv_has_lsb))
475 continue;
476
477 special_s = s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels);
478 special_t = t->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, t->sysv_runlevels);
479
480 if (special_t && !special_s)
481 d = UNIT_AFTER;
482 else if (special_s && !special_t)
483 d = UNIT_BEFORE;
484 else if (t->sysv_start_priority < s->sysv_start_priority)
485 d = UNIT_AFTER;
486 else if (t->sysv_start_priority > s->sysv_start_priority)
487 d = UNIT_BEFORE;
488 else
489 continue;
490
491 /* FIXME: Maybe we should compare the name here lexicographically? */
492
493 if ((r = unit_add_dependency(UNIT(s), d, UNIT(t), true)) < 0)
494 return r;
495 }
496
497 return 0;
498 }
499
500 static ExecCommand *exec_command_new(const char *path, const char *arg1) {
501 ExecCommand *c;
502
503 if (!(c = new0(ExecCommand, 1)))
504 return NULL;
505
506 if (!(c->path = strdup(path))) {
507 free(c);
508 return NULL;
509 }
510
511 if (!(c->argv = strv_new(path, arg1, NULL))) {
512 free(c->path);
513 free(c);
514 return NULL;
515 }
516
517 return c;
518 }
519
520 static int sysv_exec_commands(Service *s) {
521 ExecCommand *c;
522
523 assert(s);
524 assert(s->is_sysv);
525 assert(UNIT(s)->source_path);
526
527 c = exec_command_new(UNIT(s)->source_path, "start");
528 if (!c)
529 return -ENOMEM;
530 exec_command_append_list(s->exec_command+SERVICE_EXEC_START, c);
531
532 c = exec_command_new(UNIT(s)->source_path, "stop");
533 if (!c)
534 return -ENOMEM;
535 exec_command_append_list(s->exec_command+SERVICE_EXEC_STOP, c);
536
537 c = exec_command_new(UNIT(s)->source_path, "reload");
538 if (!c)
539 return -ENOMEM;
540 exec_command_append_list(s->exec_command+SERVICE_EXEC_RELOAD, c);
541
542 return 0;
543 }
544
545 static int service_load_sysv_path(Service *s, const char *path) {
546 FILE *f;
547 Unit *u;
548 unsigned line = 0;
549 int r;
550 enum {
551 NORMAL,
552 DESCRIPTION,
553 LSB,
554 LSB_DESCRIPTION
555 } state = NORMAL;
556 char *short_description = NULL, *long_description = NULL, *chkconfig_description = NULL, *description;
557 struct stat st;
558
559 assert(s);
560 assert(path);
561
562 u = UNIT(s);
563
564 f = fopen(path, "re");
565 if (!f) {
566 r = errno == ENOENT ? 0 : -errno;
567 goto finish;
568 }
569
570 zero(st);
571 if (fstat(fileno(f), &st) < 0) {
572 r = -errno;
573 goto finish;
574 }
575
576 free(u->source_path);
577 u->source_path = strdup(path);
578 if (!u->source_path) {
579 r = -ENOMEM;
580 goto finish;
581 }
582 u->source_mtime = timespec_load(&st.st_mtim);
583
584 if (null_or_empty(&st)) {
585 u->load_state = UNIT_MASKED;
586 r = 0;
587 goto finish;
588 }
589
590 s->is_sysv = true;
591
592 while (!feof(f)) {
593 char l[LINE_MAX], *t;
594
595 if (!fgets(l, sizeof(l), f)) {
596 if (feof(f))
597 break;
598
599 r = -errno;
600 log_error("Failed to read configuration file '%s': %s", path, strerror(-r));
601 goto finish;
602 }
603
604 line++;
605
606 t = strstrip(l);
607 if (*t != '#')
608 continue;
609
610 if (state == NORMAL && streq(t, "### BEGIN INIT INFO")) {
611 state = LSB;
612 s->sysv_has_lsb = true;
613 continue;
614 }
615
616 if ((state == LSB_DESCRIPTION || state == LSB) && streq(t, "### END INIT INFO")) {
617 state = NORMAL;
618 continue;
619 }
620
621 t++;
622 t += strspn(t, WHITESPACE);
623
624 if (state == NORMAL) {
625
626 /* Try to parse Red Hat style chkconfig headers */
627
628 if (startswith_no_case(t, "chkconfig:")) {
629 int start_priority;
630 char runlevels[16], *k;
631
632 state = NORMAL;
633
634 if (sscanf(t+10, "%15s %i %*i",
635 runlevels,
636 &start_priority) != 2) {
637
638 log_warning("[%s:%u] Failed to parse chkconfig line. Ignoring.", path, line);
639 continue;
640 }
641
642 /* A start priority gathered from the
643 * symlink farms is preferred over the
644 * data from the LSB header. */
645 if (start_priority < 0 || start_priority > 99)
646 log_warning("[%s:%u] Start priority out of range. Ignoring.", path, line);
647 else
648 s->sysv_start_priority = start_priority;
649
650 char_array_0(runlevels);
651 k = delete_chars(runlevels, WHITESPACE "-");
652
653 if (k[0]) {
654 char *d;
655
656 if (!(d = strdup(k))) {
657 r = -ENOMEM;
658 goto finish;
659 }
660
661 free(s->sysv_runlevels);
662 s->sysv_runlevels = d;
663 }
664
665 } else if (startswith_no_case(t, "description:")) {
666
667 size_t k = strlen(t);
668 char *d;
669 const char *j;
670
671 if (t[k-1] == '\\') {
672 state = DESCRIPTION;
673 t[k-1] = 0;
674 }
675
676 if ((j = strstrip(t+12)) && *j) {
677 if (!(d = strdup(j))) {
678 r = -ENOMEM;
679 goto finish;
680 }
681 } else
682 d = NULL;
683
684 free(chkconfig_description);
685 chkconfig_description = d;
686
687 } else if (startswith_no_case(t, "pidfile:")) {
688
689 char *fn;
690
691 state = NORMAL;
692
693 fn = strstrip(t+8);
694 if (!path_is_absolute(fn)) {
695 log_warning("[%s:%u] PID file not absolute. Ignoring.", path, line);
696 continue;
697 }
698
699 if (!(fn = strdup(fn))) {
700 r = -ENOMEM;
701 goto finish;
702 }
703
704 free(s->pid_file);
705 s->pid_file = fn;
706 }
707
708 } else if (state == DESCRIPTION) {
709
710 /* Try to parse Red Hat style description
711 * continuation */
712
713 size_t k = strlen(t);
714 char *j;
715
716 if (t[k-1] == '\\')
717 t[k-1] = 0;
718 else
719 state = NORMAL;
720
721 if ((j = strstrip(t)) && *j) {
722 char *d = NULL;
723
724 if (chkconfig_description)
725 d = join(chkconfig_description, " ", j, NULL);
726 else
727 d = strdup(j);
728
729 if (!d) {
730 r = -ENOMEM;
731 goto finish;
732 }
733
734 free(chkconfig_description);
735 chkconfig_description = d;
736 }
737
738 } else if (state == LSB || state == LSB_DESCRIPTION) {
739
740 if (startswith_no_case(t, "Provides:")) {
741 char *i, *w;
742 size_t z;
743
744 state = LSB;
745
746 FOREACH_WORD_QUOTED(w, z, t+9, i) {
747 char *n, *m;
748
749 if (!(n = strndup(w, z))) {
750 r = -ENOMEM;
751 goto finish;
752 }
753
754 r = sysv_translate_facility(n, path_get_file_name(path), &m);
755 free(n);
756
757 if (r < 0)
758 goto finish;
759
760 if (r == 0)
761 continue;
762
763 if (unit_name_to_type(m) == UNIT_SERVICE)
764 r = unit_add_name(u, m);
765 else
766 /* NB: SysV targets
767 * which are provided
768 * by a service are
769 * pulled in by the
770 * services, as an
771 * indication that the
772 * generic service is
773 * now available. This
774 * is strictly
775 * one-way. The
776 * targets do NOT pull
777 * in the SysV
778 * services! */
779 r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, UNIT_WANTS, m, NULL, true);
780
781 if (r < 0)
782 log_error("[%s:%u] Failed to add LSB Provides name %s, ignoring: %s", path, line, m, strerror(-r));
783
784 free(m);
785 }
786
787 } else if (startswith_no_case(t, "Required-Start:") ||
788 startswith_no_case(t, "Should-Start:") ||
789 startswith_no_case(t, "X-Start-Before:") ||
790 startswith_no_case(t, "X-Start-After:")) {
791 char *i, *w;
792 size_t z;
793
794 state = LSB;
795
796 FOREACH_WORD_QUOTED(w, z, strchr(t, ':')+1, i) {
797 char *n, *m;
798
799 if (!(n = strndup(w, z))) {
800 r = -ENOMEM;
801 goto finish;
802 }
803
804 r = sysv_translate_facility(n, path_get_file_name(path), &m);
805
806 if (r < 0) {
807 log_error("[%s:%u] Failed to translate LSB dependency %s, ignoring: %s", path, line, n, strerror(-r));
808 free(n);
809 continue;
810 }
811
812 free(n);
813
814 if (r == 0)
815 continue;
816
817 r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true);
818
819 if (r < 0)
820 log_error("[%s:%u] Failed to add dependency on %s, ignoring: %s", path, line, m, strerror(-r));
821
822 free(m);
823 }
824 } else if (startswith_no_case(t, "Default-Start:")) {
825 char *k, *d;
826
827 state = LSB;
828
829 k = delete_chars(t+14, WHITESPACE "-");
830
831 if (k[0] != 0) {
832 if (!(d = strdup(k))) {
833 r = -ENOMEM;
834 goto finish;
835 }
836
837 free(s->sysv_runlevels);
838 s->sysv_runlevels = d;
839 }
840
841 } else if (startswith_no_case(t, "Description:")) {
842 char *d, *j;
843
844 state = LSB_DESCRIPTION;
845
846 if ((j = strstrip(t+12)) && *j) {
847 if (!(d = strdup(j))) {
848 r = -ENOMEM;
849 goto finish;
850 }
851 } else
852 d = NULL;
853
854 free(long_description);
855 long_description = d;
856
857 } else if (startswith_no_case(t, "Short-Description:")) {
858 char *d, *j;
859
860 state = LSB;
861
862 if ((j = strstrip(t+18)) && *j) {
863 if (!(d = strdup(j))) {
864 r = -ENOMEM;
865 goto finish;
866 }
867 } else
868 d = NULL;
869
870 free(short_description);
871 short_description = d;
872
873 } else if (state == LSB_DESCRIPTION) {
874
875 if (startswith(l, "#\t") || startswith(l, "# ")) {
876 char *j;
877
878 if ((j = strstrip(t)) && *j) {
879 char *d = NULL;
880
881 if (long_description)
882 d = join(long_description, " ", t, NULL);
883 else
884 d = strdup(j);
885
886 if (!d) {
887 r = -ENOMEM;
888 goto finish;
889 }
890
891 free(long_description);
892 long_description = d;
893 }
894
895 } else
896 state = LSB;
897 }
898 }
899 }
900
901 if ((r = sysv_exec_commands(s)) < 0)
902 goto finish;
903 if (s->sysv_runlevels &&
904 chars_intersect(RUNLEVELS_BOOT, s->sysv_runlevels) &&
905 chars_intersect(RUNLEVELS_UP, s->sysv_runlevels)) {
906 /* Service has both boot and "up" runlevels
907 configured. Kill the "up" ones. */
908 delete_chars(s->sysv_runlevels, RUNLEVELS_UP);
909 }
910
911 if (s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels)) {
912 /* If there a runlevels configured for this service
913 * but none of the standard ones, then we assume this
914 * is some special kind of service (which might be
915 * needed for early boot) and don't create any links
916 * to it. */
917
918 UNIT(s)->default_dependencies = false;
919
920 /* Don't timeout special services during boot (like fsck) */
921 s->timeout_usec = 0;
922 } else
923 s->timeout_usec = DEFAULT_SYSV_TIMEOUT_USEC;
924
925 /* Special setting for all SysV services */
926 s->type = SERVICE_FORKING;
927 s->remain_after_exit = !s->pid_file;
928 s->guess_main_pid = false;
929 s->restart = SERVICE_RESTART_NO;
930 s->exec_context.ignore_sigpipe = false;
931
932 if (UNIT(s)->manager->sysv_console)
933 s->exec_context.std_output = EXEC_OUTPUT_JOURNAL_AND_CONSOLE;
934
935 s->exec_context.kill_mode = KILL_PROCESS;
936
937 /* We use the long description only if
938 * no short description is set. */
939
940 if (short_description)
941 description = short_description;
942 else if (chkconfig_description)
943 description = chkconfig_description;
944 else if (long_description)
945 description = long_description;
946 else
947 description = NULL;
948
949 if (description) {
950 char *d;
951
952 if (!(d = strappend(s->sysv_has_lsb ? "LSB: " : "SYSV: ", description))) {
953 r = -ENOMEM;
954 goto finish;
955 }
956
957 u->description = d;
958 }
959
960 /* The priority that has been set in /etc/rcN.d/ hierarchies
961 * takes precedence over what is stored as default in the LSB
962 * header */
963 if (s->sysv_start_priority_from_rcnd >= 0)
964 s->sysv_start_priority = s->sysv_start_priority_from_rcnd;
965
966 u->load_state = UNIT_LOADED;
967 r = 0;
968
969 finish:
970
971 if (f)
972 fclose(f);
973
974 free(short_description);
975 free(long_description);
976 free(chkconfig_description);
977
978 return r;
979 }
980
981 static int service_load_sysv_name(Service *s, const char *name) {
982 char **p;
983
984 assert(s);
985 assert(name);
986
987 /* For SysV services we strip the boot.*, rc.* and *.sh
988 * prefixes/suffixes. */
989 #if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU) || defined(TARGET_ANGSTROM)
990 if (endswith(name, ".sh.service"))
991 return -ENOENT;
992 #endif
993
994 #ifdef TARGET_SUSE
995 if (startswith(name, "boot."))
996 return -ENOENT;
997 #endif
998
999 #ifdef TARGET_FRUGALWARE
1000 if (startswith(name, "rc."))
1001 return -ENOENT;
1002 #endif
1003
1004 STRV_FOREACH(p, UNIT(s)->manager->lookup_paths.sysvinit_path) {
1005 char *path;
1006 int r;
1007
1008 path = join(*p, "/", name, NULL);
1009 if (!path)
1010 return -ENOMEM;
1011
1012 assert(endswith(path, ".service"));
1013 path[strlen(path)-8] = 0;
1014
1015 r = service_load_sysv_path(s, path);
1016
1017 #if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU) || defined(TARGET_ANGSTROM)
1018 if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
1019 /* Try Debian style *.sh source'able init scripts */
1020 strcat(path, ".sh");
1021 r = service_load_sysv_path(s, path);
1022 }
1023 #endif
1024 free(path);
1025
1026 #ifdef TARGET_SUSE
1027 if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
1028 /* Try SUSE style boot.* init scripts */
1029
1030 path = join(*p, "/boot.", name, NULL);
1031 if (!path)
1032 return -ENOMEM;
1033
1034 /* Drop .service suffix */
1035 path[strlen(path)-8] = 0;
1036 r = service_load_sysv_path(s, path);
1037 free(path);
1038 }
1039 #endif
1040
1041 #ifdef TARGET_FRUGALWARE
1042 if (r >= 0 && UNIT(s)->load_state == UNIT_STUB) {
1043 /* Try Frugalware style rc.* init scripts */
1044
1045 path = join(*p, "/rc.", name, NULL);
1046 if (!path)
1047 return -ENOMEM;
1048
1049 /* Drop .service suffix */
1050 path[strlen(path)-8] = 0;
1051 r = service_load_sysv_path(s, path);
1052 free(path);
1053 }
1054 #endif
1055
1056 if (r < 0)
1057 return r;
1058
1059 if ((UNIT(s)->load_state != UNIT_STUB))
1060 break;
1061 }
1062
1063 return 0;
1064 }
1065
1066 static int service_load_sysv(Service *s) {
1067 const char *t;
1068 Iterator i;
1069 int r;
1070
1071 assert(s);
1072
1073 /* Load service data from SysV init scripts, preferably with
1074 * LSB headers ... */
1075
1076 if (strv_isempty(UNIT(s)->manager->lookup_paths.sysvinit_path))
1077 return 0;
1078
1079 if ((t = UNIT(s)->id))
1080 if ((r = service_load_sysv_name(s, t)) < 0)
1081 return r;
1082
1083 if (UNIT(s)->load_state == UNIT_STUB)
1084 SET_FOREACH(t, UNIT(s)->names, i) {
1085 if (t == UNIT(s)->id)
1086 continue;
1087
1088 if ((r = service_load_sysv_name(s, t)) < 0)
1089 return r;
1090
1091 if (UNIT(s)->load_state != UNIT_STUB)
1092 break;
1093 }
1094
1095 return 0;
1096 }
1097 #endif
1098
1099 static int fsck_fix_order(Service *s) {
1100 Unit *other;
1101 int r;
1102
1103 assert(s);
1104
1105 if (s->fsck_passno <= 0)
1106 return 0;
1107
1108 /* For each pair of services where both have an fsck priority
1109 * we order things based on it. */
1110
1111 LIST_FOREACH(units_by_type, other, UNIT(s)->manager->units_by_type[UNIT_SERVICE]) {
1112 Service *t;
1113 UnitDependency d;
1114
1115 t = SERVICE(other);
1116
1117 if (s == t)
1118 continue;
1119
1120 if (UNIT(t)->load_state != UNIT_LOADED)
1121 continue;
1122
1123 if (t->fsck_passno <= 0)
1124 continue;
1125
1126 if (t->fsck_passno < s->fsck_passno)
1127 d = UNIT_AFTER;
1128 else if (t->fsck_passno > s->fsck_passno)
1129 d = UNIT_BEFORE;
1130 else
1131 continue;
1132
1133 if ((r = unit_add_dependency(UNIT(s), d, UNIT(t), true)) < 0)
1134 return r;
1135 }
1136
1137 return 0;
1138 }
1139
1140 static int service_verify(Service *s) {
1141 assert(s);
1142
1143 if (UNIT(s)->load_state != UNIT_LOADED)
1144 return 0;
1145
1146 if (!s->exec_command[SERVICE_EXEC_START]) {
1147 log_error("%s lacks ExecStart setting. Refusing.", UNIT(s)->id);
1148 return -EINVAL;
1149 }
1150
1151 if (s->type != SERVICE_ONESHOT &&
1152 s->exec_command[SERVICE_EXEC_START]->command_next) {
1153 log_error("%s has more than one ExecStart setting, which is only allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
1154 return -EINVAL;
1155 }
1156
1157 if (s->type == SERVICE_ONESHOT &&
1158 s->exec_command[SERVICE_EXEC_RELOAD]) {
1159 log_error("%s has an ExecReload setting, which is not allowed for Type=oneshot services. Refusing.", UNIT(s)->id);
1160 return -EINVAL;
1161 }
1162
1163 if (s->type == SERVICE_DBUS && !s->bus_name) {
1164 log_error("%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", UNIT(s)->id);
1165 return -EINVAL;
1166 }
1167
1168 if (s->bus_name && s->type != SERVICE_DBUS)
1169 log_warning("%s has a D-Bus service name specified, but is not of type dbus. Ignoring.", UNIT(s)->id);
1170
1171 if (s->exec_context.pam_name && s->exec_context.kill_mode != KILL_CONTROL_GROUP) {
1172 log_error("%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", UNIT(s)->id);
1173 return -EINVAL;
1174 }
1175
1176 return 0;
1177 }
1178
1179 static int service_add_default_dependencies(Service *s) {
1180 int r;
1181
1182 assert(s);
1183
1184 /* Add a number of automatic dependencies useful for the
1185 * majority of services. */
1186
1187 /* First, pull in base system */
1188 if (UNIT(s)->manager->running_as == MANAGER_SYSTEM) {
1189
1190 if ((r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_BASIC_TARGET, NULL, true)) < 0)
1191 return r;
1192
1193 } else if (UNIT(s)->manager->running_as == MANAGER_USER) {
1194
1195 if ((r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SOCKETS_TARGET, NULL, true)) < 0)
1196 return r;
1197 }
1198
1199 /* Second, activate normal shutdown */
1200 return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
1201 }
1202
1203 static void service_fix_output(Service *s) {
1204 assert(s);
1205
1206 /* If nothing has been explicitly configured, patch default
1207 * output in. If input is socket/tty we avoid this however,
1208 * since in that case we want output to default to the same
1209 * place as we read input from. */
1210
1211 if (s->exec_context.std_error == EXEC_OUTPUT_INHERIT &&
1212 s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1213 s->exec_context.std_input == EXEC_INPUT_NULL)
1214 s->exec_context.std_error = UNIT(s)->manager->default_std_error;
1215
1216 if (s->exec_context.std_output == EXEC_OUTPUT_INHERIT &&
1217 s->exec_context.std_input == EXEC_INPUT_NULL)
1218 s->exec_context.std_output = UNIT(s)->manager->default_std_output;
1219 }
1220
1221 static int service_load(Unit *u) {
1222 int r;
1223 Service *s = SERVICE(u);
1224
1225 assert(s);
1226
1227 /* Load a .service file */
1228 if ((r = unit_load_fragment(u)) < 0)
1229 return r;
1230
1231 #ifdef HAVE_SYSV_COMPAT
1232 /* Load a classic init script as a fallback, if we couldn't find anything */
1233 if (u->load_state == UNIT_STUB)
1234 if ((r = service_load_sysv(s)) < 0)
1235 return r;
1236 #endif
1237
1238 /* Still nothing found? Then let's give up */
1239 if (u->load_state == UNIT_STUB)
1240 return -ENOENT;
1241
1242 /* We were able to load something, then let's add in the
1243 * dropin directories. */
1244 if ((r = unit_load_dropin(unit_follow_merge(u))) < 0)
1245 return r;
1246
1247 /* This is a new unit? Then let's add in some extras */
1248 if (u->load_state == UNIT_LOADED) {
1249 if (s->type == _SERVICE_TYPE_INVALID)
1250 s->type = s->bus_name ? SERVICE_DBUS : SERVICE_SIMPLE;
1251
1252 service_fix_output(s);
1253
1254 if ((r = unit_add_exec_dependencies(u, &s->exec_context)) < 0)
1255 return r;
1256
1257 if ((r = unit_add_default_cgroups(u)) < 0)
1258 return r;
1259
1260 #ifdef HAVE_SYSV_COMPAT
1261 if ((r = sysv_fix_order(s)) < 0)
1262 return r;
1263 #endif
1264
1265 if ((r = fsck_fix_order(s)) < 0)
1266 return r;
1267
1268 if (s->bus_name)
1269 if ((r = unit_watch_bus_name(u, s->bus_name)) < 0)
1270 return r;
1271
1272 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
1273 s->notify_access = NOTIFY_MAIN;
1274
1275 if (s->watchdog_usec > 0 && s->notify_access == NOTIFY_NONE)
1276 s->notify_access = NOTIFY_MAIN;
1277
1278 if (s->type == SERVICE_DBUS || s->bus_name)
1279 if ((r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_REQUIRES, SPECIAL_DBUS_SOCKET, NULL, true)) < 0)
1280 return r;
1281
1282 if (UNIT(s)->default_dependencies)
1283 if ((r = service_add_default_dependencies(s)) < 0)
1284 return r;
1285 }
1286
1287 return service_verify(s);
1288 }
1289
1290 static void service_dump(Unit *u, FILE *f, const char *prefix) {
1291
1292 ServiceExecCommand c;
1293 Service *s = SERVICE(u);
1294 const char *prefix2;
1295 char *p2;
1296
1297 assert(s);
1298
1299 p2 = strappend(prefix, "\t");
1300 prefix2 = p2 ? p2 : prefix;
1301
1302 fprintf(f,
1303 "%sService State: %s\n"
1304 "%sResult: %s\n"
1305 "%sReload Result: %s\n"
1306 "%sPermissionsStartOnly: %s\n"
1307 "%sRootDirectoryStartOnly: %s\n"
1308 "%sRemainAfterExit: %s\n"
1309 "%sGuessMainPID: %s\n"
1310 "%sType: %s\n"
1311 "%sRestart: %s\n"
1312 "%sNotifyAccess: %s\n",
1313 prefix, service_state_to_string(s->state),
1314 prefix, service_result_to_string(s->result),
1315 prefix, service_result_to_string(s->reload_result),
1316 prefix, yes_no(s->permissions_start_only),
1317 prefix, yes_no(s->root_directory_start_only),
1318 prefix, yes_no(s->remain_after_exit),
1319 prefix, yes_no(s->guess_main_pid),
1320 prefix, service_type_to_string(s->type),
1321 prefix, service_restart_to_string(s->restart),
1322 prefix, notify_access_to_string(s->notify_access));
1323
1324 if (s->control_pid > 0)
1325 fprintf(f,
1326 "%sControl PID: %lu\n",
1327 prefix, (unsigned long) s->control_pid);
1328
1329 if (s->main_pid > 0)
1330 fprintf(f,
1331 "%sMain PID: %lu\n"
1332 "%sMain PID Known: %s\n"
1333 "%sMain PID Alien: %s\n",
1334 prefix, (unsigned long) s->main_pid,
1335 prefix, yes_no(s->main_pid_known),
1336 prefix, yes_no(s->main_pid_alien));
1337
1338 if (s->pid_file)
1339 fprintf(f,
1340 "%sPIDFile: %s\n",
1341 prefix, s->pid_file);
1342
1343 if (s->bus_name)
1344 fprintf(f,
1345 "%sBusName: %s\n"
1346 "%sBus Name Good: %s\n",
1347 prefix, s->bus_name,
1348 prefix, yes_no(s->bus_name_good));
1349
1350 exec_context_dump(&s->exec_context, f, prefix);
1351
1352 for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
1353
1354 if (!s->exec_command[c])
1355 continue;
1356
1357 fprintf(f, "%s-> %s:\n",
1358 prefix, service_exec_command_to_string(c));
1359
1360 exec_command_dump_list(s->exec_command[c], f, prefix2);
1361 }
1362
1363 #ifdef HAVE_SYSV_COMPAT
1364 if (s->is_sysv)
1365 fprintf(f,
1366 "%sSysV Init Script has LSB Header: %s\n"
1367 "%sSysVEnabled: %s\n",
1368 prefix, yes_no(s->sysv_has_lsb),
1369 prefix, yes_no(s->sysv_enabled));
1370
1371 if (s->sysv_start_priority >= 0)
1372 fprintf(f,
1373 "%sSysVStartPriority: %i\n",
1374 prefix, s->sysv_start_priority);
1375
1376 if (s->sysv_runlevels)
1377 fprintf(f, "%sSysVRunLevels: %s\n",
1378 prefix, s->sysv_runlevels);
1379 #endif
1380
1381 if (s->fsck_passno > 0)
1382 fprintf(f,
1383 "%sFsckPassNo: %i\n",
1384 prefix, s->fsck_passno);
1385
1386 if (s->status_text)
1387 fprintf(f, "%sStatus Text: %s\n",
1388 prefix, s->status_text);
1389
1390 free(p2);
1391 }
1392
1393 static int service_load_pid_file(Service *s, bool may_warn) {
1394 char *k;
1395 int r;
1396 pid_t pid;
1397
1398 assert(s);
1399
1400 if (!s->pid_file)
1401 return -ENOENT;
1402
1403 if ((r = read_one_line_file(s->pid_file, &k)) < 0) {
1404 if (may_warn)
1405 log_info("PID file %s not readable (yet?) after %s.",
1406 s->pid_file, service_state_to_string(s->state));
1407 return r;
1408 }
1409
1410 r = parse_pid(k, &pid);
1411 free(k);
1412
1413 if (r < 0)
1414 return r;
1415
1416 if (kill(pid, 0) < 0 && errno != EPERM) {
1417 if (may_warn)
1418 log_info("PID %lu read from file %s does not exist.",
1419 (unsigned long) pid, s->pid_file);
1420 return -ESRCH;
1421 }
1422
1423 if (s->main_pid_known) {
1424 if (pid == s->main_pid)
1425 return 0;
1426
1427 log_debug("Main PID changing: %lu -> %lu",
1428 (unsigned long) s->main_pid, (unsigned long) pid);
1429 service_unwatch_main_pid(s);
1430 s->main_pid_known = false;
1431 } else
1432 log_debug("Main PID loaded: %lu", (unsigned long) pid);
1433
1434 if ((r = service_set_main_pid(s, pid)) < 0)
1435 return r;
1436
1437 if ((r = unit_watch_pid(UNIT(s), pid)) < 0)
1438 /* FIXME: we need to do something here */
1439 return r;
1440
1441 return 0;
1442 }
1443
1444 static int service_search_main_pid(Service *s) {
1445 pid_t pid;
1446 int r;
1447
1448 assert(s);
1449
1450 /* If we know it anyway, don't ever fallback to unreliable
1451 * heuristics */
1452 if (s->main_pid_known)
1453 return 0;
1454
1455 if (!s->guess_main_pid)
1456 return 0;
1457
1458 assert(s->main_pid <= 0);
1459
1460 if ((pid = cgroup_bonding_search_main_pid_list(UNIT(s)->cgroup_bondings)) <= 0)
1461 return -ENOENT;
1462
1463 log_debug("Main PID guessed: %lu", (unsigned long) pid);
1464 if ((r = service_set_main_pid(s, pid)) < 0)
1465 return r;
1466
1467 if ((r = unit_watch_pid(UNIT(s), pid)) < 0)
1468 /* FIXME: we need to do something here */
1469 return r;
1470
1471 return 0;
1472 }
1473
1474 static void service_notify_sockets_dead(Service *s, bool failed_permanent) {
1475 Iterator i;
1476 Unit *u;
1477
1478 assert(s);
1479
1480 /* Notifies all our sockets when we die */
1481
1482 if (s->socket_fd >= 0)
1483 return;
1484
1485 SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i)
1486 if (u->type == UNIT_SOCKET)
1487 socket_notify_service_dead(SOCKET(u), failed_permanent);
1488
1489 return;
1490 }
1491
1492 static void service_set_state(Service *s, ServiceState state) {
1493 ServiceState old_state;
1494 const UnitActiveState *table;
1495 assert(s);
1496
1497 table = s->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
1498
1499 old_state = s->state;
1500 s->state = state;
1501
1502 service_unwatch_pid_file(s);
1503
1504 if (state != SERVICE_START_PRE &&
1505 state != SERVICE_START &&
1506 state != SERVICE_START_POST &&
1507 state != SERVICE_RELOAD &&
1508 state != SERVICE_STOP &&
1509 state != SERVICE_STOP_SIGTERM &&
1510 state != SERVICE_STOP_SIGKILL &&
1511 state != SERVICE_STOP_POST &&
1512 state != SERVICE_FINAL_SIGTERM &&
1513 state != SERVICE_FINAL_SIGKILL &&
1514 state != SERVICE_AUTO_RESTART)
1515 unit_unwatch_timer(UNIT(s), &s->timer_watch);
1516
1517 if (state != SERVICE_START &&
1518 state != SERVICE_START_POST &&
1519 state != SERVICE_RUNNING &&
1520 state != SERVICE_RELOAD &&
1521 state != SERVICE_STOP &&
1522 state != SERVICE_STOP_SIGTERM &&
1523 state != SERVICE_STOP_SIGKILL) {
1524 service_unwatch_main_pid(s);
1525 s->main_command = NULL;
1526 }
1527
1528 if (state != SERVICE_START_PRE &&
1529 state != SERVICE_START &&
1530 state != SERVICE_START_POST &&
1531 state != SERVICE_RELOAD &&
1532 state != SERVICE_STOP &&
1533 state != SERVICE_STOP_SIGTERM &&
1534 state != SERVICE_STOP_SIGKILL &&
1535 state != SERVICE_STOP_POST &&
1536 state != SERVICE_FINAL_SIGTERM &&
1537 state != SERVICE_FINAL_SIGKILL) {
1538 service_unwatch_control_pid(s);
1539 s->control_command = NULL;
1540 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1541 }
1542
1543 if (state == SERVICE_DEAD ||
1544 state == SERVICE_STOP ||
1545 state == SERVICE_STOP_SIGTERM ||
1546 state == SERVICE_STOP_SIGKILL ||
1547 state == SERVICE_STOP_POST ||
1548 state == SERVICE_FINAL_SIGTERM ||
1549 state == SERVICE_FINAL_SIGKILL ||
1550 state == SERVICE_FAILED ||
1551 state == SERVICE_AUTO_RESTART)
1552 service_notify_sockets_dead(s, false);
1553
1554 if (state != SERVICE_START_PRE &&
1555 state != SERVICE_START &&
1556 state != SERVICE_START_POST &&
1557 state != SERVICE_RUNNING &&
1558 state != SERVICE_RELOAD &&
1559 state != SERVICE_STOP &&
1560 state != SERVICE_STOP_SIGTERM &&
1561 state != SERVICE_STOP_SIGKILL &&
1562 state != SERVICE_STOP_POST &&
1563 state != SERVICE_FINAL_SIGTERM &&
1564 state != SERVICE_FINAL_SIGKILL &&
1565 !(state == SERVICE_DEAD && UNIT(s)->job)) {
1566 service_close_socket_fd(s);
1567 service_connection_unref(s);
1568 }
1569
1570 if (state == SERVICE_STOP)
1571 service_stop_watchdog(s);
1572
1573 /* For the inactive states unit_notify() will trim the cgroup,
1574 * but for exit we have to do that ourselves... */
1575 if (state == SERVICE_EXITED && UNIT(s)->manager->n_reloading <= 0)
1576 cgroup_bonding_trim_list(UNIT(s)->cgroup_bondings, true);
1577
1578 if (old_state != state)
1579 log_debug("%s changed %s -> %s", UNIT(s)->id, service_state_to_string(old_state), service_state_to_string(state));
1580
1581 unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
1582 s->reload_result = SERVICE_SUCCESS;
1583 }
1584
1585 static int service_coldplug(Unit *u) {
1586 Service *s = SERVICE(u);
1587 int r;
1588
1589 assert(s);
1590 assert(s->state == SERVICE_DEAD);
1591
1592 if (s->deserialized_state != s->state) {
1593
1594 if (s->deserialized_state == SERVICE_START_PRE ||
1595 s->deserialized_state == SERVICE_START ||
1596 s->deserialized_state == SERVICE_START_POST ||
1597 s->deserialized_state == SERVICE_RELOAD ||
1598 s->deserialized_state == SERVICE_STOP ||
1599 s->deserialized_state == SERVICE_STOP_SIGTERM ||
1600 s->deserialized_state == SERVICE_STOP_SIGKILL ||
1601 s->deserialized_state == SERVICE_STOP_POST ||
1602 s->deserialized_state == SERVICE_FINAL_SIGTERM ||
1603 s->deserialized_state == SERVICE_FINAL_SIGKILL ||
1604 s->deserialized_state == SERVICE_AUTO_RESTART) {
1605
1606 if (s->deserialized_state == SERVICE_AUTO_RESTART || s->timeout_usec > 0) {
1607 usec_t k;
1608
1609 k = s->deserialized_state == SERVICE_AUTO_RESTART ? s->restart_usec : s->timeout_usec;
1610
1611 if ((r = unit_watch_timer(UNIT(s), k, &s->timer_watch)) < 0)
1612 return r;
1613 }
1614 }
1615
1616 if ((s->deserialized_state == SERVICE_START &&
1617 (s->type == SERVICE_FORKING ||
1618 s->type == SERVICE_DBUS ||
1619 s->type == SERVICE_ONESHOT ||
1620 s->type == SERVICE_NOTIFY)) ||
1621 s->deserialized_state == SERVICE_START_POST ||
1622 s->deserialized_state == SERVICE_RUNNING ||
1623 s->deserialized_state == SERVICE_RELOAD ||
1624 s->deserialized_state == SERVICE_STOP ||
1625 s->deserialized_state == SERVICE_STOP_SIGTERM ||
1626 s->deserialized_state == SERVICE_STOP_SIGKILL)
1627 if (s->main_pid > 0)
1628 if ((r = unit_watch_pid(UNIT(s), s->main_pid)) < 0)
1629 return r;
1630
1631 if (s->deserialized_state == SERVICE_START_PRE ||
1632 s->deserialized_state == SERVICE_START ||
1633 s->deserialized_state == SERVICE_START_POST ||
1634 s->deserialized_state == SERVICE_RELOAD ||
1635 s->deserialized_state == SERVICE_STOP ||
1636 s->deserialized_state == SERVICE_STOP_SIGTERM ||
1637 s->deserialized_state == SERVICE_STOP_SIGKILL ||
1638 s->deserialized_state == SERVICE_STOP_POST ||
1639 s->deserialized_state == SERVICE_FINAL_SIGTERM ||
1640 s->deserialized_state == SERVICE_FINAL_SIGKILL)
1641 if (s->control_pid > 0)
1642 if ((r = unit_watch_pid(UNIT(s), s->control_pid)) < 0)
1643 return r;
1644
1645 if (s->deserialized_state == SERVICE_START_POST ||
1646 s->deserialized_state == SERVICE_RUNNING)
1647 service_handle_watchdog(s);
1648
1649 service_set_state(s, s->deserialized_state);
1650 }
1651 return 0;
1652 }
1653
1654 static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1655 Iterator i;
1656 int r;
1657 int *rfds = NULL;
1658 unsigned rn_fds = 0;
1659 Unit *u;
1660
1661 assert(s);
1662 assert(fds);
1663 assert(n_fds);
1664
1665 if (s->socket_fd >= 0)
1666 return 0;
1667
1668 SET_FOREACH(u, UNIT(s)->dependencies[UNIT_TRIGGERED_BY], i) {
1669 int *cfds;
1670 unsigned cn_fds;
1671 Socket *sock;
1672
1673 if (u->type != UNIT_SOCKET)
1674 continue;
1675
1676 sock = SOCKET(u);
1677
1678 if ((r = socket_collect_fds(sock, &cfds, &cn_fds)) < 0)
1679 goto fail;
1680
1681 if (!cfds)
1682 continue;
1683
1684 if (!rfds) {
1685 rfds = cfds;
1686 rn_fds = cn_fds;
1687 } else {
1688 int *t;
1689
1690 if (!(t = new(int, rn_fds+cn_fds))) {
1691 free(cfds);
1692 r = -ENOMEM;
1693 goto fail;
1694 }
1695
1696 memcpy(t, rfds, rn_fds * sizeof(int));
1697 memcpy(t+rn_fds, cfds, cn_fds * sizeof(int));
1698 free(rfds);
1699 free(cfds);
1700
1701 rfds = t;
1702 rn_fds = rn_fds+cn_fds;
1703 }
1704 }
1705
1706 *fds = rfds;
1707 *n_fds = rn_fds;
1708
1709 return 0;
1710
1711 fail:
1712 free(rfds);
1713
1714 return r;
1715 }
1716
1717 static int service_spawn(
1718 Service *s,
1719 ExecCommand *c,
1720 bool timeout,
1721 bool pass_fds,
1722 bool apply_permissions,
1723 bool apply_chroot,
1724 bool apply_tty_stdin,
1725 bool set_notify_socket,
1726 bool is_control,
1727 pid_t *_pid) {
1728
1729 pid_t pid;
1730 int r;
1731 int *fds = NULL, *fdsbuf = NULL;
1732 unsigned n_fds = 0, n_env = 0;
1733 char **argv = NULL, **final_env = NULL, **our_env = NULL;
1734
1735 assert(s);
1736 assert(c);
1737 assert(_pid);
1738
1739 if (pass_fds ||
1740 s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1741 s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1742 s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1743
1744 if (s->socket_fd >= 0) {
1745 fds = &s->socket_fd;
1746 n_fds = 1;
1747 } else {
1748 if ((r = service_collect_fds(s, &fdsbuf, &n_fds)) < 0)
1749 goto fail;
1750
1751 fds = fdsbuf;
1752 }
1753 }
1754
1755 if (timeout && s->timeout_usec) {
1756 if ((r = unit_watch_timer(UNIT(s), s->timeout_usec, &s->timer_watch)) < 0)
1757 goto fail;
1758 } else
1759 unit_unwatch_timer(UNIT(s), &s->timer_watch);
1760
1761 if (!(argv = unit_full_printf_strv(UNIT(s), c->argv))) {
1762 r = -ENOMEM;
1763 goto fail;
1764 }
1765
1766 if (!(our_env = new0(char*, 4))) {
1767 r = -ENOMEM;
1768 goto fail;
1769 }
1770
1771 if (set_notify_socket)
1772 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", UNIT(s)->manager->notify_socket) < 0) {
1773 r = -ENOMEM;
1774 goto fail;
1775 }
1776
1777 if (s->main_pid > 0)
1778 if (asprintf(our_env + n_env++, "MAINPID=%lu", (unsigned long) s->main_pid) < 0) {
1779 r = -ENOMEM;
1780 goto fail;
1781 }
1782
1783 if (s->watchdog_usec > 0)
1784 if (asprintf(our_env + n_env++, "WATCHDOG_USEC=%llu", (unsigned long long) s->watchdog_usec) < 0) {
1785 r = -ENOMEM;
1786 goto fail;
1787 }
1788
1789 if (!(final_env = strv_env_merge(2,
1790 UNIT(s)->manager->environment,
1791 our_env,
1792 NULL))) {
1793 r = -ENOMEM;
1794 goto fail;
1795 }
1796
1797 r = exec_spawn(c,
1798 argv,
1799 &s->exec_context,
1800 fds, n_fds,
1801 final_env,
1802 apply_permissions,
1803 apply_chroot,
1804 apply_tty_stdin,
1805 UNIT(s)->manager->confirm_spawn,
1806 UNIT(s)->cgroup_bondings,
1807 UNIT(s)->cgroup_attributes,
1808 is_control ? "control" : NULL,
1809 s->type == SERVICE_IDLE ? UNIT(s)->manager->idle_pipe : NULL,
1810 &pid);
1811
1812 if (r < 0)
1813 goto fail;
1814
1815
1816 if ((r = unit_watch_pid(UNIT(s), pid)) < 0)
1817 /* FIXME: we need to do something here */
1818 goto fail;
1819
1820 free(fdsbuf);
1821 strv_free(argv);
1822 strv_free(our_env);
1823 strv_free(final_env);
1824
1825 *_pid = pid;
1826
1827 return 0;
1828
1829 fail:
1830 free(fdsbuf);
1831 strv_free(argv);
1832 strv_free(our_env);
1833 strv_free(final_env);
1834
1835 if (timeout)
1836 unit_unwatch_timer(UNIT(s), &s->timer_watch);
1837
1838 return r;
1839 }
1840
1841 static int main_pid_good(Service *s) {
1842 assert(s);
1843
1844 /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1845 * don't know */
1846
1847 /* If we know the pid file, then lets just check if it is
1848 * still valid */
1849 if (s->main_pid_known) {
1850
1851 /* If it's an alien child let's check if it is still
1852 * alive ... */
1853 if (s->main_pid_alien)
1854 return kill(s->main_pid, 0) >= 0 || errno != ESRCH;
1855
1856 /* .. otherwise assume we'll get a SIGCHLD for it,
1857 * which we really should wait for to collect exit
1858 * status and code */
1859 return s->main_pid > 0;
1860 }
1861
1862 /* We don't know the pid */
1863 return -EAGAIN;
1864 }
1865
1866 static int control_pid_good(Service *s) {
1867 assert(s);
1868
1869 return s->control_pid > 0;
1870 }
1871
1872 static int cgroup_good(Service *s) {
1873 int r;
1874
1875 assert(s);
1876
1877 if ((r = cgroup_bonding_is_empty_list(UNIT(s)->cgroup_bondings)) < 0)
1878 return r;
1879
1880 return !r;
1881 }
1882
1883 static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart) {
1884 int r;
1885 assert(s);
1886
1887 if (f != SERVICE_SUCCESS)
1888 s->result = f;
1889
1890 if (allow_restart &&
1891 !s->forbid_restart &&
1892 (s->restart == SERVICE_RESTART_ALWAYS ||
1893 (s->restart == SERVICE_RESTART_ON_SUCCESS && s->result == SERVICE_SUCCESS) ||
1894 (s->restart == SERVICE_RESTART_ON_FAILURE && s->result != SERVICE_SUCCESS) ||
1895 (s->restart == SERVICE_RESTART_ON_ABORT && (s->result == SERVICE_FAILURE_SIGNAL ||
1896 s->result == SERVICE_FAILURE_CORE_DUMP)))) {
1897
1898 r = unit_watch_timer(UNIT(s), s->restart_usec, &s->timer_watch);
1899 if (r < 0)
1900 goto fail;
1901
1902 service_set_state(s, SERVICE_AUTO_RESTART);
1903 } else
1904 service_set_state(s, s->result != SERVICE_SUCCESS ? SERVICE_FAILED : SERVICE_DEAD);
1905
1906 s->forbid_restart = false;
1907
1908 return;
1909
1910 fail:
1911 log_warning("%s failed to run install restart timer: %s", UNIT(s)->id, strerror(-r));
1912 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
1913 }
1914
1915 static void service_enter_signal(Service *s, ServiceState state, ServiceResult f);
1916
1917 static void service_enter_stop_post(Service *s, ServiceResult f) {
1918 int r;
1919 assert(s);
1920
1921 if (f != SERVICE_SUCCESS)
1922 s->result = f;
1923
1924 service_unwatch_control_pid(s);
1925
1926 if ((s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST])) {
1927 s->control_command_id = SERVICE_EXEC_STOP_POST;
1928
1929 r = service_spawn(s,
1930 s->control_command,
1931 true,
1932 false,
1933 !s->permissions_start_only,
1934 !s->root_directory_start_only,
1935 true,
1936 false,
1937 true,
1938 &s->control_pid);
1939 if (r < 0)
1940 goto fail;
1941
1942
1943 service_set_state(s, SERVICE_STOP_POST);
1944 } else
1945 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_SUCCESS);
1946
1947 return;
1948
1949 fail:
1950 log_warning("%s failed to run 'stop-post' task: %s", UNIT(s)->id, strerror(-r));
1951 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
1952 }
1953
1954 static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
1955 int r;
1956 Set *pid_set = NULL;
1957 bool wait_for_exit = false;
1958
1959 assert(s);
1960
1961 if (f != SERVICE_SUCCESS)
1962 s->result = f;
1963
1964 if (s->exec_context.kill_mode != KILL_NONE) {
1965 int sig = (state == SERVICE_STOP_SIGTERM || state == SERVICE_FINAL_SIGTERM) ? s->exec_context.kill_signal : SIGKILL;
1966
1967 if (s->main_pid > 0) {
1968 if (kill_and_sigcont(s->main_pid, sig) < 0 && errno != ESRCH)
1969 log_warning("Failed to kill main process %li: %m", (long) s->main_pid);
1970 else
1971 wait_for_exit = !s->main_pid_alien;
1972 }
1973
1974 if (s->control_pid > 0) {
1975 if (kill_and_sigcont(s->control_pid, sig) < 0 && errno != ESRCH)
1976 log_warning("Failed to kill control process %li: %m", (long) s->control_pid);
1977 else
1978 wait_for_exit = true;
1979 }
1980
1981 if (s->exec_context.kill_mode == KILL_CONTROL_GROUP) {
1982
1983 if (!(pid_set = set_new(trivial_hash_func, trivial_compare_func))) {
1984 r = -ENOMEM;
1985 goto fail;
1986 }
1987
1988 /* Exclude the main/control pids from being killed via the cgroup */
1989 if (s->main_pid > 0)
1990 if ((r = set_put(pid_set, LONG_TO_PTR(s->main_pid))) < 0)
1991 goto fail;
1992
1993 if (s->control_pid > 0)
1994 if ((r = set_put(pid_set, LONG_TO_PTR(s->control_pid))) < 0)
1995 goto fail;
1996
1997 r = cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, sig, true, false, pid_set, NULL);
1998 if (r < 0) {
1999 if (r != -EAGAIN && r != -ESRCH && r != -ENOENT)
2000 log_warning("Failed to kill control group: %s", strerror(-r));
2001 } else if (r > 0)
2002 wait_for_exit = true;
2003
2004 set_free(pid_set);
2005 pid_set = NULL;
2006 }
2007 }
2008
2009 if (wait_for_exit) {
2010 if (s->timeout_usec > 0)
2011 if ((r = unit_watch_timer(UNIT(s), s->timeout_usec, &s->timer_watch)) < 0)
2012 goto fail;
2013
2014 service_set_state(s, state);
2015 } else if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
2016 service_enter_stop_post(s, SERVICE_SUCCESS);
2017 else
2018 service_enter_dead(s, SERVICE_SUCCESS, true);
2019
2020 return;
2021
2022 fail:
2023 log_warning("%s failed to kill processes: %s", UNIT(s)->id, strerror(-r));
2024
2025 if (state == SERVICE_STOP_SIGTERM || state == SERVICE_STOP_SIGKILL)
2026 service_enter_stop_post(s, SERVICE_FAILURE_RESOURCES);
2027 else
2028 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2029
2030 if (pid_set)
2031 set_free(pid_set);
2032 }
2033
2034 static void service_enter_stop(Service *s, ServiceResult f) {
2035 int r;
2036
2037 assert(s);
2038
2039 if (f != SERVICE_SUCCESS)
2040 s->result = f;
2041
2042 service_unwatch_control_pid(s);
2043
2044 if ((s->control_command = s->exec_command[SERVICE_EXEC_STOP])) {
2045 s->control_command_id = SERVICE_EXEC_STOP;
2046
2047 r = service_spawn(s,
2048 s->control_command,
2049 true,
2050 false,
2051 !s->permissions_start_only,
2052 !s->root_directory_start_only,
2053 false,
2054 false,
2055 true,
2056 &s->control_pid);
2057 if (r < 0)
2058 goto fail;
2059
2060 service_set_state(s, SERVICE_STOP);
2061 } else
2062 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2063
2064 return;
2065
2066 fail:
2067 log_warning("%s failed to run 'stop' task: %s", UNIT(s)->id, strerror(-r));
2068 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2069 }
2070
2071 static void service_enter_running(Service *s, ServiceResult f) {
2072 int main_pid_ok, cgroup_ok;
2073 assert(s);
2074
2075 if (f != SERVICE_SUCCESS)
2076 s->result = f;
2077
2078 main_pid_ok = main_pid_good(s);
2079 cgroup_ok = cgroup_good(s);
2080
2081 if ((main_pid_ok > 0 || (main_pid_ok < 0 && cgroup_ok != 0)) &&
2082 (s->bus_name_good || s->type != SERVICE_DBUS))
2083 service_set_state(s, SERVICE_RUNNING);
2084 else if (s->remain_after_exit)
2085 service_set_state(s, SERVICE_EXITED);
2086 else
2087 service_enter_stop(s, SERVICE_SUCCESS);
2088 }
2089
2090 static void service_enter_start_post(Service *s) {
2091 int r;
2092 assert(s);
2093
2094 service_unwatch_control_pid(s);
2095
2096 if (s->watchdog_usec > 0)
2097 service_reset_watchdog(s);
2098
2099 if ((s->control_command = s->exec_command[SERVICE_EXEC_START_POST])) {
2100 s->control_command_id = SERVICE_EXEC_START_POST;
2101
2102 r = service_spawn(s,
2103 s->control_command,
2104 true,
2105 false,
2106 !s->permissions_start_only,
2107 !s->root_directory_start_only,
2108 false,
2109 false,
2110 true,
2111 &s->control_pid);
2112 if (r < 0)
2113 goto fail;
2114
2115 service_set_state(s, SERVICE_START_POST);
2116 } else
2117 service_enter_running(s, SERVICE_SUCCESS);
2118
2119 return;
2120
2121 fail:
2122 log_warning("%s failed to run 'start-post' task: %s", UNIT(s)->id, strerror(-r));
2123 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2124 }
2125
2126 static void service_enter_start(Service *s) {
2127 pid_t pid;
2128 int r;
2129 ExecCommand *c;
2130
2131 assert(s);
2132
2133 assert(s->exec_command[SERVICE_EXEC_START]);
2134 assert(!s->exec_command[SERVICE_EXEC_START]->command_next || s->type == SERVICE_ONESHOT);
2135
2136 if (s->type == SERVICE_FORKING)
2137 service_unwatch_control_pid(s);
2138 else
2139 service_unwatch_main_pid(s);
2140
2141 /* We want to ensure that nobody leaks processes from
2142 * START_PRE here, so let's go on a killing spree, People
2143 * should not spawn long running processes from START_PRE. */
2144 cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL, true, true, NULL, "control");
2145
2146 if (s->type == SERVICE_FORKING) {
2147 s->control_command_id = SERVICE_EXEC_START;
2148 c = s->control_command = s->exec_command[SERVICE_EXEC_START];
2149
2150 s->main_command = NULL;
2151 } else {
2152 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2153 s->control_command = NULL;
2154
2155 c = s->main_command = s->exec_command[SERVICE_EXEC_START];
2156 }
2157
2158 r = service_spawn(s,
2159 c,
2160 s->type == SERVICE_FORKING || s->type == SERVICE_DBUS || s->type == SERVICE_NOTIFY,
2161 true,
2162 true,
2163 true,
2164 true,
2165 s->notify_access != NOTIFY_NONE,
2166 false,
2167 &pid);
2168 if (r < 0)
2169 goto fail;
2170
2171 if (s->type == SERVICE_SIMPLE || s->type == SERVICE_IDLE) {
2172 /* For simple services we immediately start
2173 * the START_POST binaries. */
2174
2175 service_set_main_pid(s, pid);
2176 service_enter_start_post(s);
2177
2178 } else if (s->type == SERVICE_FORKING) {
2179
2180 /* For forking services we wait until the start
2181 * process exited. */
2182
2183 s->control_pid = pid;
2184 service_set_state(s, SERVICE_START);
2185
2186 } else if (s->type == SERVICE_ONESHOT ||
2187 s->type == SERVICE_DBUS ||
2188 s->type == SERVICE_NOTIFY) {
2189
2190 /* For oneshot services we wait until the start
2191 * process exited, too, but it is our main process. */
2192
2193 /* For D-Bus services we know the main pid right away,
2194 * but wait for the bus name to appear on the
2195 * bus. Notify services are similar. */
2196
2197 service_set_main_pid(s, pid);
2198 service_set_state(s, SERVICE_START);
2199 } else
2200 assert_not_reached("Unknown service type");
2201
2202 return;
2203
2204 fail:
2205 log_warning("%s failed to run 'start' task: %s", UNIT(s)->id, strerror(-r));
2206 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2207 }
2208
2209 static void service_enter_start_pre(Service *s) {
2210 int r;
2211
2212 assert(s);
2213
2214 service_unwatch_control_pid(s);
2215
2216 if ((s->control_command = s->exec_command[SERVICE_EXEC_START_PRE])) {
2217
2218 /* Before we start anything, let's clear up what might
2219 * be left from previous runs. */
2220 cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL, true, true, NULL, "control");
2221
2222 s->control_command_id = SERVICE_EXEC_START_PRE;
2223
2224 r = service_spawn(s,
2225 s->control_command,
2226 true,
2227 false,
2228 !s->permissions_start_only,
2229 !s->root_directory_start_only,
2230 true,
2231 false,
2232 true,
2233 &s->control_pid);
2234 if (r < 0)
2235 goto fail;
2236
2237 service_set_state(s, SERVICE_START_PRE);
2238 } else
2239 service_enter_start(s);
2240
2241 return;
2242
2243 fail:
2244 log_warning("%s failed to run 'start-pre' task: %s", UNIT(s)->id, strerror(-r));
2245 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2246 }
2247
2248 static void service_enter_restart(Service *s) {
2249 int r;
2250 DBusError error;
2251
2252 assert(s);
2253 dbus_error_init(&error);
2254
2255 if (UNIT(s)->job) {
2256 log_info("Job pending for unit, delaying automatic restart.");
2257
2258 if ((r = unit_watch_timer(UNIT(s), s->restart_usec, &s->timer_watch)) < 0)
2259 goto fail;
2260
2261 return;
2262 }
2263
2264 /* Any units that are bound to this service must also be
2265 * restarted. We use JOB_RESTART (instead of the more obvious
2266 * JOB_START) here so that those dependency jobs will be added
2267 * as well. */
2268 r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, false, &error, NULL);
2269 if (r < 0)
2270 goto fail;
2271
2272 log_debug("%s scheduled restart job.", UNIT(s)->id);
2273 return;
2274
2275 fail:
2276 log_warning("%s failed to schedule restart job: %s", UNIT(s)->id, bus_error(&error, -r));
2277 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, false);
2278
2279 dbus_error_free(&error);
2280 }
2281
2282 static void service_enter_reload(Service *s) {
2283 int r;
2284
2285 assert(s);
2286
2287 service_unwatch_control_pid(s);
2288
2289 if ((s->control_command = s->exec_command[SERVICE_EXEC_RELOAD])) {
2290 s->control_command_id = SERVICE_EXEC_RELOAD;
2291
2292 r = service_spawn(s,
2293 s->control_command,
2294 true,
2295 false,
2296 !s->permissions_start_only,
2297 !s->root_directory_start_only,
2298 false,
2299 false,
2300 true,
2301 &s->control_pid);
2302 if (r < 0)
2303 goto fail;
2304
2305 service_set_state(s, SERVICE_RELOAD);
2306 } else
2307 service_enter_running(s, SERVICE_SUCCESS);
2308
2309 return;
2310
2311 fail:
2312 log_warning("%s failed to run 'reload' task: %s", UNIT(s)->id, strerror(-r));
2313 s->reload_result = SERVICE_FAILURE_RESOURCES;
2314 service_enter_running(s, SERVICE_SUCCESS);
2315 }
2316
2317 static void service_run_next_control(Service *s) {
2318 int r;
2319
2320 assert(s);
2321 assert(s->control_command);
2322 assert(s->control_command->command_next);
2323
2324 assert(s->control_command_id != SERVICE_EXEC_START);
2325
2326 s->control_command = s->control_command->command_next;
2327 service_unwatch_control_pid(s);
2328
2329 r = service_spawn(s,
2330 s->control_command,
2331 true,
2332 false,
2333 !s->permissions_start_only,
2334 !s->root_directory_start_only,
2335 s->control_command_id == SERVICE_EXEC_START_PRE ||
2336 s->control_command_id == SERVICE_EXEC_STOP_POST,
2337 false,
2338 true,
2339 &s->control_pid);
2340 if (r < 0)
2341 goto fail;
2342
2343 return;
2344
2345 fail:
2346 log_warning("%s failed to run next control task: %s", UNIT(s)->id, strerror(-r));
2347
2348 if (s->state == SERVICE_START_PRE)
2349 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
2350 else if (s->state == SERVICE_STOP)
2351 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2352 else if (s->state == SERVICE_STOP_POST)
2353 service_enter_dead(s, SERVICE_FAILURE_RESOURCES, true);
2354 else if (s->state == SERVICE_RELOAD) {
2355 s->reload_result = SERVICE_FAILURE_RESOURCES;
2356 service_enter_running(s, SERVICE_SUCCESS);
2357 } else
2358 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2359 }
2360
2361 static void service_run_next_main(Service *s) {
2362 pid_t pid;
2363 int r;
2364
2365 assert(s);
2366 assert(s->main_command);
2367 assert(s->main_command->command_next);
2368 assert(s->type == SERVICE_ONESHOT);
2369
2370 s->main_command = s->main_command->command_next;
2371 service_unwatch_main_pid(s);
2372
2373 r = service_spawn(s,
2374 s->main_command,
2375 false,
2376 true,
2377 true,
2378 true,
2379 true,
2380 s->notify_access != NOTIFY_NONE,
2381 false,
2382 &pid);
2383 if (r < 0)
2384 goto fail;
2385
2386 service_set_main_pid(s, pid);
2387
2388 return;
2389
2390 fail:
2391 log_warning("%s failed to run next main task: %s", UNIT(s)->id, strerror(-r));
2392 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
2393 }
2394
2395 static int service_start_limit_test(Service *s) {
2396 assert(s);
2397
2398 if (ratelimit_test(&s->start_limit))
2399 return 0;
2400
2401 switch (s->start_limit_action) {
2402
2403 case SERVICE_START_LIMIT_NONE:
2404 log_warning("%s start request repeated too quickly, refusing to start.", UNIT(s)->id);
2405 break;
2406
2407 case SERVICE_START_LIMIT_REBOOT: {
2408 DBusError error;
2409 int r;
2410
2411 dbus_error_init(&error);
2412
2413 log_warning("%s start request repeated too quickly, rebooting.", UNIT(s)->id);
2414
2415 r = manager_add_job_by_name(UNIT(s)->manager, JOB_START, SPECIAL_REBOOT_TARGET, JOB_REPLACE, true, &error, NULL);
2416 if (r < 0) {
2417 log_error("Failed to reboot: %s.", bus_error(&error, r));
2418 dbus_error_free(&error);
2419 }
2420
2421 break;
2422 }
2423
2424 case SERVICE_START_LIMIT_REBOOT_FORCE:
2425 log_warning("%s start request repeated too quickly, forcibly rebooting.", UNIT(s)->id);
2426 UNIT(s)->manager->exit_code = MANAGER_REBOOT;
2427 break;
2428
2429 case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
2430 log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
2431 reboot(RB_AUTOBOOT);
2432 break;
2433
2434 default:
2435 log_error("start limit action=%i", s->start_limit_action);
2436 assert_not_reached("Unknown StartLimitAction.");
2437 }
2438
2439 return -ECANCELED;
2440 }
2441
2442 static int service_start(Unit *u) {
2443 Service *s = SERVICE(u);
2444 int r;
2445
2446 assert(s);
2447
2448 /* We cannot fulfill this request right now, try again later
2449 * please! */
2450 if (s->state == SERVICE_STOP ||
2451 s->state == SERVICE_STOP_SIGTERM ||
2452 s->state == SERVICE_STOP_SIGKILL ||
2453 s->state == SERVICE_STOP_POST ||
2454 s->state == SERVICE_FINAL_SIGTERM ||
2455 s->state == SERVICE_FINAL_SIGKILL)
2456 return -EAGAIN;
2457
2458 /* Already on it! */
2459 if (s->state == SERVICE_START_PRE ||
2460 s->state == SERVICE_START ||
2461 s->state == SERVICE_START_POST)
2462 return 0;
2463
2464 /* A service that will be restarted must be stopped first to
2465 * trigger BindTo and/or OnFailure dependencies. If a user
2466 * does not want to wait for the holdoff time to elapse, the
2467 * service should be manually restarted, not started. */
2468 if (s->state == SERVICE_AUTO_RESTART) {
2469 log_warning("%s automatic restart is pending, must be stopped before issuing start request.", UNIT(s)->id);
2470 return -ECANCELED;
2471 }
2472
2473 assert(s->state == SERVICE_DEAD || s->state == SERVICE_FAILED);
2474
2475 /* Make sure we don't enter a busy loop of some kind. */
2476 r = service_start_limit_test(s);
2477 if (r < 0) {
2478 service_notify_sockets_dead(s, true);
2479 return r;
2480 }
2481
2482 s->result = SERVICE_SUCCESS;
2483 s->reload_result = SERVICE_SUCCESS;
2484 s->main_pid_known = false;
2485 s->main_pid_alien = false;
2486 s->forbid_restart = false;
2487
2488 service_enter_start_pre(s);
2489 return 0;
2490 }
2491
2492 static int service_stop(Unit *u) {
2493 Service *s = SERVICE(u);
2494
2495 assert(s);
2496
2497 /* Don't create restart jobs from here. */
2498 s->forbid_restart = true;
2499
2500 /* Already on it */
2501 if (s->state == SERVICE_STOP ||
2502 s->state == SERVICE_STOP_SIGTERM ||
2503 s->state == SERVICE_STOP_SIGKILL ||
2504 s->state == SERVICE_STOP_POST ||
2505 s->state == SERVICE_FINAL_SIGTERM ||
2506 s->state == SERVICE_FINAL_SIGKILL)
2507 return 0;
2508
2509 /* A restart will be scheduled or is in progress. */
2510 if (s->state == SERVICE_AUTO_RESTART) {
2511 service_enter_dead(s, SERVICE_SUCCESS, false);
2512 return 0;
2513 }
2514
2515 /* If there's already something running we go directly into
2516 * kill mode. */
2517 if (s->state == SERVICE_START_PRE ||
2518 s->state == SERVICE_START ||
2519 s->state == SERVICE_START_POST ||
2520 s->state == SERVICE_RELOAD) {
2521 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_SUCCESS);
2522 return 0;
2523 }
2524
2525 assert(s->state == SERVICE_RUNNING ||
2526 s->state == SERVICE_EXITED);
2527
2528 service_enter_stop(s, SERVICE_SUCCESS);
2529 return 0;
2530 }
2531
2532 static int service_reload(Unit *u) {
2533 Service *s = SERVICE(u);
2534
2535 assert(s);
2536
2537 assert(s->state == SERVICE_RUNNING || s->state == SERVICE_EXITED);
2538
2539 service_enter_reload(s);
2540 return 0;
2541 }
2542
2543 static bool service_can_reload(Unit *u) {
2544 Service *s = SERVICE(u);
2545
2546 assert(s);
2547
2548 return !!s->exec_command[SERVICE_EXEC_RELOAD];
2549 }
2550
2551 static int service_serialize(Unit *u, FILE *f, FDSet *fds) {
2552 Service *s = SERVICE(u);
2553
2554 assert(u);
2555 assert(f);
2556 assert(fds);
2557
2558 unit_serialize_item(u, f, "state", service_state_to_string(s->state));
2559 unit_serialize_item(u, f, "result", service_result_to_string(s->result));
2560 unit_serialize_item(u, f, "reload-result", service_result_to_string(s->reload_result));
2561
2562 if (s->control_pid > 0)
2563 unit_serialize_item_format(u, f, "control-pid", "%lu", (unsigned long) s->control_pid);
2564
2565 if (s->main_pid_known && s->main_pid > 0)
2566 unit_serialize_item_format(u, f, "main-pid", "%lu", (unsigned long) s->main_pid);
2567
2568 unit_serialize_item(u, f, "main-pid-known", yes_no(s->main_pid_known));
2569
2570 if (s->status_text)
2571 unit_serialize_item(u, f, "status-text", s->status_text);
2572
2573 /* FIXME: There's a minor uncleanliness here: if there are
2574 * multiple commands attached here, we will start from the
2575 * first one again */
2576 if (s->control_command_id >= 0)
2577 unit_serialize_item(u, f, "control-command", service_exec_command_to_string(s->control_command_id));
2578
2579 if (s->socket_fd >= 0) {
2580 int copy;
2581
2582 if ((copy = fdset_put_dup(fds, s->socket_fd)) < 0)
2583 return copy;
2584
2585 unit_serialize_item_format(u, f, "socket-fd", "%i", copy);
2586 }
2587
2588 if (s->main_exec_status.pid > 0) {
2589 unit_serialize_item_format(u, f, "main-exec-status-pid", "%lu", (unsigned long) s->main_exec_status.pid);
2590 dual_timestamp_serialize(f, "main-exec-status-start", &s->main_exec_status.start_timestamp);
2591 dual_timestamp_serialize(f, "main-exec-status-exit", &s->main_exec_status.exit_timestamp);
2592
2593 if (dual_timestamp_is_set(&s->main_exec_status.exit_timestamp)) {
2594 unit_serialize_item_format(u, f, "main-exec-status-code", "%i", s->main_exec_status.code);
2595 unit_serialize_item_format(u, f, "main-exec-status-status", "%i", s->main_exec_status.status);
2596 }
2597 }
2598 if (dual_timestamp_is_set(&s->watchdog_timestamp))
2599 dual_timestamp_serialize(f, "watchdog-timestamp", &s->watchdog_timestamp);
2600
2601 return 0;
2602 }
2603
2604 static int service_deserialize_item(Unit *u, const char *key, const char *value, FDSet *fds) {
2605 Service *s = SERVICE(u);
2606
2607 assert(u);
2608 assert(key);
2609 assert(value);
2610 assert(fds);
2611
2612 if (streq(key, "state")) {
2613 ServiceState state;
2614
2615 if ((state = service_state_from_string(value)) < 0)
2616 log_debug("Failed to parse state value %s", value);
2617 else
2618 s->deserialized_state = state;
2619 } else if (streq(key, "result")) {
2620 ServiceResult f;
2621
2622 f = service_result_from_string(value);
2623 if (f < 0)
2624 log_debug("Failed to parse result value %s", value);
2625 else if (f != SERVICE_SUCCESS)
2626 s->result = f;
2627
2628 } else if (streq(key, "reload-result")) {
2629 ServiceResult f;
2630
2631 f = service_result_from_string(value);
2632 if (f < 0)
2633 log_debug("Failed to parse reload result value %s", value);
2634 else if (f != SERVICE_SUCCESS)
2635 s->reload_result = f;
2636
2637 } else if (streq(key, "control-pid")) {
2638 pid_t pid;
2639
2640 if (parse_pid(value, &pid) < 0)
2641 log_debug("Failed to parse control-pid value %s", value);
2642 else
2643 s->control_pid = pid;
2644 } else if (streq(key, "main-pid")) {
2645 pid_t pid;
2646
2647 if (parse_pid(value, &pid) < 0)
2648 log_debug("Failed to parse main-pid value %s", value);
2649 else
2650 service_set_main_pid(s, (pid_t) pid);
2651 } else if (streq(key, "main-pid-known")) {
2652 int b;
2653
2654 if ((b = parse_boolean(value)) < 0)
2655 log_debug("Failed to parse main-pid-known value %s", value);
2656 else
2657 s->main_pid_known = b;
2658 } else if (streq(key, "status-text")) {
2659 char *t;
2660
2661 if ((t = strdup(value))) {
2662 free(s->status_text);
2663 s->status_text = t;
2664 }
2665
2666 } else if (streq(key, "control-command")) {
2667 ServiceExecCommand id;
2668
2669 if ((id = service_exec_command_from_string(value)) < 0)
2670 log_debug("Failed to parse exec-command value %s", value);
2671 else {
2672 s->control_command_id = id;
2673 s->control_command = s->exec_command[id];
2674 }
2675 } else if (streq(key, "socket-fd")) {
2676 int fd;
2677
2678 if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd))
2679 log_debug("Failed to parse socket-fd value %s", value);
2680 else {
2681
2682 if (s->socket_fd >= 0)
2683 close_nointr_nofail(s->socket_fd);
2684 s->socket_fd = fdset_remove(fds, fd);
2685 }
2686 } else if (streq(key, "main-exec-status-pid")) {
2687 pid_t pid;
2688
2689 if (parse_pid(value, &pid) < 0)
2690 log_debug("Failed to parse main-exec-status-pid value %s", value);
2691 else
2692 s->main_exec_status.pid = pid;
2693 } else if (streq(key, "main-exec-status-code")) {
2694 int i;
2695
2696 if (safe_atoi(value, &i) < 0)
2697 log_debug("Failed to parse main-exec-status-code value %s", value);
2698 else
2699 s->main_exec_status.code = i;
2700 } else if (streq(key, "main-exec-status-status")) {
2701 int i;
2702
2703 if (safe_atoi(value, &i) < 0)
2704 log_debug("Failed to parse main-exec-status-status value %s", value);
2705 else
2706 s->main_exec_status.status = i;
2707 } else if (streq(key, "main-exec-status-start"))
2708 dual_timestamp_deserialize(value, &s->main_exec_status.start_timestamp);
2709 else if (streq(key, "main-exec-status-exit"))
2710 dual_timestamp_deserialize(value, &s->main_exec_status.exit_timestamp);
2711 else if (streq(key, "watchdog-timestamp"))
2712 dual_timestamp_deserialize(value, &s->watchdog_timestamp);
2713 else
2714 log_debug("Unknown serialization key '%s'", key);
2715
2716 return 0;
2717 }
2718
2719 static UnitActiveState service_active_state(Unit *u) {
2720 const UnitActiveState *table;
2721
2722 assert(u);
2723
2724 table = SERVICE(u)->type == SERVICE_IDLE ? state_translation_table_idle : state_translation_table;
2725
2726 return table[SERVICE(u)->state];
2727 }
2728
2729 static const char *service_sub_state_to_string(Unit *u) {
2730 assert(u);
2731
2732 return service_state_to_string(SERVICE(u)->state);
2733 }
2734
2735 static bool service_check_gc(Unit *u) {
2736 Service *s = SERVICE(u);
2737
2738 assert(s);
2739
2740 /* Never clean up services that still have a process around,
2741 * even if the service is formally dead. */
2742 if (cgroup_good(s) > 0 ||
2743 main_pid_good(s) > 0 ||
2744 control_pid_good(s) > 0)
2745 return true;
2746
2747 #ifdef HAVE_SYSV_COMPAT
2748 if (s->is_sysv)
2749 return true;
2750 #endif
2751
2752 return false;
2753 }
2754
2755 static bool service_check_snapshot(Unit *u) {
2756 Service *s = SERVICE(u);
2757
2758 assert(s);
2759
2760 return !s->got_socket_fd;
2761 }
2762
2763 static int service_retry_pid_file(Service *s) {
2764 int r;
2765
2766 assert(s->pid_file);
2767 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2768
2769 r = service_load_pid_file(s, false);
2770 if (r < 0)
2771 return r;
2772
2773 service_unwatch_pid_file(s);
2774
2775 service_enter_running(s, SERVICE_SUCCESS);
2776 return 0;
2777 }
2778
2779 static int service_watch_pid_file(Service *s) {
2780 int r;
2781
2782 log_debug("Setting watch for %s's PID file %s", UNIT(s)->id, s->pid_file_pathspec->path);
2783 r = path_spec_watch(s->pid_file_pathspec, UNIT(s));
2784 if (r < 0)
2785 goto fail;
2786
2787 /* the pidfile might have appeared just before we set the watch */
2788 service_retry_pid_file(s);
2789
2790 return 0;
2791 fail:
2792 log_error("Failed to set a watch for %s's PID file %s: %s",
2793 UNIT(s)->id, s->pid_file_pathspec->path, strerror(-r));
2794 service_unwatch_pid_file(s);
2795 return r;
2796 }
2797
2798 static int service_demand_pid_file(Service *s) {
2799 PathSpec *ps;
2800
2801 assert(s->pid_file);
2802 assert(!s->pid_file_pathspec);
2803
2804 ps = new0(PathSpec, 1);
2805 if (!ps)
2806 return -ENOMEM;
2807
2808 ps->path = strdup(s->pid_file);
2809 if (!ps->path) {
2810 free(ps);
2811 return -ENOMEM;
2812 }
2813
2814 path_kill_slashes(ps->path);
2815
2816 /* PATH_CHANGED would not be enough. There are daemons (sendmail) that
2817 * keep their PID file open all the time. */
2818 ps->type = PATH_MODIFIED;
2819 ps->inotify_fd = -1;
2820
2821 s->pid_file_pathspec = ps;
2822
2823 return service_watch_pid_file(s);
2824 }
2825
2826 static void service_fd_event(Unit *u, int fd, uint32_t events, Watch *w) {
2827 Service *s = SERVICE(u);
2828
2829 assert(s);
2830 assert(fd >= 0);
2831 assert(s->state == SERVICE_START || s->state == SERVICE_START_POST);
2832 assert(s->pid_file_pathspec);
2833 assert(path_spec_owns_inotify_fd(s->pid_file_pathspec, fd));
2834
2835 log_debug("inotify event for %s", u->id);
2836
2837 if (path_spec_fd_event(s->pid_file_pathspec, events) < 0)
2838 goto fail;
2839
2840 if (service_retry_pid_file(s) == 0)
2841 return;
2842
2843 if (service_watch_pid_file(s) < 0)
2844 goto fail;
2845
2846 return;
2847 fail:
2848 service_unwatch_pid_file(s);
2849 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_RESOURCES);
2850 }
2851
2852 static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
2853 Service *s = SERVICE(u);
2854 ServiceResult f;
2855
2856 assert(s);
2857 assert(pid >= 0);
2858
2859 if (UNIT(s)->fragment_path ? is_clean_exit(code, status) : is_clean_exit_lsb(code, status))
2860 f = SERVICE_SUCCESS;
2861 else if (code == CLD_EXITED)
2862 f = SERVICE_FAILURE_EXIT_CODE;
2863 else if (code == CLD_KILLED)
2864 f = SERVICE_FAILURE_SIGNAL;
2865 else if (code == CLD_DUMPED)
2866 f = SERVICE_FAILURE_CORE_DUMP;
2867 else
2868 assert_not_reached("Unknown code");
2869
2870 if (s->main_pid == pid) {
2871 /* Forking services may occasionally move to a new PID.
2872 * As long as they update the PID file before exiting the old
2873 * PID, they're fine. */
2874 if (service_load_pid_file(s, false) == 0)
2875 return;
2876
2877 s->main_pid = 0;
2878 exec_status_exit(&s->main_exec_status, &s->exec_context, pid, code, status);
2879
2880 /* If this is not a forking service than the main
2881 * process got started and hence we copy the exit
2882 * status so that it is recorded both as main and as
2883 * control process exit status */
2884 if (s->main_command) {
2885 s->main_command->exec_status = s->main_exec_status;
2886
2887 if (s->main_command->ignore)
2888 f = SERVICE_SUCCESS;
2889 }
2890
2891 log_full(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2892 "%s: main process exited, code=%s, status=%i", u->id, sigchld_code_to_string(code), status);
2893
2894 if (f != SERVICE_SUCCESS)
2895 s->result = f;
2896
2897 if (s->main_command &&
2898 s->main_command->command_next &&
2899 f == SERVICE_SUCCESS) {
2900
2901 /* There is another command to *
2902 * execute, so let's do that. */
2903
2904 log_debug("%s running next main command for state %s", u->id, service_state_to_string(s->state));
2905 service_run_next_main(s);
2906
2907 } else {
2908
2909 /* The service exited, so the service is officially
2910 * gone. */
2911 s->main_command = NULL;
2912
2913 switch (s->state) {
2914
2915 case SERVICE_START_POST:
2916 case SERVICE_RELOAD:
2917 case SERVICE_STOP:
2918 /* Need to wait until the operation is
2919 * done */
2920 break;
2921
2922 case SERVICE_START:
2923 if (s->type == SERVICE_ONESHOT) {
2924 /* This was our main goal, so let's go on */
2925 if (f == SERVICE_SUCCESS)
2926 service_enter_start_post(s);
2927 else
2928 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
2929 break;
2930 } else {
2931 assert(s->type == SERVICE_DBUS || s->type == SERVICE_NOTIFY);
2932
2933 /* Fall through */
2934 }
2935
2936 case SERVICE_RUNNING:
2937 service_enter_running(s, f);
2938 break;
2939
2940 case SERVICE_STOP_SIGTERM:
2941 case SERVICE_STOP_SIGKILL:
2942
2943 if (!control_pid_good(s))
2944 service_enter_stop_post(s, f);
2945
2946 /* If there is still a control process, wait for that first */
2947 break;
2948
2949 default:
2950 assert_not_reached("Uh, main process died at wrong time.");
2951 }
2952 }
2953
2954 } else if (s->control_pid == pid) {
2955
2956 s->control_pid = 0;
2957
2958 if (s->control_command) {
2959 exec_status_exit(&s->control_command->exec_status, &s->exec_context, pid, code, status);
2960
2961 if (s->control_command->ignore)
2962 f = SERVICE_SUCCESS;
2963 }
2964
2965 log_full(f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
2966 "%s: control process exited, code=%s status=%i", u->id, sigchld_code_to_string(code), status);
2967
2968 if (f != SERVICE_SUCCESS)
2969 s->result = f;
2970
2971 /* Immediately get rid of the cgroup, so that the
2972 * kernel doesn't delay the cgroup empty messages for
2973 * the service cgroup any longer than necessary */
2974 cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, SIGKILL, true, true, NULL, "control");
2975
2976 if (s->control_command &&
2977 s->control_command->command_next &&
2978 f == SERVICE_SUCCESS) {
2979
2980 /* There is another command to *
2981 * execute, so let's do that. */
2982
2983 log_debug("%s running next control command for state %s", u->id, service_state_to_string(s->state));
2984 service_run_next_control(s);
2985
2986 } else {
2987 /* No further commands for this step, so let's
2988 * figure out what to do next */
2989
2990 s->control_command = NULL;
2991 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
2992
2993 log_debug("%s got final SIGCHLD for state %s", u->id, service_state_to_string(s->state));
2994
2995 switch (s->state) {
2996
2997 case SERVICE_START_PRE:
2998 if (f == SERVICE_SUCCESS)
2999 service_enter_start(s);
3000 else
3001 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3002 break;
3003
3004 case SERVICE_START:
3005 assert(s->type == SERVICE_FORKING);
3006
3007 if (f != SERVICE_SUCCESS) {
3008 service_enter_signal(s, SERVICE_FINAL_SIGTERM, f);
3009 break;
3010 }
3011
3012 if (s->pid_file) {
3013 bool has_start_post;
3014 int r;
3015
3016 /* Let's try to load the pid file here if we can.
3017 * The PID file might actually be created by a START_POST
3018 * script. In that case don't worry if the loading fails. */
3019
3020 has_start_post = !!s->exec_command[SERVICE_EXEC_START_POST];
3021 r = service_load_pid_file(s, !has_start_post);
3022 if (!has_start_post && r < 0) {
3023 r = service_demand_pid_file(s);
3024 if (r < 0 || !cgroup_good(s))
3025 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3026 break;
3027 }
3028 } else
3029 service_search_main_pid(s);
3030
3031 service_enter_start_post(s);
3032 break;
3033
3034 case SERVICE_START_POST:
3035 if (f != SERVICE_SUCCESS) {
3036 service_enter_stop(s, f);
3037 break;
3038 }
3039
3040 if (s->pid_file) {
3041 int r;
3042
3043 r = service_load_pid_file(s, true);
3044 if (r < 0) {
3045 r = service_demand_pid_file(s);
3046 if (r < 0 || !cgroup_good(s))
3047 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
3048 break;
3049 }
3050 } else
3051 service_search_main_pid(s);
3052
3053 service_enter_running(s, SERVICE_SUCCESS);
3054 break;
3055
3056 case SERVICE_RELOAD:
3057 if (f == SERVICE_SUCCESS) {
3058 service_load_pid_file(s, true);
3059 service_search_main_pid(s);
3060 }
3061
3062 s->reload_result = f;
3063 service_enter_running(s, SERVICE_SUCCESS);
3064 break;
3065
3066 case SERVICE_STOP:
3067 service_enter_signal(s, SERVICE_STOP_SIGTERM, f);
3068 break;
3069
3070 case SERVICE_STOP_SIGTERM:
3071 case SERVICE_STOP_SIGKILL:
3072 if (main_pid_good(s) <= 0)
3073 service_enter_stop_post(s, f);
3074
3075 /* If there is still a service
3076 * process around, wait until
3077 * that one quit, too */
3078 break;
3079
3080 case SERVICE_STOP_POST:
3081 case SERVICE_FINAL_SIGTERM:
3082 case SERVICE_FINAL_SIGKILL:
3083 service_enter_dead(s, f, true);
3084 break;
3085
3086 default:
3087 assert_not_reached("Uh, control process died at wrong time.");
3088 }
3089 }
3090 }
3091
3092 /* Notify clients about changed exit status */
3093 unit_add_to_dbus_queue(u);
3094 }
3095
3096 static void service_timer_event(Unit *u, uint64_t elapsed, Watch* w) {
3097 Service *s = SERVICE(u);
3098
3099 assert(s);
3100 assert(elapsed == 1);
3101
3102 if (w == &s->watchdog_watch) {
3103 service_handle_watchdog(s);
3104 return;
3105 }
3106
3107 assert(w == &s->timer_watch);
3108
3109 switch (s->state) {
3110
3111 case SERVICE_START_PRE:
3112 case SERVICE_START:
3113 log_warning("%s operation timed out. Terminating.", u->id);
3114 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3115 break;
3116
3117 case SERVICE_START_POST:
3118 log_warning("%s operation timed out. Stopping.", u->id);
3119 service_enter_stop(s, SERVICE_FAILURE_TIMEOUT);
3120 break;
3121
3122 case SERVICE_RELOAD:
3123 log_warning("%s operation timed out. Stopping.", u->id);
3124 s->reload_result = SERVICE_FAILURE_TIMEOUT;
3125 service_enter_running(s, SERVICE_SUCCESS);
3126 break;
3127
3128 case SERVICE_STOP:
3129 log_warning("%s stopping timed out. Terminating.", u->id);
3130 service_enter_signal(s, SERVICE_STOP_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3131 break;
3132
3133 case SERVICE_STOP_SIGTERM:
3134 if (s->exec_context.send_sigkill) {
3135 log_warning("%s stopping timed out. Killing.", u->id);
3136 service_enter_signal(s, SERVICE_STOP_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3137 } else {
3138 log_warning("%s stopping timed out. Skipping SIGKILL.", u->id);
3139 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3140 }
3141
3142 break;
3143
3144 case SERVICE_STOP_SIGKILL:
3145 /* Uh, we sent a SIGKILL and it is still not gone?
3146 * Must be something we cannot kill, so let's just be
3147 * weirded out and continue */
3148
3149 log_warning("%s still around after SIGKILL. Ignoring.", u->id);
3150 service_enter_stop_post(s, SERVICE_FAILURE_TIMEOUT);
3151 break;
3152
3153 case SERVICE_STOP_POST:
3154 log_warning("%s stopping timed out (2). Terminating.", u->id);
3155 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_TIMEOUT);
3156 break;
3157
3158 case SERVICE_FINAL_SIGTERM:
3159 if (s->exec_context.send_sigkill) {
3160 log_warning("%s stopping timed out (2). Killing.", u->id);
3161 service_enter_signal(s, SERVICE_FINAL_SIGKILL, SERVICE_FAILURE_TIMEOUT);
3162 } else {
3163 log_warning("%s stopping timed out (2). Skipping SIGKILL. Entering failed mode.", u->id);
3164 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, false);
3165 }
3166
3167 break;
3168
3169 case SERVICE_FINAL_SIGKILL:
3170 log_warning("%s still around after SIGKILL (2). Entering failed mode.", u->id);
3171 service_enter_dead(s, SERVICE_FAILURE_TIMEOUT, true);
3172 break;
3173
3174 case SERVICE_AUTO_RESTART:
3175 log_info("%s holdoff time over, scheduling restart.", u->id);
3176 service_enter_restart(s);
3177 break;
3178
3179 default:
3180 assert_not_reached("Timeout at wrong time.");
3181 }
3182 }
3183
3184 static void service_cgroup_notify_event(Unit *u) {
3185 Service *s = SERVICE(u);
3186
3187 assert(u);
3188
3189 log_debug("%s: cgroup is empty", u->id);
3190
3191 switch (s->state) {
3192
3193 /* Waiting for SIGCHLD is usually more interesting,
3194 * because it includes return codes/signals. Which is
3195 * why we ignore the cgroup events for most cases,
3196 * except when we don't know pid which to expect the
3197 * SIGCHLD for. */
3198
3199 case SERVICE_START:
3200 case SERVICE_START_POST:
3201 /* If we were hoping for the daemon to write its PID file,
3202 * we can give up now. */
3203 if (s->pid_file_pathspec) {
3204 log_warning("%s never wrote its PID file. Failing.", UNIT(s)->id);
3205 service_unwatch_pid_file(s);
3206 if (s->state == SERVICE_START)
3207 service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
3208 else
3209 service_enter_stop(s, SERVICE_FAILURE_RESOURCES);
3210 }
3211 break;
3212
3213 case SERVICE_RUNNING:
3214 /* service_enter_running() will figure out what to do */
3215 service_enter_running(s, SERVICE_SUCCESS);
3216 break;
3217
3218 case SERVICE_STOP_SIGTERM:
3219 case SERVICE_STOP_SIGKILL:
3220
3221 if (main_pid_good(s) <= 0 && !control_pid_good(s))
3222 service_enter_stop_post(s, SERVICE_SUCCESS);
3223
3224 break;
3225
3226 case SERVICE_FINAL_SIGTERM:
3227 case SERVICE_FINAL_SIGKILL:
3228 if (main_pid_good(s) <= 0 && !control_pid_good(s))
3229 service_enter_dead(s, SERVICE_SUCCESS, SERVICE_SUCCESS);
3230
3231 break;
3232
3233 default:
3234 ;
3235 }
3236 }
3237
3238 static void service_notify_message(Unit *u, pid_t pid, char **tags) {
3239 Service *s = SERVICE(u);
3240 const char *e;
3241
3242 assert(u);
3243
3244 if (s->notify_access == NOTIFY_NONE) {
3245 log_warning("%s: Got notification message from PID %lu, but reception is disabled.",
3246 u->id, (unsigned long) pid);
3247 return;
3248 }
3249
3250 if (s->notify_access == NOTIFY_MAIN && pid != s->main_pid) {
3251 log_warning("%s: Got notification message from PID %lu, but reception only permitted for PID %lu",
3252 u->id, (unsigned long) pid, (unsigned long) s->main_pid);
3253 return;
3254 }
3255
3256 log_debug("%s: Got message", u->id);
3257
3258 /* Interpret MAINPID= */
3259 if ((e = strv_find_prefix(tags, "MAINPID=")) &&
3260 (s->state == SERVICE_START ||
3261 s->state == SERVICE_START_POST ||
3262 s->state == SERVICE_RUNNING ||
3263 s->state == SERVICE_RELOAD)) {
3264
3265 if (parse_pid(e + 8, &pid) < 0)
3266 log_warning("Failed to parse notification message %s", e);
3267 else {
3268 log_debug("%s: got %s", u->id, e);
3269 service_set_main_pid(s, pid);
3270 }
3271 }
3272
3273 /* Interpret READY= */
3274 if (s->type == SERVICE_NOTIFY &&
3275 s->state == SERVICE_START &&
3276 strv_find(tags, "READY=1")) {
3277 log_debug("%s: got READY=1", u->id);
3278
3279 service_enter_start_post(s);
3280 }
3281
3282 /* Interpret STATUS= */
3283 e = strv_find_prefix(tags, "STATUS=");
3284 if (e) {
3285 char *t;
3286
3287 if (e[7]) {
3288
3289 if (!utf8_is_valid(e+7)) {
3290 log_warning("Status message in notification is not UTF-8 clean.");
3291 return;
3292 }
3293
3294 t = strdup(e+7);
3295 if (!t) {
3296 log_error("Failed to allocate string.");
3297 return;
3298 }
3299
3300 log_debug("%s: got %s", u->id, e);
3301
3302 free(s->status_text);
3303 s->status_text = t;
3304 } else {
3305 free(s->status_text);
3306 s->status_text = NULL;
3307 }
3308
3309 }
3310 if (strv_find(tags, "WATCHDOG=1")) {
3311 log_debug("%s: got WATCHDOG=1", u->id);
3312 service_reset_watchdog(s);
3313 }
3314
3315 /* Notify clients about changed status or main pid */
3316 unit_add_to_dbus_queue(u);
3317 }
3318
3319 #ifdef HAVE_SYSV_COMPAT
3320
3321 #ifdef TARGET_SUSE
3322 static void sysv_facility_in_insserv_conf(Manager *mgr) {
3323 FILE *f=NULL;
3324 int r;
3325
3326 if (!(f = fopen("/etc/insserv.conf", "re"))) {
3327 r = errno == ENOENT ? 0 : -errno;
3328 goto finish;
3329 }
3330
3331 while (!feof(f)) {
3332 char l[LINE_MAX], *t;
3333 char **parsed = NULL;
3334
3335 if (!fgets(l, sizeof(l), f)) {
3336 if (feof(f))
3337 break;
3338
3339 r = -errno;
3340 log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r));
3341 goto finish;
3342 }
3343
3344 t = strstrip(l);
3345 if (*t != '$' && *t != '<')
3346 continue;
3347
3348 parsed = strv_split(t,WHITESPACE);
3349 /* we ignore <interactive>, not used, equivalent to X-Interactive */
3350 if (parsed && !startswith_no_case (parsed[0], "<interactive>")) {
3351 char *facility;
3352 Unit *u;
3353 if (sysv_translate_facility(parsed[0], NULL, &facility) < 0)
3354 continue;
3355 if ((u = manager_get_unit(mgr, facility)) && (u->type == UNIT_TARGET)) {
3356 UnitDependency e;
3357 char *dep = NULL, *name, **j;
3358
3359 STRV_FOREACH (j, parsed+1) {
3360 if (*j[0]=='+') {
3361 e = UNIT_WANTS;
3362 name = *j+1;
3363 }
3364 else {
3365 e = UNIT_REQUIRES;
3366 name = *j;
3367 }
3368 if (sysv_translate_facility(name, NULL, &dep) < 0)
3369 continue;
3370
3371 r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true);
3372 free(dep);
3373 }
3374 }
3375 free(facility);
3376 }
3377 strv_free(parsed);
3378 }
3379 finish:
3380 if (f)
3381 fclose(f);
3382
3383 }
3384 #endif
3385
3386 static int service_enumerate(Manager *m) {
3387 char **p;
3388 unsigned i;
3389 DIR *d = NULL;
3390 char *path = NULL, *fpath = NULL, *name = NULL;
3391 Set *runlevel_services[ELEMENTSOF(rcnd_table)], *shutdown_services = NULL;
3392 Unit *service;
3393 Iterator j;
3394 int r;
3395
3396 assert(m);
3397
3398 if (m->running_as != MANAGER_SYSTEM)
3399 return 0;
3400
3401 zero(runlevel_services);
3402
3403 STRV_FOREACH(p, m->lookup_paths.sysvrcnd_path)
3404 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
3405 struct dirent *de;
3406
3407 free(path);
3408 path = join(*p, "/", rcnd_table[i].path, NULL);
3409 if (!path) {
3410 r = -ENOMEM;
3411 goto finish;
3412 }
3413
3414 if (d)
3415 closedir(d);
3416
3417 if (!(d = opendir(path))) {
3418 if (errno != ENOENT)
3419 log_warning("opendir() failed on %s: %s", path, strerror(errno));
3420
3421 continue;
3422 }
3423
3424 while ((de = readdir(d))) {
3425 int a, b;
3426
3427 if (ignore_file(de->d_name))
3428 continue;
3429
3430 if (de->d_name[0] != 'S' && de->d_name[0] != 'K')
3431 continue;
3432
3433 if (strlen(de->d_name) < 4)
3434 continue;
3435
3436 a = undecchar(de->d_name[1]);
3437 b = undecchar(de->d_name[2]);
3438
3439 if (a < 0 || b < 0)
3440 continue;
3441
3442 free(fpath);
3443 fpath = join(path, "/", de->d_name, NULL);
3444 if (!fpath) {
3445 r = -ENOMEM;
3446 goto finish;
3447 }
3448
3449 if (access(fpath, X_OK) < 0) {
3450
3451 if (errno != ENOENT)
3452 log_warning("access() failed on %s: %s", fpath, strerror(errno));
3453
3454 continue;
3455 }
3456
3457 free(name);
3458 if (!(name = sysv_translate_name(de->d_name + 3))) {
3459 r = -ENOMEM;
3460 goto finish;
3461 }
3462
3463 if ((r = manager_load_unit_prepare(m, name, NULL, NULL, &service)) < 0) {
3464 log_warning("Failed to prepare unit %s: %s", name, strerror(-r));
3465 continue;
3466 }
3467
3468 if (de->d_name[0] == 'S') {
3469
3470 if (rcnd_table[i].type == RUNLEVEL_UP || rcnd_table[i].type == RUNLEVEL_SYSINIT) {
3471 SERVICE(service)->sysv_start_priority_from_rcnd =
3472 MAX(a*10 + b, SERVICE(service)->sysv_start_priority_from_rcnd);
3473
3474 SERVICE(service)->sysv_enabled = true;
3475 }
3476
3477 if ((r = set_ensure_allocated(&runlevel_services[i], trivial_hash_func, trivial_compare_func)) < 0)
3478 goto finish;
3479
3480 if ((r = set_put(runlevel_services[i], service)) < 0)
3481 goto finish;
3482
3483 } else if (de->d_name[0] == 'K' &&
3484 (rcnd_table[i].type == RUNLEVEL_DOWN ||
3485 rcnd_table[i].type == RUNLEVEL_SYSINIT)) {
3486
3487 if ((r = set_ensure_allocated(&shutdown_services, trivial_hash_func, trivial_compare_func)) < 0)
3488 goto finish;
3489
3490 if ((r = set_put(shutdown_services, service)) < 0)
3491 goto finish;
3492 }
3493 }
3494 }
3495
3496 /* Now we loaded all stubs and are aware of the lowest
3497 start-up priority for all services, not let's actually load
3498 the services, this will also tell us which services are
3499 actually native now */
3500 manager_dispatch_load_queue(m);
3501
3502 /* If this is a native service, rely on native ways to pull in
3503 * a service, don't pull it in via sysv rcN.d links. */
3504 for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
3505 SET_FOREACH(service, runlevel_services[i], j) {
3506 service = unit_follow_merge(service);
3507
3508 if (service->fragment_path)
3509 continue;
3510
3511 if ((r = unit_add_two_dependencies_by_name_inverse(service, UNIT_AFTER, UNIT_WANTS, rcnd_table[i].target, NULL, true)) < 0)
3512 goto finish;
3513 }
3514
3515 /* We honour K links only for halt/reboot. For the normal
3516 * runlevels we assume the stop jobs will be implicitly added
3517 * by the core logic. Also, we don't really distinguish here
3518 * between the runlevels 0 and 6 and just add them to the
3519 * special shutdown target. On SUSE the boot.d/ runlevel is
3520 * also used for shutdown, so we add links for that too to the
3521 * shutdown target.*/
3522 SET_FOREACH(service, shutdown_services, j) {
3523 service = unit_follow_merge(service);
3524
3525 if (service->fragment_path)
3526 continue;
3527
3528 if ((r = unit_add_two_dependencies_by_name(service, UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true)) < 0)
3529 goto finish;
3530 }
3531
3532 r = 0;
3533
3534 #ifdef TARGET_SUSE
3535 sysv_facility_in_insserv_conf (m);
3536 #endif
3537
3538 finish:
3539 free(path);
3540 free(fpath);
3541 free(name);
3542
3543 for (i = 0; i < ELEMENTSOF(rcnd_table); i++)
3544 set_free(runlevel_services[i]);
3545 set_free(shutdown_services);
3546
3547 if (d)
3548 closedir(d);
3549
3550 return r;
3551 }
3552 #endif
3553
3554 static void service_bus_name_owner_change(
3555 Unit *u,
3556 const char *name,
3557 const char *old_owner,
3558 const char *new_owner) {
3559
3560 Service *s = SERVICE(u);
3561
3562 assert(s);
3563 assert(name);
3564
3565 assert(streq(s->bus_name, name));
3566 assert(old_owner || new_owner);
3567
3568 if (old_owner && new_owner)
3569 log_debug("%s's D-Bus name %s changed owner from %s to %s", u->id, name, old_owner, new_owner);
3570 else if (old_owner)
3571 log_debug("%s's D-Bus name %s no longer registered by %s", u->id, name, old_owner);
3572 else
3573 log_debug("%s's D-Bus name %s now registered by %s", u->id, name, new_owner);
3574
3575 s->bus_name_good = !!new_owner;
3576
3577 if (s->type == SERVICE_DBUS) {
3578
3579 /* service_enter_running() will figure out what to
3580 * do */
3581 if (s->state == SERVICE_RUNNING)
3582 service_enter_running(s, SERVICE_SUCCESS);
3583 else if (s->state == SERVICE_START && new_owner)
3584 service_enter_start_post(s);
3585
3586 } else if (new_owner &&
3587 s->main_pid <= 0 &&
3588 (s->state == SERVICE_START ||
3589 s->state == SERVICE_START_POST ||
3590 s->state == SERVICE_RUNNING ||
3591 s->state == SERVICE_RELOAD)) {
3592
3593 /* Try to acquire PID from bus service */
3594 log_debug("Trying to acquire PID from D-Bus name...");
3595
3596 bus_query_pid(u->manager, name);
3597 }
3598 }
3599
3600 static void service_bus_query_pid_done(
3601 Unit *u,
3602 const char *name,
3603 pid_t pid) {
3604
3605 Service *s = SERVICE(u);
3606
3607 assert(s);
3608 assert(name);
3609
3610 log_debug("%s's D-Bus name %s is now owned by process %u", u->id, name, (unsigned) pid);
3611
3612 if (s->main_pid <= 0 &&
3613 (s->state == SERVICE_START ||
3614 s->state == SERVICE_START_POST ||
3615 s->state == SERVICE_RUNNING ||
3616 s->state == SERVICE_RELOAD))
3617 service_set_main_pid(s, pid);
3618 }
3619
3620 int service_set_socket_fd(Service *s, int fd, Socket *sock) {
3621
3622 assert(s);
3623 assert(fd >= 0);
3624
3625 /* This is called by the socket code when instantiating a new
3626 * service for a stream socket and the socket needs to be
3627 * configured. */
3628
3629 if (UNIT(s)->load_state != UNIT_LOADED)
3630 return -EINVAL;
3631
3632 if (s->socket_fd >= 0)
3633 return -EBUSY;
3634
3635 if (s->state != SERVICE_DEAD)
3636 return -EAGAIN;
3637
3638 s->socket_fd = fd;
3639 s->got_socket_fd = true;
3640
3641 unit_ref_set(&s->accept_socket, UNIT(sock));
3642
3643 return unit_add_two_dependencies(UNIT(sock), UNIT_BEFORE, UNIT_TRIGGERS, UNIT(s), false);
3644 }
3645
3646 static void service_reset_failed(Unit *u) {
3647 Service *s = SERVICE(u);
3648
3649 assert(s);
3650
3651 if (s->state == SERVICE_FAILED)
3652 service_set_state(s, SERVICE_DEAD);
3653
3654 s->result = SERVICE_SUCCESS;
3655 s->reload_result = SERVICE_SUCCESS;
3656 }
3657
3658 static int service_kill(Unit *u, KillWho who, KillMode mode, int signo, DBusError *error) {
3659 Service *s = SERVICE(u);
3660 int r = 0;
3661 Set *pid_set = NULL;
3662
3663 assert(s);
3664
3665 if (s->main_pid <= 0 && who == KILL_MAIN) {
3666 dbus_set_error(error, BUS_ERROR_NO_SUCH_PROCESS, "No main process to kill");
3667 return -ESRCH;
3668 }
3669
3670 if (s->control_pid <= 0 && who == KILL_CONTROL) {
3671 dbus_set_error(error, BUS_ERROR_NO_SUCH_PROCESS, "No control process to kill");
3672 return -ESRCH;
3673 }
3674
3675 if (who == KILL_CONTROL || who == KILL_ALL)
3676 if (s->control_pid > 0)
3677 if (kill(s->control_pid, signo) < 0)
3678 r = -errno;
3679
3680 if (who == KILL_MAIN || who == KILL_ALL)
3681 if (s->main_pid > 0)
3682 if (kill(s->main_pid, signo) < 0)
3683 r = -errno;
3684
3685 if (who == KILL_ALL && mode == KILL_CONTROL_GROUP) {
3686 int q;
3687
3688 if (!(pid_set = set_new(trivial_hash_func, trivial_compare_func)))
3689 return -ENOMEM;
3690
3691 /* Exclude the control/main pid from being killed via the cgroup */
3692 if (s->control_pid > 0)
3693 if ((q = set_put(pid_set, LONG_TO_PTR(s->control_pid))) < 0) {
3694 r = q;
3695 goto finish;
3696 }
3697
3698 if (s->main_pid > 0)
3699 if ((q = set_put(pid_set, LONG_TO_PTR(s->main_pid))) < 0) {
3700 r = q;
3701 goto finish;
3702 }
3703 q = cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, signo, false, false, pid_set, NULL);
3704 if (q < 0)
3705 if (q != -EAGAIN && q != -ESRCH && q != -ENOENT)
3706 r = q;
3707 }
3708
3709 finish:
3710 if (pid_set)
3711 set_free(pid_set);
3712
3713 return r;
3714 }
3715
3716 static const char* const service_state_table[_SERVICE_STATE_MAX] = {
3717 [SERVICE_DEAD] = "dead",
3718 [SERVICE_START_PRE] = "start-pre",
3719 [SERVICE_START] = "start",
3720 [SERVICE_START_POST] = "start-post",
3721 [SERVICE_RUNNING] = "running",
3722 [SERVICE_EXITED] = "exited",
3723 [SERVICE_RELOAD] = "reload",
3724 [SERVICE_STOP] = "stop",
3725 [SERVICE_STOP_SIGTERM] = "stop-sigterm",
3726 [SERVICE_STOP_SIGKILL] = "stop-sigkill",
3727 [SERVICE_STOP_POST] = "stop-post",
3728 [SERVICE_FINAL_SIGTERM] = "final-sigterm",
3729 [SERVICE_FINAL_SIGKILL] = "final-sigkill",
3730 [SERVICE_FAILED] = "failed",
3731 [SERVICE_AUTO_RESTART] = "auto-restart",
3732 };
3733
3734 DEFINE_STRING_TABLE_LOOKUP(service_state, ServiceState);
3735
3736 static const char* const service_restart_table[_SERVICE_RESTART_MAX] = {
3737 [SERVICE_RESTART_NO] = "no",
3738 [SERVICE_RESTART_ON_SUCCESS] = "on-success",
3739 [SERVICE_RESTART_ON_FAILURE] = "on-failure",
3740 [SERVICE_RESTART_ON_ABORT] = "on-abort",
3741 [SERVICE_RESTART_ALWAYS] = "always"
3742 };
3743
3744 DEFINE_STRING_TABLE_LOOKUP(service_restart, ServiceRestart);
3745
3746 static const char* const service_type_table[_SERVICE_TYPE_MAX] = {
3747 [SERVICE_SIMPLE] = "simple",
3748 [SERVICE_FORKING] = "forking",
3749 [SERVICE_ONESHOT] = "oneshot",
3750 [SERVICE_DBUS] = "dbus",
3751 [SERVICE_NOTIFY] = "notify",
3752 [SERVICE_IDLE] = "idle"
3753 };
3754
3755 DEFINE_STRING_TABLE_LOOKUP(service_type, ServiceType);
3756
3757 static const char* const service_exec_command_table[_SERVICE_EXEC_COMMAND_MAX] = {
3758 [SERVICE_EXEC_START_PRE] = "ExecStartPre",
3759 [SERVICE_EXEC_START] = "ExecStart",
3760 [SERVICE_EXEC_START_POST] = "ExecStartPost",
3761 [SERVICE_EXEC_RELOAD] = "ExecReload",
3762 [SERVICE_EXEC_STOP] = "ExecStop",
3763 [SERVICE_EXEC_STOP_POST] = "ExecStopPost",
3764 };
3765
3766 DEFINE_STRING_TABLE_LOOKUP(service_exec_command, ServiceExecCommand);
3767
3768 static const char* const notify_access_table[_NOTIFY_ACCESS_MAX] = {
3769 [NOTIFY_NONE] = "none",
3770 [NOTIFY_MAIN] = "main",
3771 [NOTIFY_ALL] = "all"
3772 };
3773
3774 DEFINE_STRING_TABLE_LOOKUP(notify_access, NotifyAccess);
3775
3776 static const char* const service_result_table[_SERVICE_RESULT_MAX] = {
3777 [SERVICE_SUCCESS] = "success",
3778 [SERVICE_FAILURE_RESOURCES] = "resources",
3779 [SERVICE_FAILURE_TIMEOUT] = "timeout",
3780 [SERVICE_FAILURE_EXIT_CODE] = "exit-code",
3781 [SERVICE_FAILURE_SIGNAL] = "signal",
3782 [SERVICE_FAILURE_CORE_DUMP] = "core-dump",
3783 [SERVICE_FAILURE_WATCHDOG] = "watchdog"
3784 };
3785
3786 DEFINE_STRING_TABLE_LOOKUP(service_result, ServiceResult);
3787
3788 static const char* const start_limit_action_table[_SERVICE_START_LIMIT_MAX] = {
3789 [SERVICE_START_LIMIT_NONE] = "none",
3790 [SERVICE_START_LIMIT_REBOOT] = "reboot",
3791 [SERVICE_START_LIMIT_REBOOT_FORCE] = "reboot-force",
3792 [SERVICE_START_LIMIT_REBOOT_IMMEDIATE] = "reboot-immediate"
3793 };
3794 DEFINE_STRING_TABLE_LOOKUP(start_limit_action, StartLimitAction);
3795
3796 const UnitVTable service_vtable = {
3797 .suffix = ".service",
3798 .object_size = sizeof(Service),
3799 .sections =
3800 "Unit\0"
3801 "Service\0"
3802 "Install\0",
3803
3804 .init = service_init,
3805 .done = service_done,
3806 .load = service_load,
3807
3808 .coldplug = service_coldplug,
3809
3810 .dump = service_dump,
3811
3812 .start = service_start,
3813 .stop = service_stop,
3814 .reload = service_reload,
3815
3816 .can_reload = service_can_reload,
3817
3818 .kill = service_kill,
3819
3820 .serialize = service_serialize,
3821 .deserialize_item = service_deserialize_item,
3822
3823 .active_state = service_active_state,
3824 .sub_state_to_string = service_sub_state_to_string,
3825
3826 .check_gc = service_check_gc,
3827 .check_snapshot = service_check_snapshot,
3828
3829 .sigchld_event = service_sigchld_event,
3830 .timer_event = service_timer_event,
3831 .fd_event = service_fd_event,
3832
3833 .reset_failed = service_reset_failed,
3834
3835 .cgroup_notify_empty = service_cgroup_notify_event,
3836 .notify_message = service_notify_message,
3837
3838 .bus_name_owner_change = service_bus_name_owner_change,
3839 .bus_query_pid_done = service_bus_query_pid_done,
3840
3841 .bus_interface = "org.freedesktop.systemd1.Service",
3842 .bus_message_handler = bus_service_message_handler,
3843 .bus_invalidating_properties = bus_service_invalidating_properties,
3844
3845 #ifdef HAVE_SYSV_COMPAT
3846 .enumerate = service_enumerate,
3847 #endif
3848 .status_message_formats = {
3849 .starting_stopping = {
3850 [0] = "Starting %s...",
3851 [1] = "Stopping %s...",
3852 },
3853 .finished_start_job = {
3854 [JOB_DONE] = "Started %s.",
3855 [JOB_FAILED] = "Failed to start %s.",
3856 [JOB_DEPENDENCY] = "Dependency failed for %s.",
3857 [JOB_TIMEOUT] = "Timed out starting %s.",
3858 },
3859 .finished_stop_job = {
3860 [JOB_DONE] = "Stopped %s.",
3861 [JOB_FAILED] = "Stopped (with error) %s.",
3862 [JOB_TIMEOUT] = "Timed out stopping %s.",
3863 },
3864 },
3865 };