chiark / gitweb /
unit: fix parsing of condition-result
[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                                                 /* NB: SysV targets
660                                                  * which are provided
661                                                  * by a service are
662                                                  * pulled in by the
663                                                  * services, as an
664                                                  * indication that the
665                                                  * generic service is
666                                                  * now available. This
667                                                  * is strictly
668                                                  * one-way. The
669                                                  * targets do NOT pull
670                                                  * in the SysV
671                                                  * services! */
672                                                 r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, UNIT_WANTS, m, NULL, true);
673
674                                         if (r < 0)
675                                                 log_error("[%s:%u] Failed to add LSB Provides name %s, ignoring: %s", path, line, m, strerror(-r));
676
677                                         free(m);
678                                 }
679
680                         } else if (startswith_no_case(t, "Required-Start:") ||
681                                    startswith_no_case(t, "Should-Start:") ||
682                                    startswith_no_case(t, "X-Start-Before:") ||
683                                    startswith_no_case(t, "X-Start-After:")) {
684                                 char *i, *w;
685                                 size_t z;
686
687                                 state = LSB;
688
689                                 FOREACH_WORD_QUOTED(w, z, strchr(t, ':')+1, i) {
690                                         char *n, *m;
691
692                                         if (!(n = strndup(w, z))) {
693                                                 r = -ENOMEM;
694                                                 goto finish;
695                                         }
696
697                                         r = sysv_translate_facility(n, file_name_from_path(path), &m);
698
699                                         if (r < 0) {
700                                                 log_error("[%s:%u] Failed to translate LSB dependency %s, ignoring: %s", path, line, n, strerror(-r));
701                                                 free(n);
702                                                 continue;
703                                         }
704
705                                         free(n);
706
707                                         if (r == 0)
708                                                 continue;
709
710                                         r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true);
711
712                                         if (r < 0)
713                                                 log_error("[%s:%u] Failed to add dependency on %s, ignoring: %s", path, line, m, strerror(-r));
714
715                                         free(m);
716                                 }
717                         } else if (startswith_no_case(t, "Default-Start:")) {
718                                 char *k, *d;
719
720                                 state = LSB;
721
722                                 k = delete_chars(t+14, WHITESPACE "-");
723
724                                 if (k[0] != 0) {
725                                         if (!(d = strdup(k))) {
726                                                 r = -ENOMEM;
727                                                 goto finish;
728                                         }
729
730                                         free(s->sysv_runlevels);
731                                         s->sysv_runlevels = d;
732                                 }
733
734                         } else if (startswith_no_case(t, "Description:")) {
735                                 char *d, *j;
736
737                                 state = LSB_DESCRIPTION;
738
739                                 if ((j = strstrip(t+12)) && *j) {
740                                         if (!(d = strdup(j))) {
741                                                 r = -ENOMEM;
742                                                 goto finish;
743                                         }
744                                 } else
745                                         d = NULL;
746
747                                 free(long_description);
748                                 long_description = d;
749
750                         } else if (startswith_no_case(t, "Short-Description:")) {
751                                 char *d, *j;
752
753                                 state = LSB;
754
755                                 if ((j = strstrip(t+18)) && *j) {
756                                         if (!(d = strdup(j))) {
757                                                 r = -ENOMEM;
758                                                 goto finish;
759                                         }
760                                 } else
761                                         d = NULL;
762
763                                 free(short_description);
764                                 short_description = d;
765
766                         } else if (startswith_no_case(t, "X-Interactive:")) {
767                                 int b;
768
769                                 if ((b = parse_boolean(strstrip(t+14))) < 0) {
770                                         log_warning("[%s:%u] Couldn't parse interactive flag. Ignoring.", path, line);
771                                         continue;
772                                 }
773
774                                 if (b)
775                                         s->exec_context.std_input = EXEC_INPUT_TTY;
776                                 else
777                                         s->exec_context.std_input = EXEC_INPUT_NULL;
778
779                         } else if (state == LSB_DESCRIPTION) {
780
781                                 if (startswith(l, "#\t") || startswith(l, "#  ")) {
782                                         char *j;
783
784                                         if ((j = strstrip(t)) && *j) {
785                                                 char *d = NULL;
786
787                                                 if (long_description)
788                                                         asprintf(&d, "%s %s", long_description, t);
789                                                 else
790                                                         d = strdup(j);
791
792                                                 if (!d) {
793                                                         r = -ENOMEM;
794                                                         goto finish;
795                                                 }
796
797                                                 free(long_description);
798                                                 long_description = d;
799                                         }
800
801                                 } else
802                                         state = LSB;
803                         }
804                 }
805         }
806
807         if ((r = sysv_exec_commands(s)) < 0)
808                 goto finish;
809
810         if (s->sysv_runlevels && !chars_intersect(RUNLEVELS_UP, s->sysv_runlevels)) {
811                 /* If there a runlevels configured for this service
812                  * but none of the standard ones, then we assume this
813                  * is some special kind of service (which might be
814                  * needed for early boot) and don't create any links
815                  * to it. */
816
817                 s->meta.default_dependencies = false;
818
819                 /* Don't timeout special services during boot (like fsck) */
820                 s->timeout_usec = 0;
821         } else
822                 s->timeout_usec = DEFAULT_SYSV_TIMEOUT_USEC;
823
824         /* Special setting for all SysV services */
825         s->type = SERVICE_FORKING;
826         s->remain_after_exit = true;
827         s->restart = SERVICE_RESTART_NO;
828         s->exec_context.std_output =
829                 (s->meta.manager->sysv_console || s->exec_context.std_input == EXEC_INPUT_TTY)
830                 ? EXEC_OUTPUT_TTY : s->meta.manager->default_std_output;
831         s->exec_context.kill_mode = KILL_PROCESS;
832
833         /* We use the long description only if
834          * no short description is set. */
835
836         if (short_description)
837                 description = short_description;
838         else if (chkconfig_description)
839                 description = chkconfig_description;
840         else if (long_description)
841                 description = long_description;
842         else
843                 description = NULL;
844
845         if (description) {
846                 char *d;
847
848                 if (!(d = strappend(s->sysv_has_lsb ? "LSB: " : "SYSV: ", description))) {
849                         r = -ENOMEM;
850                         goto finish;
851                 }
852
853                 u->meta.description = d;
854         }
855
856         u->meta.load_state = UNIT_LOADED;
857         r = 0;
858
859 finish:
860
861         if (f)
862                 fclose(f);
863
864         free(short_description);
865         free(long_description);
866         free(chkconfig_description);
867
868         return r;
869 }
870
871 static int service_load_sysv_name(Service *s, const char *name) {
872         char **p;
873
874         assert(s);
875         assert(name);
876
877         /* For SysV services we strip the boot.*, rc.* and *.sh
878          * prefixes/suffixes. */
879 #if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU)
880         if (endswith(name, ".sh.service"))
881                 return -ENOENT;
882 #endif
883
884 #ifdef TARGET_SUSE
885         if (startswith(name, "boot."))
886                 return -ENOENT;
887 #endif
888
889 #ifdef TARGET_FRUGALWARE
890         if (startswith(name, "rc."))
891                 return -ENOENT;
892 #endif
893
894         STRV_FOREACH(p, s->meta.manager->lookup_paths.sysvinit_path) {
895                 char *path;
896                 int r;
897
898                 if (asprintf(&path, "%s/%s", *p, name) < 0)
899                         return -ENOMEM;
900
901                 assert(endswith(path, ".service"));
902                 path[strlen(path)-8] = 0;
903
904                 r = service_load_sysv_path(s, path);
905
906 #if defined(TARGET_DEBIAN) || defined(TARGET_UBUNTU)
907                 if (r >= 0 && s->meta.load_state == UNIT_STUB) {
908                         /* Try Debian style *.sh source'able init scripts */
909                         strcat(path, ".sh");
910                         r = service_load_sysv_path(s, path);
911                 }
912 #endif
913                 free(path);
914
915 #ifdef TARGET_SUSE
916                 if (r >= 0 && s->meta.load_state == UNIT_STUB) {
917                         /* Try SUSE style boot.* init scripts */
918
919                         if (asprintf(&path, "%s/boot.%s", *p, name) < 0)
920                                 return -ENOMEM;
921
922                         /* Drop .service suffix */
923                         path[strlen(path)-8] = 0;
924                         r = service_load_sysv_path(s, path);
925                         free(path);
926                 }
927 #endif
928
929 #ifdef TARGET_FRUGALWARE
930                 if (r >= 0 && s->meta.load_state == UNIT_STUB) {
931                         /* Try Frugalware style rc.* init scripts */
932
933                         if (asprintf(&path, "%s/rc.%s", *p, name) < 0)
934                                 return -ENOMEM;
935
936                         /* Drop .service suffix */
937                         path[strlen(path)-8] = 0;
938                         r = service_load_sysv_path(s, path);
939                         free(path);
940                 }
941 #endif
942
943                 if (r < 0)
944                         return r;
945
946                 if ((s->meta.load_state != UNIT_STUB))
947                         break;
948         }
949
950         return 0;
951 }
952
953 static int service_load_sysv(Service *s) {
954         const char *t;
955         Iterator i;
956         int r;
957
958         assert(s);
959
960         /* Load service data from SysV init scripts, preferably with
961          * LSB headers ... */
962
963         if (strv_isempty(s->meta.manager->lookup_paths.sysvinit_path))
964                 return 0;
965
966         if ((t = s->meta.id))
967                 if ((r = service_load_sysv_name(s, t)) < 0)
968                         return r;
969
970         if (s->meta.load_state == UNIT_STUB)
971                 SET_FOREACH(t, s->meta.names, i) {
972                         if (t == s->meta.id)
973                                 continue;
974
975                         if ((r = service_load_sysv_name(s, t)) < 0)
976                                 return r;
977
978                         if (s->meta.load_state != UNIT_STUB)
979                                 break;
980                 }
981
982         return 0;
983 }
984 #endif
985
986 static int fsck_fix_order(Service *s) {
987         Meta *other;
988         int r;
989
990         assert(s);
991
992         if (s->fsck_passno <= 0)
993                 return 0;
994
995         /* For each pair of services where both have an fsck priority
996          * we order things based on it. */
997
998         LIST_FOREACH(units_per_type, other, s->meta.manager->units_per_type[UNIT_SERVICE]) {
999                 Service *t;
1000                 UnitDependency d;
1001
1002                 t = (Service*) other;
1003
1004                 if (s == t)
1005                         continue;
1006
1007                 if (t->meta.load_state != UNIT_LOADED)
1008                         continue;
1009
1010                 if (t->fsck_passno <= 0)
1011                         continue;
1012
1013                 if (t->fsck_passno < s->fsck_passno)
1014                         d = UNIT_AFTER;
1015                 else if (t->fsck_passno > s->fsck_passno)
1016                         d = UNIT_BEFORE;
1017                 else
1018                         continue;
1019
1020                 if (!(r = unit_add_dependency(UNIT(s), d, UNIT(t), true)) < 0)
1021                         return r;
1022         }
1023
1024         return 0;
1025 }
1026
1027 static int service_verify(Service *s) {
1028         assert(s);
1029
1030         if (s->meta.load_state != UNIT_LOADED)
1031                 return 0;
1032
1033         if (!s->exec_command[SERVICE_EXEC_START]) {
1034                 log_error("%s lacks ExecStart setting. Refusing.", s->meta.id);
1035                 return -EINVAL;
1036         }
1037
1038         if (s->type != SERVICE_ONESHOT &&
1039             s->exec_command[SERVICE_EXEC_START]->command_next) {
1040                 log_error("%s has more than one ExecStart setting, which is only allowed for Type=oneshot services. Refusing.", s->meta.id);
1041                 return -EINVAL;
1042         }
1043
1044         if (s->type == SERVICE_ONESHOT &&
1045             s->exec_command[SERVICE_EXEC_RELOAD]) {
1046                 log_error("%s has an ExecReload setting, which is not allowed for Type=oneshot services. Refusing.", s->meta.id);
1047                 return -EINVAL;
1048         }
1049
1050         if (s->type == SERVICE_DBUS && !s->bus_name) {
1051                 log_error("%s is of type D-Bus but no D-Bus service name has been specified. Refusing.", s->meta.id);
1052                 return -EINVAL;
1053         }
1054
1055         if (s->exec_context.pam_name && s->exec_context.kill_mode != KILL_CONTROL_GROUP) {
1056                 log_error("%s has PAM enabled. Kill mode must be set to 'control-group'. Refusing.", s->meta.id);
1057                 return -EINVAL;
1058         }
1059
1060         return 0;
1061 }
1062
1063 static int service_add_default_dependencies(Service *s) {
1064         int r;
1065
1066         assert(s);
1067
1068         /* Add a number of automatic dependencies useful for the
1069          * majority of services. */
1070
1071         /* First, pull in base system */
1072         if (s->meta.manager->running_as == MANAGER_SYSTEM) {
1073
1074                 if ((r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_BASIC_TARGET, NULL, true)) < 0)
1075                         return r;
1076
1077         } else if (s->meta.manager->running_as == MANAGER_USER) {
1078
1079                 if ((r = unit_add_two_dependencies_by_name(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, SPECIAL_SOCKETS_TARGET, NULL, true)) < 0)
1080                         return r;
1081         }
1082
1083         /* Second, activate normal shutdown */
1084         return unit_add_two_dependencies_by_name(UNIT(s), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
1085 }
1086
1087 static int service_load(Unit *u) {
1088         int r;
1089         Service *s = SERVICE(u);
1090
1091         assert(s);
1092
1093         /* Load a .service file */
1094         if ((r = unit_load_fragment(u)) < 0)
1095                 return r;
1096
1097 #ifdef HAVE_SYSV_COMPAT
1098         /* Load a classic init script as a fallback, if we couldn't find anything */
1099         if (u->meta.load_state == UNIT_STUB)
1100                 if ((r = service_load_sysv(s)) < 0)
1101                         return r;
1102 #endif
1103
1104         /* Still nothing found? Then let's give up */
1105         if (u->meta.load_state == UNIT_STUB)
1106                 return -ENOENT;
1107
1108         /* We were able to load something, then let's add in the
1109          * dropin directories. */
1110         if ((r = unit_load_dropin(unit_follow_merge(u))) < 0)
1111                 return r;
1112
1113         /* This is a new unit? Then let's add in some extras */
1114         if (u->meta.load_state == UNIT_LOADED) {
1115                 if ((r = unit_add_exec_dependencies(u, &s->exec_context)) < 0)
1116                         return r;
1117
1118                 if ((r = unit_add_default_cgroups(u)) < 0)
1119                         return r;
1120
1121 #ifdef HAVE_SYSV_COMPAT
1122                 if ((r = sysv_fix_order(s)) < 0)
1123                         return r;
1124 #endif
1125
1126                 if ((r = fsck_fix_order(s)) < 0)
1127                         return r;
1128
1129                 if (s->bus_name)
1130                         if ((r = unit_watch_bus_name(u, s->bus_name)) < 0)
1131                                 return r;
1132
1133                 if (s->type == SERVICE_NOTIFY && s->notify_access == NOTIFY_NONE)
1134                         s->notify_access = NOTIFY_MAIN;
1135
1136                 if (s->type == SERVICE_DBUS || s->bus_name)
1137                         if ((r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_REQUIRES, SPECIAL_DBUS_SOCKET, NULL, true)) < 0)
1138                                 return r;
1139
1140                 if (s->meta.default_dependencies)
1141                         if ((r = service_add_default_dependencies(s)) < 0)
1142                                 return r;
1143         }
1144
1145         return service_verify(s);
1146 }
1147
1148 static void service_dump(Unit *u, FILE *f, const char *prefix) {
1149
1150         ServiceExecCommand c;
1151         Service *s = SERVICE(u);
1152         const char *prefix2;
1153         char *p2;
1154
1155         assert(s);
1156
1157         p2 = strappend(prefix, "\t");
1158         prefix2 = p2 ? p2 : prefix;
1159
1160         fprintf(f,
1161                 "%sService State: %s\n"
1162                 "%sPermissionsStartOnly: %s\n"
1163                 "%sRootDirectoryStartOnly: %s\n"
1164                 "%sRemainAfterExit: %s\n"
1165                 "%sGuessMainPID: %s\n"
1166                 "%sType: %s\n"
1167                 "%sRestart: %s\n"
1168                 "%sNotifyAccess: %s\n",
1169                 prefix, service_state_to_string(s->state),
1170                 prefix, yes_no(s->permissions_start_only),
1171                 prefix, yes_no(s->root_directory_start_only),
1172                 prefix, yes_no(s->remain_after_exit),
1173                 prefix, yes_no(s->guess_main_pid),
1174                 prefix, service_type_to_string(s->type),
1175                 prefix, service_restart_to_string(s->restart),
1176                 prefix, notify_access_to_string(s->notify_access));
1177
1178         if (s->control_pid > 0)
1179                 fprintf(f,
1180                         "%sControl PID: %lu\n",
1181                         prefix, (unsigned long) s->control_pid);
1182
1183         if (s->main_pid > 0)
1184                 fprintf(f,
1185                         "%sMain PID: %lu\n",
1186                         prefix, (unsigned long) s->main_pid);
1187
1188         if (s->pid_file)
1189                 fprintf(f,
1190                         "%sPIDFile: %s\n",
1191                         prefix, s->pid_file);
1192
1193         if (s->bus_name)
1194                 fprintf(f,
1195                         "%sBusName: %s\n"
1196                         "%sBus Name Good: %s\n",
1197                         prefix, s->bus_name,
1198                         prefix, yes_no(s->bus_name_good));
1199
1200         exec_context_dump(&s->exec_context, f, prefix);
1201
1202         for (c = 0; c < _SERVICE_EXEC_COMMAND_MAX; c++) {
1203
1204                 if (!s->exec_command[c])
1205                         continue;
1206
1207                 fprintf(f, "%s-> %s:\n",
1208                         prefix, service_exec_command_to_string(c));
1209
1210                 exec_command_dump_list(s->exec_command[c], f, prefix2);
1211         }
1212
1213 #ifdef HAVE_SYSV_COMPAT
1214         if (s->sysv_path)
1215                 fprintf(f,
1216                         "%sSysV Init Script Path: %s\n"
1217                         "%sSysV Init Script has LSB Header: %s\n"
1218                         "%sSysVEnabled: %s\n",
1219                         prefix, s->sysv_path,
1220                         prefix, yes_no(s->sysv_has_lsb),
1221                         prefix, yes_no(s->sysv_enabled));
1222
1223         if (s->sysv_start_priority >= 0)
1224                 fprintf(f,
1225                         "%sSysVStartPriority: %i\n",
1226                         prefix, s->sysv_start_priority);
1227
1228         if (s->sysv_runlevels)
1229                 fprintf(f, "%sSysVRunLevels: %s\n",
1230                         prefix, s->sysv_runlevels);
1231 #endif
1232
1233         if (s->fsck_passno > 0)
1234                 fprintf(f,
1235                         "%sFsckPassNo: %i\n",
1236                         prefix, s->fsck_passno);
1237
1238         if (s->status_text)
1239                 fprintf(f, "%sStatus Text: %s\n",
1240                         prefix, s->status_text);
1241
1242         free(p2);
1243 }
1244
1245 static int service_load_pid_file(Service *s) {
1246         char *k;
1247         int r;
1248         pid_t pid;
1249
1250         assert(s);
1251
1252         if (!s->pid_file)
1253                 return -ENOENT;
1254
1255         if ((r = read_one_line_file(s->pid_file, &k)) < 0)
1256                 return r;
1257
1258         r = parse_pid(k, &pid);
1259         free(k);
1260
1261         if (r < 0)
1262                 return r;
1263
1264         if (kill(pid, 0) < 0 && errno != EPERM) {
1265                 log_warning("PID %lu read from file %s does not exist. Your service or init script might be broken.",
1266                             (unsigned long) pid, s->pid_file);
1267                 return -ESRCH;
1268         }
1269
1270         if ((r = service_set_main_pid(s, pid)) < 0)
1271                 return r;
1272
1273         if ((r = unit_watch_pid(UNIT(s), pid)) < 0)
1274                 /* FIXME: we need to do something here */
1275                 return r;
1276
1277         return 0;
1278 }
1279
1280 static int service_search_main_pid(Service *s) {
1281         pid_t pid;
1282         int r;
1283
1284         assert(s);
1285
1286         /* If we know it anyway, don't ever fallback to unreliable
1287          * heuristics */
1288         if (s->main_pid_known)
1289                 return 0;
1290
1291         if (!s->guess_main_pid)
1292                 return 0;
1293
1294         assert(s->main_pid <= 0);
1295
1296         if ((pid = cgroup_bonding_search_main_pid_list(s->meta.cgroup_bondings)) <= 0)
1297                 return -ENOENT;
1298
1299         if ((r = service_set_main_pid(s, pid)) < 0)
1300                 return r;
1301
1302         if ((r = unit_watch_pid(UNIT(s), pid)) < 0)
1303                 /* FIXME: we need to do something here */
1304                 return r;
1305
1306         return 0;
1307 }
1308
1309 static int service_get_sockets(Service *s, Set **_set) {
1310         Set *set;
1311         Iterator i;
1312         char *t;
1313         int r;
1314
1315         assert(s);
1316         assert(_set);
1317
1318         if (s->socket_fd >= 0)
1319                 return 0;
1320
1321         if (!set_isempty(s->configured_sockets))
1322                 return 0;
1323
1324         /* Collects all Socket objects that belong to this
1325          * service. Note that a service might have multiple sockets
1326          * via multiple names. */
1327
1328         if (!(set = set_new(NULL, NULL)))
1329                 return -ENOMEM;
1330
1331         SET_FOREACH(t, s->meta.names, i) {
1332                 char *k;
1333                 Unit *p;
1334
1335                 /* Look for all socket objects that go by any of our
1336                  * units and collect their fds */
1337
1338                 if (!(k = unit_name_change_suffix(t, ".socket"))) {
1339                         r = -ENOMEM;
1340                         goto fail;
1341                 }
1342
1343                 p = manager_get_unit(s->meta.manager, k);
1344                 free(k);
1345
1346                 if (!p)
1347                         continue;
1348
1349                 if ((r = set_put(set, p)) < 0)
1350                         goto fail;
1351         }
1352
1353         *_set = set;
1354         return 0;
1355
1356 fail:
1357         set_free(set);
1358         return r;
1359 }
1360
1361 static int service_notify_sockets_dead(Service *s) {
1362         Iterator i;
1363         Set *set, *free_set = NULL;
1364         Socket *sock;
1365         int r;
1366
1367         assert(s);
1368
1369         /* Notifies all our sockets when we die */
1370
1371         if (s->socket_fd >= 0)
1372                 return 0;
1373
1374         if (!set_isempty(s->configured_sockets))
1375                 set = s->configured_sockets;
1376         else {
1377                 if ((r = service_get_sockets(s, &free_set)) < 0)
1378                         return r;
1379
1380                 set = free_set;
1381         }
1382
1383         SET_FOREACH(sock, set, i)
1384                 socket_notify_service_dead(sock);
1385
1386         set_free(free_set);
1387
1388         return 0;
1389 }
1390
1391 static void service_set_state(Service *s, ServiceState state) {
1392         ServiceState old_state;
1393         assert(s);
1394
1395         old_state = s->state;
1396         s->state = state;
1397
1398         if (state != SERVICE_START_PRE &&
1399             state != SERVICE_START &&
1400             state != SERVICE_START_POST &&
1401             state != SERVICE_RELOAD &&
1402             state != SERVICE_STOP &&
1403             state != SERVICE_STOP_SIGTERM &&
1404             state != SERVICE_STOP_SIGKILL &&
1405             state != SERVICE_STOP_POST &&
1406             state != SERVICE_FINAL_SIGTERM &&
1407             state != SERVICE_FINAL_SIGKILL &&
1408             state != SERVICE_AUTO_RESTART)
1409                 unit_unwatch_timer(UNIT(s), &s->timer_watch);
1410
1411         if (state != SERVICE_START &&
1412             state != SERVICE_START_POST &&
1413             state != SERVICE_RUNNING &&
1414             state != SERVICE_RELOAD &&
1415             state != SERVICE_STOP &&
1416             state != SERVICE_STOP_SIGTERM &&
1417             state != SERVICE_STOP_SIGKILL) {
1418                 service_unwatch_main_pid(s);
1419                 s->main_command = NULL;
1420         }
1421
1422         if (state != SERVICE_START_PRE &&
1423             state != SERVICE_START &&
1424             state != SERVICE_START_POST &&
1425             state != SERVICE_RELOAD &&
1426             state != SERVICE_STOP &&
1427             state != SERVICE_STOP_SIGTERM &&
1428             state != SERVICE_STOP_SIGKILL &&
1429             state != SERVICE_STOP_POST &&
1430             state != SERVICE_FINAL_SIGTERM &&
1431             state != SERVICE_FINAL_SIGKILL) {
1432                 service_unwatch_control_pid(s);
1433                 s->control_command = NULL;
1434                 s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
1435         }
1436
1437         if (state == SERVICE_DEAD ||
1438             state == SERVICE_STOP ||
1439             state == SERVICE_STOP_SIGTERM ||
1440             state == SERVICE_STOP_SIGKILL ||
1441             state == SERVICE_STOP_POST ||
1442             state == SERVICE_FINAL_SIGTERM ||
1443             state == SERVICE_FINAL_SIGKILL ||
1444             state == SERVICE_FAILED ||
1445             state == SERVICE_AUTO_RESTART)
1446                 service_notify_sockets_dead(s);
1447
1448         if (state != SERVICE_START_PRE &&
1449             state != SERVICE_START &&
1450             state != SERVICE_START_POST &&
1451             state != SERVICE_RUNNING &&
1452             state != SERVICE_RELOAD &&
1453             state != SERVICE_STOP &&
1454             state != SERVICE_STOP_SIGTERM &&
1455             state != SERVICE_STOP_SIGKILL &&
1456             state != SERVICE_STOP_POST &&
1457             state != SERVICE_FINAL_SIGTERM &&
1458             state != SERVICE_FINAL_SIGKILL &&
1459             !(state == SERVICE_DEAD && s->meta.job)) {
1460                 service_close_socket_fd(s);
1461                 service_connection_unref(s);
1462         }
1463
1464         /* For the inactive states unit_notify() will trim the cgroup,
1465          * but for exit we have to do that ourselves... */
1466         if (state == SERVICE_EXITED)
1467                 cgroup_bonding_trim_list(s->meta.cgroup_bondings, true);
1468
1469         if (old_state != state)
1470                 log_debug("%s changed %s -> %s", s->meta.id, service_state_to_string(old_state), service_state_to_string(state));
1471
1472         unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], !s->reload_failure);
1473         s->reload_failure = false;
1474 }
1475
1476 static int service_coldplug(Unit *u) {
1477         Service *s = SERVICE(u);
1478         int r;
1479
1480         assert(s);
1481         assert(s->state == SERVICE_DEAD);
1482
1483         if (s->deserialized_state != s->state) {
1484
1485                 if (s->deserialized_state == SERVICE_START_PRE ||
1486                     s->deserialized_state == SERVICE_START ||
1487                     s->deserialized_state == SERVICE_START_POST ||
1488                     s->deserialized_state == SERVICE_RELOAD ||
1489                     s->deserialized_state == SERVICE_STOP ||
1490                     s->deserialized_state == SERVICE_STOP_SIGTERM ||
1491                     s->deserialized_state == SERVICE_STOP_SIGKILL ||
1492                     s->deserialized_state == SERVICE_STOP_POST ||
1493                     s->deserialized_state == SERVICE_FINAL_SIGTERM ||
1494                     s->deserialized_state == SERVICE_FINAL_SIGKILL ||
1495                     s->deserialized_state == SERVICE_AUTO_RESTART) {
1496
1497                         if (s->deserialized_state == SERVICE_AUTO_RESTART || s->timeout_usec > 0) {
1498                                 usec_t k;
1499
1500                                 k = s->deserialized_state == SERVICE_AUTO_RESTART ? s->restart_usec : s->timeout_usec;
1501
1502                                 if ((r = unit_watch_timer(UNIT(s), k, &s->timer_watch)) < 0)
1503                                         return r;
1504                         }
1505                 }
1506
1507                 if ((s->deserialized_state == SERVICE_START &&
1508                      (s->type == SERVICE_FORKING ||
1509                       s->type == SERVICE_DBUS ||
1510                       s->type == SERVICE_ONESHOT ||
1511                       s->type == SERVICE_NOTIFY)) ||
1512                     s->deserialized_state == SERVICE_START_POST ||
1513                     s->deserialized_state == SERVICE_RUNNING ||
1514                     s->deserialized_state == SERVICE_RELOAD ||
1515                     s->deserialized_state == SERVICE_STOP ||
1516                     s->deserialized_state == SERVICE_STOP_SIGTERM ||
1517                     s->deserialized_state == SERVICE_STOP_SIGKILL)
1518                         if (s->main_pid > 0)
1519                                 if ((r = unit_watch_pid(UNIT(s), s->main_pid)) < 0)
1520                                         return r;
1521
1522                 if (s->deserialized_state == SERVICE_START_PRE ||
1523                     s->deserialized_state == SERVICE_START ||
1524                     s->deserialized_state == SERVICE_START_POST ||
1525                     s->deserialized_state == SERVICE_RELOAD ||
1526                     s->deserialized_state == SERVICE_STOP ||
1527                     s->deserialized_state == SERVICE_STOP_SIGTERM ||
1528                     s->deserialized_state == SERVICE_STOP_SIGKILL ||
1529                     s->deserialized_state == SERVICE_STOP_POST ||
1530                     s->deserialized_state == SERVICE_FINAL_SIGTERM ||
1531                     s->deserialized_state == SERVICE_FINAL_SIGKILL)
1532                         if (s->control_pid > 0)
1533                                 if ((r = unit_watch_pid(UNIT(s), s->control_pid)) < 0)
1534                                         return r;
1535
1536                 service_set_state(s, s->deserialized_state);
1537         }
1538
1539         return 0;
1540 }
1541
1542 static int service_collect_fds(Service *s, int **fds, unsigned *n_fds) {
1543         Iterator i;
1544         int r;
1545         int *rfds = NULL;
1546         unsigned rn_fds = 0;
1547         Set *set, *free_set = NULL;
1548         Socket *sock;
1549
1550         assert(s);
1551         assert(fds);
1552         assert(n_fds);
1553
1554         if (s->socket_fd >= 0)
1555                 return 0;
1556
1557         if (!set_isempty(s->configured_sockets))
1558                 set = s->configured_sockets;
1559         else {
1560                 if ((r = service_get_sockets(s, &free_set)) < 0)
1561                         return r;
1562
1563                 set = free_set;
1564         }
1565
1566         SET_FOREACH(sock, set, i) {
1567                 int *cfds;
1568                 unsigned cn_fds;
1569
1570                 if ((r = socket_collect_fds(sock, &cfds, &cn_fds)) < 0)
1571                         goto fail;
1572
1573                 if (!cfds)
1574                         continue;
1575
1576                 if (!rfds) {
1577                         rfds = cfds;
1578                         rn_fds = cn_fds;
1579                 } else {
1580                         int *t;
1581
1582                         if (!(t = new(int, rn_fds+cn_fds))) {
1583                                 free(cfds);
1584                                 r = -ENOMEM;
1585                                 goto fail;
1586                         }
1587
1588                         memcpy(t, rfds, rn_fds);
1589                         memcpy(t+rn_fds, cfds, cn_fds);
1590                         free(rfds);
1591                         free(cfds);
1592
1593                         rfds = t;
1594                         rn_fds = rn_fds+cn_fds;
1595                 }
1596         }
1597
1598         *fds = rfds;
1599         *n_fds = rn_fds;
1600
1601         set_free(free_set);
1602
1603         return 0;
1604
1605 fail:
1606         set_free(set);
1607         free(rfds);
1608
1609         return r;
1610 }
1611
1612 static int service_spawn(
1613                 Service *s,
1614                 ExecCommand *c,
1615                 bool timeout,
1616                 bool pass_fds,
1617                 bool apply_permissions,
1618                 bool apply_chroot,
1619                 bool apply_tty_stdin,
1620                 bool set_notify_socket,
1621                 pid_t *_pid) {
1622
1623         pid_t pid;
1624         int r;
1625         int *fds = NULL, *fdsbuf = NULL;
1626         unsigned n_fds = 0, n_env = 0;
1627         char **argv = NULL, **final_env = NULL, **our_env = NULL;
1628
1629         assert(s);
1630         assert(c);
1631         assert(_pid);
1632
1633         if (pass_fds ||
1634             s->exec_context.std_input == EXEC_INPUT_SOCKET ||
1635             s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
1636             s->exec_context.std_error == EXEC_OUTPUT_SOCKET) {
1637
1638                 if (s->socket_fd >= 0) {
1639                         fds = &s->socket_fd;
1640                         n_fds = 1;
1641                 } else {
1642                         if ((r = service_collect_fds(s, &fdsbuf, &n_fds)) < 0)
1643                                 goto fail;
1644
1645                         fds = fdsbuf;
1646                 }
1647         }
1648
1649         if (timeout && s->timeout_usec) {
1650                 if ((r = unit_watch_timer(UNIT(s), s->timeout_usec, &s->timer_watch)) < 0)
1651                         goto fail;
1652         } else
1653                 unit_unwatch_timer(UNIT(s), &s->timer_watch);
1654
1655         if (!(argv = unit_full_printf_strv(UNIT(s), c->argv))) {
1656                 r = -ENOMEM;
1657                 goto fail;
1658         }
1659
1660         if (!(our_env = new0(char*, 4))) {
1661                 r = -ENOMEM;
1662                 goto fail;
1663         }
1664
1665         if (set_notify_socket)
1666                 if (asprintf(our_env + n_env++, "NOTIFY_SOCKET=%s", s->meta.manager->notify_socket) < 0) {
1667                         r = -ENOMEM;
1668                         goto fail;
1669                 }
1670
1671         if (s->main_pid > 0)
1672                 if (asprintf(our_env + n_env++, "MAINPID=%lu", (unsigned long) s->main_pid) < 0) {
1673                         r = -ENOMEM;
1674                         goto fail;
1675                 }
1676
1677         if (!(final_env = strv_env_merge(2,
1678                                          s->meta.manager->environment,
1679                                          our_env,
1680                                          NULL))) {
1681                 r = -ENOMEM;
1682                 goto fail;
1683         }
1684
1685         r = exec_spawn(c,
1686                        argv,
1687                        &s->exec_context,
1688                        fds, n_fds,
1689                        final_env,
1690                        apply_permissions,
1691                        apply_chroot,
1692                        apply_tty_stdin,
1693                        s->meta.manager->confirm_spawn,
1694                        s->meta.cgroup_bondings,
1695                        &pid);
1696
1697         if (r < 0)
1698                 goto fail;
1699
1700
1701         if ((r = unit_watch_pid(UNIT(s), pid)) < 0)
1702                 /* FIXME: we need to do something here */
1703                 goto fail;
1704
1705         free(fdsbuf);
1706         strv_free(argv);
1707         strv_free(our_env);
1708         strv_free(final_env);
1709
1710         *_pid = pid;
1711
1712         return 0;
1713
1714 fail:
1715         free(fdsbuf);
1716         strv_free(argv);
1717         strv_free(our_env);
1718         strv_free(final_env);
1719
1720         if (timeout)
1721                 unit_unwatch_timer(UNIT(s), &s->timer_watch);
1722
1723         return r;
1724 }
1725
1726 static int main_pid_good(Service *s) {
1727         assert(s);
1728
1729         /* Returns 0 if the pid is dead, 1 if it is good, -1 if we
1730          * don't know */
1731
1732         /* If we know the pid file, then lets just check if it is
1733          * still valid */
1734         if (s->main_pid_known)
1735                 return s->main_pid > 0;
1736
1737         /* We don't know the pid */
1738         return -EAGAIN;
1739 }
1740
1741 static int control_pid_good(Service *s) {
1742         assert(s);
1743
1744         return s->control_pid > 0;
1745 }
1746
1747 static int cgroup_good(Service *s) {
1748         int r;
1749
1750         assert(s);
1751
1752         if ((r = cgroup_bonding_is_empty_list(s->meta.cgroup_bondings)) < 0)
1753                 return r;
1754
1755         return !r;
1756 }
1757
1758 static void service_enter_dead(Service *s, bool success, bool allow_restart) {
1759         int r;
1760         assert(s);
1761
1762         if (!success)
1763                 s->failure = true;
1764
1765         if (allow_restart &&
1766             !s->forbid_restart &&
1767             (s->restart == SERVICE_RESTART_ALWAYS ||
1768              (s->restart == SERVICE_RESTART_ON_SUCCESS && !s->failure) ||
1769              (s->restart == SERVICE_RESTART_ON_FAILURE && s->failure) ||
1770              (s->restart == SERVICE_RESTART_ON_ABORT && s->failure &&
1771               (s->main_exec_status.code == CLD_KILLED ||
1772                s->main_exec_status.code == CLD_DUMPED)))) {
1773
1774                 if ((r = unit_watch_timer(UNIT(s), s->restart_usec, &s->timer_watch)) < 0)
1775                         goto fail;
1776
1777                 service_set_state(s, SERVICE_AUTO_RESTART);
1778         } else
1779                 service_set_state(s, s->failure ? SERVICE_FAILED : SERVICE_DEAD);
1780
1781         s->forbid_restart = false;
1782
1783         return;
1784
1785 fail:
1786         log_warning("%s failed to run install restart timer: %s", s->meta.id, strerror(-r));
1787         service_enter_dead(s, false, false);
1788 }
1789
1790 static void service_enter_signal(Service *s, ServiceState state, bool success);
1791
1792 static void service_enter_stop_post(Service *s, bool success) {
1793         int r;
1794         assert(s);
1795
1796         if (!success)
1797                 s->failure = true;
1798
1799         service_unwatch_control_pid(s);
1800
1801         if ((s->control_command = s->exec_command[SERVICE_EXEC_STOP_POST])) {
1802                 s->control_command_id = SERVICE_EXEC_STOP_POST;
1803
1804                 if ((r = service_spawn(s,
1805                                        s->control_command,
1806                                        true,
1807                                        false,
1808                                        !s->permissions_start_only,
1809                                        !s->root_directory_start_only,
1810                                        true,
1811                                        false,
1812                                        &s->control_pid)) < 0)
1813                         goto fail;
1814
1815
1816                 service_set_state(s, SERVICE_STOP_POST);
1817         } else
1818                 service_enter_signal(s, SERVICE_FINAL_SIGTERM, true);
1819
1820         return;
1821
1822 fail:
1823         log_warning("%s failed to run 'stop-post' task: %s", s->meta.id, strerror(-r));
1824         service_enter_signal(s, SERVICE_FINAL_SIGTERM, false);
1825 }
1826
1827 static void service_enter_signal(Service *s, ServiceState state, bool success) {
1828         int r;
1829         Set *pid_set = NULL;
1830         bool wait_for_exit = false;
1831
1832         assert(s);
1833
1834         if (!success)
1835                 s->failure = true;
1836
1837         if (s->exec_context.kill_mode != KILL_NONE) {
1838                 int sig = (state == SERVICE_STOP_SIGTERM || state == SERVICE_FINAL_SIGTERM) ? s->exec_context.kill_signal : SIGKILL;
1839
1840                 if (s->main_pid > 0) {
1841                         if (kill_and_sigcont(s->main_pid, sig) < 0 && errno != ESRCH)
1842                                 log_warning("Failed to kill main process %li: %m", (long) s->main_pid);
1843                         else
1844                                 wait_for_exit = true;
1845                 }
1846
1847                 if (s->control_pid > 0) {
1848                         if (kill_and_sigcont(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