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