1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4 This file is part of systemd.
6 Copyright 2013 Lennart Poettering
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 #include "bus-internal.h"
25 #include "bus-kernel.h"
26 #include "bus-policy.h"
29 #include "dbus-busname.h"
31 #include "formats-util.h"
34 #include "signal-util.h"
36 #include "string-util.h"
38 static const UnitActiveState state_translation_table
[_BUSNAME_STATE_MAX
] = {
39 [BUSNAME_DEAD
] = UNIT_INACTIVE
,
40 [BUSNAME_MAKING
] = UNIT_ACTIVATING
,
41 [BUSNAME_REGISTERED
] = UNIT_ACTIVE
,
42 [BUSNAME_LISTENING
] = UNIT_ACTIVE
,
43 [BUSNAME_RUNNING
] = UNIT_ACTIVE
,
44 [BUSNAME_SIGTERM
] = UNIT_DEACTIVATING
,
45 [BUSNAME_SIGKILL
] = UNIT_DEACTIVATING
,
46 [BUSNAME_FAILED
] = UNIT_FAILED
49 static int busname_dispatch_io(sd_event_source
*source
, int fd
, uint32_t revents
, void *userdata
);
50 static int busname_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
);
52 static void busname_init(Unit
*u
) {
53 BusName
*n
= BUSNAME(u
);
56 assert(u
->load_state
== UNIT_STUB
);
62 n
->timeout_usec
= u
->manager
->default_timeout_start_usec
;
65 static void busname_unwatch_control_pid(BusName
*n
) {
68 if (n
->control_pid
<= 0)
71 unit_unwatch_pid(UNIT(n
), n
->control_pid
);
75 static void busname_free_policy(BusName
*n
) {
80 while ((p
= n
->policy
)) {
81 LIST_REMOVE(policy
, n
->policy
, p
);
88 static void busname_close_fd(BusName
*n
) {
91 n
->starter_event_source
= sd_event_source_unref(n
->starter_event_source
);
92 n
->starter_fd
= safe_close(n
->starter_fd
);
95 static void busname_done(Unit
*u
) {
96 BusName
*n
= BUSNAME(u
);
100 n
->name
= mfree(n
->name
);
102 busname_free_policy(n
);
103 busname_unwatch_control_pid(n
);
106 unit_ref_unset(&n
->service
);
108 n
->timer_event_source
= sd_event_source_unref(n
->timer_event_source
);
111 static int busname_arm_timer(BusName
*n
) {
116 if (n
->timeout_usec
<= 0) {
117 n
->timer_event_source
= sd_event_source_unref(n
->timer_event_source
);
121 if (n
->timer_event_source
) {
122 r
= sd_event_source_set_time(n
->timer_event_source
, now(CLOCK_MONOTONIC
) + n
->timeout_usec
);
126 return sd_event_source_set_enabled(n
->timer_event_source
, SD_EVENT_ONESHOT
);
129 r
= sd_event_add_time(
130 UNIT(n
)->manager
->event
,
131 &n
->timer_event_source
,
133 now(CLOCK_MONOTONIC
) + n
->timeout_usec
, 0,
134 busname_dispatch_timer
, n
);
138 (void) sd_event_source_set_description(n
->timer_event_source
, "busname-timer");
143 static int busname_add_default_default_dependencies(BusName
*n
) {
148 r
= unit_add_dependency_by_name(UNIT(n
), UNIT_BEFORE
, SPECIAL_BUSNAMES_TARGET
, NULL
, true);
152 if (UNIT(n
)->manager
->running_as
== MANAGER_SYSTEM
) {
153 r
= unit_add_two_dependencies_by_name(UNIT(n
), UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_SYSINIT_TARGET
, NULL
, true);
158 return unit_add_two_dependencies_by_name(UNIT(n
), UNIT_BEFORE
, UNIT_CONFLICTS
, SPECIAL_SHUTDOWN_TARGET
, NULL
, true);
161 static int busname_add_extras(BusName
*n
) {
168 r
= unit_name_to_prefix(u
->id
, &n
->name
);
173 if (!u
->description
) {
174 r
= unit_set_description(u
, n
->name
);
180 if (!UNIT_DEREF(n
->service
)) {
183 r
= unit_load_related_unit(u
, ".service", &x
);
187 unit_ref_set(&n
->service
, x
);
190 r
= unit_add_two_dependencies(u
, UNIT_BEFORE
, UNIT_TRIGGERS
, UNIT_DEREF(n
->service
), true);
195 if (u
->default_dependencies
) {
196 r
= busname_add_default_default_dependencies(n
);
204 static int busname_verify(BusName
*n
) {
209 if (UNIT(n
)->load_state
!= UNIT_LOADED
)
212 if (!service_name_is_valid(n
->name
)) {
213 log_unit_error(UNIT(n
), "Name= setting is not a valid service name Refusing.");
217 e
= strjoina(n
->name
, ".busname");
218 if (!unit_has_name(UNIT(n
), e
)) {
219 log_unit_error(UNIT(n
), "Name= setting doesn't match unit name. Refusing.");
226 static int busname_load(Unit
*u
) {
227 BusName
*n
= BUSNAME(u
);
231 assert(u
->load_state
== UNIT_STUB
);
233 r
= unit_load_fragment_and_dropin(u
);
237 if (u
->load_state
== UNIT_LOADED
) {
238 /* This is a new unit? Then let's add in some extras */
239 r
= busname_add_extras(n
);
244 return busname_verify(n
);
247 static void busname_dump(Unit
*u
, FILE *f
, const char *prefix
) {
248 BusName
*n
= BUSNAME(u
);
254 "%sBus Name State: %s\n"
259 prefix
, busname_state_to_string(n
->state
),
260 prefix
, busname_result_to_string(n
->result
),
262 prefix
, yes_no(n
->activating
),
263 prefix
, yes_no(n
->accept_fd
));
265 if (n
->control_pid
> 0)
267 "%sControl PID: "PID_FMT
"\n",
268 prefix
, n
->control_pid
);
271 static void busname_unwatch_fd(BusName
*n
) {
276 if (!n
->starter_event_source
)
279 r
= sd_event_source_set_enabled(n
->starter_event_source
, SD_EVENT_OFF
);
281 log_unit_debug_errno(UNIT(n
), r
, "Failed to disable event source: %m");
284 static int busname_watch_fd(BusName
*n
) {
289 if (n
->starter_fd
< 0)
292 if (n
->starter_event_source
) {
293 r
= sd_event_source_set_enabled(n
->starter_event_source
, SD_EVENT_ON
);
297 r
= sd_event_add_io(UNIT(n
)->manager
->event
, &n
->starter_event_source
, n
->starter_fd
, EPOLLIN
, busname_dispatch_io
, n
);
301 (void) sd_event_source_set_description(n
->starter_event_source
, "busname-starter");
307 log_unit_warning_errno(UNIT(n
), r
, "Failed to watch starter fd: %m");
308 busname_unwatch_fd(n
);
312 static int busname_open_fd(BusName
*n
) {
313 _cleanup_free_
char *path
= NULL
;
318 if (n
->starter_fd
>= 0)
321 mode
= UNIT(n
)->manager
->running_as
== MANAGER_SYSTEM
? "system" : "user";
322 n
->starter_fd
= bus_kernel_open_bus_fd(mode
, &path
);
323 if (n
->starter_fd
< 0)
324 return log_unit_warning_errno(UNIT(n
), n
->starter_fd
, "Failed to open %s: %m", path
?: "kdbus");
329 static void busname_set_state(BusName
*n
, BusNameState state
) {
330 BusNameState old_state
;
333 old_state
= n
->state
;
336 if (!IN_SET(state
, BUSNAME_MAKING
, BUSNAME_SIGTERM
, BUSNAME_SIGKILL
)) {
337 n
->timer_event_source
= sd_event_source_unref(n
->timer_event_source
);
338 busname_unwatch_control_pid(n
);
341 if (state
!= BUSNAME_LISTENING
)
342 busname_unwatch_fd(n
);
344 if (!IN_SET(state
, BUSNAME_LISTENING
, BUSNAME_MAKING
, BUSNAME_REGISTERED
, BUSNAME_RUNNING
))
347 if (state
!= old_state
)
348 log_unit_debug(UNIT(n
), "Changed %s -> %s", busname_state_to_string(old_state
), busname_state_to_string(state
));
350 unit_notify(UNIT(n
), state_translation_table
[old_state
], state_translation_table
[state
], true);
353 static int busname_coldplug(Unit
*u
) {
354 BusName
*n
= BUSNAME(u
);
358 assert(n
->state
== BUSNAME_DEAD
);
360 if (n
->deserialized_state
== n
->state
)
363 if (IN_SET(n
->deserialized_state
, BUSNAME_MAKING
, BUSNAME_SIGTERM
, BUSNAME_SIGKILL
)) {
365 if (n
->control_pid
<= 0)
368 r
= unit_watch_pid(UNIT(n
), n
->control_pid
);
372 r
= busname_arm_timer(n
);
377 if (IN_SET(n
->deserialized_state
, BUSNAME_MAKING
, BUSNAME_LISTENING
, BUSNAME_REGISTERED
, BUSNAME_RUNNING
)) {
378 r
= busname_open_fd(n
);
383 if (n
->deserialized_state
== BUSNAME_LISTENING
) {
384 r
= busname_watch_fd(n
);
389 busname_set_state(n
, n
->deserialized_state
);
393 static int busname_make_starter(BusName
*n
, pid_t
*_pid
) {
397 r
= busname_arm_timer(n
);
401 /* We have to resolve the user/group names out-of-process,
402 * hence let's fork here. It's messy, but well, what can we
412 (void) default_signals(SIGNALS_CRASH_HANDLER
, SIGNALS_IGNORE
, -1);
413 (void) ignore_signals(SIGPIPE
, -1);
416 r
= bus_kernel_make_starter(n
->starter_fd
, n
->name
, n
->activating
, n
->accept_fd
, n
->policy
, n
->policy_world
);
418 ret
= EXIT_MAKE_STARTER
;
426 log_error_errno(r
, "Failed to create starter connection at step %s: %m", exit_status_to_string(ret
, EXIT_STATUS_SYSTEMD
));
431 r
= unit_watch_pid(UNIT(n
), pid
);
439 n
->timer_event_source
= sd_event_source_unref(n
->timer_event_source
);
443 static void busname_enter_dead(BusName
*n
, BusNameResult f
) {
446 if (f
!= BUSNAME_SUCCESS
)
449 busname_set_state(n
, n
->result
!= BUSNAME_SUCCESS
? BUSNAME_FAILED
: BUSNAME_DEAD
);
452 static void busname_enter_signal(BusName
*n
, BusNameState state
, BusNameResult f
) {
453 KillContext kill_context
= {};
458 if (f
!= BUSNAME_SUCCESS
)
461 kill_context_init(&kill_context
);
463 r
= unit_kill_context(UNIT(n
),
465 state
!= BUSNAME_SIGTERM
? KILL_KILL
: KILL_TERMINATE
,
470 log_unit_warning_errno(UNIT(n
), r
, "Failed to kill control process: %m");
475 r
= busname_arm_timer(n
);
477 log_unit_warning_errno(UNIT(n
), r
, "Failed to arm timer: %m");
481 busname_set_state(n
, state
);
482 } else if (state
== BUSNAME_SIGTERM
)
483 busname_enter_signal(n
, BUSNAME_SIGKILL
, BUSNAME_SUCCESS
);
485 busname_enter_dead(n
, BUSNAME_SUCCESS
);
490 busname_enter_dead(n
, BUSNAME_FAILURE_RESOURCES
);
493 static void busname_enter_listening(BusName
*n
) {
499 r
= busname_watch_fd(n
);
501 log_unit_warning_errno(UNIT(n
), r
, "Failed to watch names: %m");
505 busname_set_state(n
, BUSNAME_LISTENING
);
507 busname_set_state(n
, BUSNAME_REGISTERED
);
512 busname_enter_signal(n
, BUSNAME_SIGTERM
, BUSNAME_FAILURE_RESOURCES
);
515 static void busname_enter_making(BusName
*n
) {
520 r
= busname_open_fd(n
);
525 /* If there is a policy, we need to resolve user/group
526 * names, which we can't do from PID1, hence let's
528 busname_unwatch_control_pid(n
);
530 r
= busname_make_starter(n
, &n
->control_pid
);
532 log_unit_warning_errno(UNIT(n
), r
, "Failed to fork 'making' task: %m");
536 busname_set_state(n
, BUSNAME_MAKING
);
538 /* If there is no policy, we can do everything
539 * directly from PID 1, hence do so. */
541 r
= bus_kernel_make_starter(n
->starter_fd
, n
->name
, n
->activating
, n
->accept_fd
, NULL
, n
->policy_world
);
543 log_unit_warning_errno(UNIT(n
), r
, "Failed to make starter: %m");
547 busname_enter_listening(n
);
553 busname_enter_dead(n
, BUSNAME_FAILURE_RESOURCES
);
556 static void busname_enter_running(BusName
*n
) {
557 _cleanup_bus_error_free_ sd_bus_error error
= SD_BUS_ERROR_NULL
;
558 bool pending
= false;
568 /* We don't take connections anymore if we are supposed to
569 * shut down anyway */
571 if (unit_stop_pending(UNIT(n
))) {
572 log_unit_debug(UNIT(n
), "Suppressing activation request since unit stop is scheduled.");
574 /* Flush all queued activation reqeuest by closing and reopening the connection */
575 bus_kernel_drop_one(n
->starter_fd
);
577 busname_enter_listening(n
);
581 /* If there's already a start pending don't bother to do
583 SET_FOREACH(other
, UNIT(n
)->dependencies
[UNIT_TRIGGERS
], i
)
584 if (unit_active_or_pending(other
)) {
590 if (!UNIT_ISSET(n
->service
)) {
591 log_unit_error(UNIT(n
), "Service to activate vanished, refusing activation.");
596 r
= manager_add_job(UNIT(n
)->manager
, JOB_START
, UNIT_DEREF(n
->service
), JOB_REPLACE
, true, &error
, NULL
);
601 busname_set_state(n
, BUSNAME_RUNNING
);
605 log_unit_warning(UNIT(n
), "Failed to queue service startup job: %s", bus_error_message(&error
, r
));
606 busname_enter_dead(n
, BUSNAME_FAILURE_RESOURCES
);
609 static int busname_start(Unit
*u
) {
610 BusName
*n
= BUSNAME(u
);
614 /* We cannot fulfill this request right now, try again later
616 if (IN_SET(n
->state
, BUSNAME_SIGTERM
, BUSNAME_SIGKILL
))
620 if (n
->state
== BUSNAME_MAKING
)
623 if (n
->activating
&& UNIT_ISSET(n
->service
)) {
626 service
= SERVICE(UNIT_DEREF(n
->service
));
628 if (UNIT(service
)->load_state
!= UNIT_LOADED
) {
629 log_unit_error(u
, "Bus service %s not loaded, refusing.", UNIT(service
)->id
);
634 assert(IN_SET(n
->state
, BUSNAME_DEAD
, BUSNAME_FAILED
));
636 n
->result
= BUSNAME_SUCCESS
;
637 busname_enter_making(n
);
642 static int busname_stop(Unit
*u
) {
643 BusName
*n
= BUSNAME(u
);
648 if (IN_SET(n
->state
, BUSNAME_SIGTERM
, BUSNAME_SIGKILL
))
651 /* If there's already something running, we go directly into
654 if (n
->state
== BUSNAME_MAKING
) {
655 busname_enter_signal(n
, BUSNAME_SIGTERM
, BUSNAME_SUCCESS
);
659 assert(IN_SET(n
->state
, BUSNAME_REGISTERED
, BUSNAME_LISTENING
, BUSNAME_RUNNING
));
661 busname_enter_dead(n
, BUSNAME_SUCCESS
);
665 static int busname_serialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
666 BusName
*n
= BUSNAME(u
);
673 unit_serialize_item(u
, f
, "state", busname_state_to_string(n
->state
));
674 unit_serialize_item(u
, f
, "result", busname_result_to_string(n
->result
));
676 if (n
->control_pid
> 0)
677 unit_serialize_item_format(u
, f
, "control-pid", PID_FMT
, n
->control_pid
);
679 r
= unit_serialize_item_fd(u
, f
, fds
, "starter-fd", n
->starter_fd
);
686 static int busname_deserialize_item(Unit
*u
, const char *key
, const char *value
, FDSet
*fds
) {
687 BusName
*n
= BUSNAME(u
);
693 if (streq(key
, "state")) {
696 state
= busname_state_from_string(value
);
698 log_unit_debug(u
, "Failed to parse state value: %s", value
);
700 n
->deserialized_state
= state
;
702 } else if (streq(key
, "result")) {
705 f
= busname_result_from_string(value
);
707 log_unit_debug(u
, "Failed to parse result value: %s", value
);
708 else if (f
!= BUSNAME_SUCCESS
)
711 } else if (streq(key
, "control-pid")) {
714 if (parse_pid(value
, &pid
) < 0)
715 log_unit_debug(u
, "Failed to parse control-pid value: %s", value
);
717 n
->control_pid
= pid
;
718 } else if (streq(key
, "starter-fd")) {
721 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
722 log_unit_debug(u
, "Failed to parse starter fd value: %s", value
);
724 safe_close(n
->starter_fd
);
725 n
->starter_fd
= fdset_remove(fds
, fd
);
728 log_unit_debug(u
, "Unknown serialization key: %s", key
);
733 _pure_
static UnitActiveState
busname_active_state(Unit
*u
) {
736 return state_translation_table
[BUSNAME(u
)->state
];
739 _pure_
static const char *busname_sub_state_to_string(Unit
*u
) {
742 return busname_state_to_string(BUSNAME(u
)->state
);
745 static int busname_peek_message(BusName
*n
) {
746 struct kdbus_cmd_recv cmd_recv
= {
747 .size
= sizeof(cmd_recv
),
748 .flags
= KDBUS_RECV_PEEK
,
750 struct kdbus_cmd_free cmd_free
= {
751 .size
= sizeof(cmd_free
),
753 const char *comm
= NULL
;
754 struct kdbus_item
*d
;
756 size_t start
, ps
, sz
, delta
;
761 /* Generate a friendly debug log message about which process
762 * caused triggering of this bus name. This simply peeks the
763 * metadata of the first queued message and logs it. */
767 /* Let's shortcut things a bit, if debug logging is turned off
770 if (log_get_max_level() < LOG_DEBUG
)
773 r
= ioctl(n
->starter_fd
, KDBUS_CMD_RECV
, &cmd_recv
);
775 if (errno
== EINTR
|| errno
== EAGAIN
)
778 return log_unit_error_errno(UNIT(n
), errno
, "Failed to query activation message: %m");
781 /* We map as late as possible, and unmap imemdiately after
782 * use. On 32bit address space is scarce and we want to be
783 * able to handle a lot of activator connections at the same
784 * time, and hence shouldn't keep the mmap()s around for
785 * longer than necessary. */
788 start
= (cmd_recv
.msg
.offset
/ ps
) * ps
;
789 delta
= cmd_recv
.msg
.offset
- start
;
790 sz
= PAGE_ALIGN(delta
+ cmd_recv
.msg
.msg_size
);
792 p
= mmap(NULL
, sz
, PROT_READ
, MAP_SHARED
, n
->starter_fd
, start
);
793 if (p
== MAP_FAILED
) {
794 r
= log_unit_error_errno(UNIT(n
), errno
, "Failed to map activation message: %m");
798 k
= (struct kdbus_msg
*) ((uint8_t *) p
+ delta
);
799 KDBUS_ITEM_FOREACH(d
, k
, items
) {
802 case KDBUS_ITEM_PIDS
:
806 case KDBUS_ITEM_PID_COMM
:
813 log_unit_debug(UNIT(n
), "Activation triggered by process " PID_FMT
" (%s)", pid
, strna(comm
));
819 (void) munmap(p
, sz
);
821 cmd_free
.offset
= cmd_recv
.msg
.offset
;
822 if (ioctl(n
->starter_fd
, KDBUS_CMD_FREE
, &cmd_free
) < 0)
823 log_unit_warning(UNIT(n
), "Failed to free peeked message, ignoring: %m");
828 static int busname_dispatch_io(sd_event_source
*source
, int fd
, uint32_t revents
, void *userdata
) {
829 BusName
*n
= userdata
;
834 if (n
->state
!= BUSNAME_LISTENING
)
837 log_unit_debug(UNIT(n
), "Activation request");
839 if (revents
!= EPOLLIN
) {
840 log_unit_error(UNIT(n
), "Got unexpected poll event (0x%x) on starter fd.", revents
);
844 busname_peek_message(n
);
845 busname_enter_running(n
);
849 busname_enter_dead(n
, BUSNAME_FAILURE_RESOURCES
);
853 static void busname_sigchld_event(Unit
*u
, pid_t pid
, int code
, int status
) {
854 BusName
*n
= BUSNAME(u
);
860 if (pid
!= n
->control_pid
)
865 if (is_clean_exit(code
, status
, NULL
))
867 else if (code
== CLD_EXITED
)
868 f
= BUSNAME_FAILURE_EXIT_CODE
;
869 else if (code
== CLD_KILLED
)
870 f
= BUSNAME_FAILURE_SIGNAL
;
871 else if (code
== CLD_DUMPED
)
872 f
= BUSNAME_FAILURE_CORE_DUMP
;
874 assert_not_reached("Unknown sigchld code");
876 log_unit_full(u
, f
== BUSNAME_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
, 0,
877 "Control process exited, code=%s status=%i", sigchld_code_to_string(code
), status
);
879 if (f
!= BUSNAME_SUCCESS
)
885 if (f
== BUSNAME_SUCCESS
)
886 busname_enter_listening(n
);
888 busname_enter_signal(n
, BUSNAME_SIGTERM
, f
);
891 case BUSNAME_SIGTERM
:
892 case BUSNAME_SIGKILL
:
893 busname_enter_dead(n
, f
);
897 assert_not_reached("Uh, control process died at wrong time.");
900 /* Notify clients about changed exit status */
901 unit_add_to_dbus_queue(u
);
904 static int busname_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
) {
905 BusName
*n
= BUSNAME(userdata
);
908 assert(n
->timer_event_source
== source
);
913 log_unit_warning(UNIT(n
), "Making timed out. Terminating.");
914 busname_enter_signal(n
, BUSNAME_SIGTERM
, BUSNAME_FAILURE_TIMEOUT
);
917 case BUSNAME_SIGTERM
:
918 log_unit_warning(UNIT(n
), "Stopping timed out. Killing.");
919 busname_enter_signal(n
, BUSNAME_SIGKILL
, BUSNAME_FAILURE_TIMEOUT
);
922 case BUSNAME_SIGKILL
:
923 log_unit_warning(UNIT(n
), "Processes still around after SIGKILL. Ignoring.");
924 busname_enter_dead(n
, BUSNAME_FAILURE_TIMEOUT
);
928 assert_not_reached("Timeout at wrong time.");
934 static void busname_reset_failed(Unit
*u
) {
935 BusName
*n
= BUSNAME(u
);
939 if (n
->state
== BUSNAME_FAILED
)
940 busname_set_state(n
, BUSNAME_DEAD
);
942 n
->result
= BUSNAME_SUCCESS
;
945 static void busname_trigger_notify(Unit
*u
, Unit
*other
) {
946 BusName
*n
= BUSNAME(u
);
952 if (!IN_SET(n
->state
, BUSNAME_RUNNING
, BUSNAME_LISTENING
))
955 if (other
->load_state
!= UNIT_LOADED
|| other
->type
!= UNIT_SERVICE
)
960 if (s
->state
== SERVICE_FAILED
&& s
->result
== SERVICE_FAILURE_START_LIMIT
)
961 busname_enter_dead(n
, BUSNAME_FAILURE_SERVICE_FAILED_PERMANENT
);
962 else if (IN_SET(s
->state
,
963 SERVICE_DEAD
, SERVICE_FAILED
,
964 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
965 SERVICE_STOP_POST
, SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
,
966 SERVICE_AUTO_RESTART
))
967 busname_enter_listening(n
);
970 static int busname_kill(Unit
*u
, KillWho who
, int signo
, sd_bus_error
*error
) {
971 return unit_kill_common(u
, who
, signo
, -1, BUSNAME(u
)->control_pid
, error
);
974 static int busname_get_timeout(Unit
*u
, uint64_t *timeout
) {
975 BusName
*n
= BUSNAME(u
);
978 if (!n
->timer_event_source
)
981 r
= sd_event_source_get_time(n
->timer_event_source
, timeout
);
988 static bool busname_supported(void) {
989 static int supported
= -1;
992 supported
= is_kdbus_available();
997 static const char* const busname_result_table
[_BUSNAME_RESULT_MAX
] = {
998 [BUSNAME_SUCCESS
] = "success",
999 [BUSNAME_FAILURE_RESOURCES
] = "resources",
1000 [BUSNAME_FAILURE_TIMEOUT
] = "timeout",
1001 [BUSNAME_FAILURE_EXIT_CODE
] = "exit-code",
1002 [BUSNAME_FAILURE_SIGNAL
] = "signal",
1003 [BUSNAME_FAILURE_CORE_DUMP
] = "core-dump",
1004 [BUSNAME_FAILURE_SERVICE_FAILED_PERMANENT
] = "service-failed-permanent",
1007 DEFINE_STRING_TABLE_LOOKUP(busname_result
, BusNameResult
);
1009 const UnitVTable busname_vtable
= {
1010 .object_size
= sizeof(BusName
),
1016 .private_section
= "BusName",
1019 .no_instances
= true,
1021 .init
= busname_init
,
1022 .done
= busname_done
,
1023 .load
= busname_load
,
1025 .coldplug
= busname_coldplug
,
1027 .dump
= busname_dump
,
1029 .start
= busname_start
,
1030 .stop
= busname_stop
,
1032 .kill
= busname_kill
,
1034 .get_timeout
= busname_get_timeout
,
1036 .serialize
= busname_serialize
,
1037 .deserialize_item
= busname_deserialize_item
,
1039 .active_state
= busname_active_state
,
1040 .sub_state_to_string
= busname_sub_state_to_string
,
1042 .sigchld_event
= busname_sigchld_event
,
1044 .trigger_notify
= busname_trigger_notify
,
1046 .reset_failed
= busname_reset_failed
,
1048 .supported
= busname_supported
,
1050 .bus_vtable
= bus_busname_vtable
,
1052 .status_message_formats
= {
1053 .finished_start_job
= {
1054 [JOB_DONE
] = "Listening on %s.",
1055 [JOB_FAILED
] = "Failed to listen on %s.",
1057 .finished_stop_job
= {
1058 [JOB_DONE
] = "Closed %s.",
1059 [JOB_FAILED
] = "Failed stopping %s.",