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"
33 #include "parse-util.h"
35 #include "signal-util.h"
37 #include "string-table.h"
38 #include "string-util.h"
40 static const UnitActiveState state_translation_table
[_BUSNAME_STATE_MAX
] = {
41 [BUSNAME_DEAD
] = UNIT_INACTIVE
,
42 [BUSNAME_MAKING
] = UNIT_ACTIVATING
,
43 [BUSNAME_REGISTERED
] = UNIT_ACTIVE
,
44 [BUSNAME_LISTENING
] = UNIT_ACTIVE
,
45 [BUSNAME_RUNNING
] = UNIT_ACTIVE
,
46 [BUSNAME_SIGTERM
] = UNIT_DEACTIVATING
,
47 [BUSNAME_SIGKILL
] = UNIT_DEACTIVATING
,
48 [BUSNAME_FAILED
] = UNIT_FAILED
51 static int busname_dispatch_io(sd_event_source
*source
, int fd
, uint32_t revents
, void *userdata
);
52 static int busname_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
);
54 static void busname_init(Unit
*u
) {
55 BusName
*n
= BUSNAME(u
);
58 assert(u
->load_state
== UNIT_STUB
);
64 n
->timeout_usec
= u
->manager
->default_timeout_start_usec
;
67 static void busname_unwatch_control_pid(BusName
*n
) {
70 if (n
->control_pid
<= 0)
73 unit_unwatch_pid(UNIT(n
), n
->control_pid
);
77 static void busname_free_policy(BusName
*n
) {
82 while ((p
= n
->policy
)) {
83 LIST_REMOVE(policy
, n
->policy
, p
);
90 static void busname_close_fd(BusName
*n
) {
93 n
->starter_event_source
= sd_event_source_unref(n
->starter_event_source
);
94 n
->starter_fd
= safe_close(n
->starter_fd
);
97 static void busname_done(Unit
*u
) {
98 BusName
*n
= BUSNAME(u
);
102 n
->name
= mfree(n
->name
);
104 busname_free_policy(n
);
105 busname_unwatch_control_pid(n
);
108 unit_ref_unset(&n
->service
);
110 n
->timer_event_source
= sd_event_source_unref(n
->timer_event_source
);
113 static int busname_arm_timer(BusName
*n
) {
118 if (n
->timeout_usec
<= 0) {
119 n
->timer_event_source
= sd_event_source_unref(n
->timer_event_source
);
123 if (n
->timer_event_source
) {
124 r
= sd_event_source_set_time(n
->timer_event_source
, now(CLOCK_MONOTONIC
) + n
->timeout_usec
);
128 return sd_event_source_set_enabled(n
->timer_event_source
, SD_EVENT_ONESHOT
);
131 r
= sd_event_add_time(
132 UNIT(n
)->manager
->event
,
133 &n
->timer_event_source
,
135 now(CLOCK_MONOTONIC
) + n
->timeout_usec
, 0,
136 busname_dispatch_timer
, n
);
140 (void) sd_event_source_set_description(n
->timer_event_source
, "busname-timer");
145 static int busname_add_default_default_dependencies(BusName
*n
) {
150 r
= unit_add_dependency_by_name(UNIT(n
), UNIT_BEFORE
, SPECIAL_BUSNAMES_TARGET
, NULL
, true);
154 if (UNIT(n
)->manager
->running_as
== MANAGER_SYSTEM
) {
155 r
= unit_add_two_dependencies_by_name(UNIT(n
), UNIT_AFTER
, UNIT_REQUIRES
, SPECIAL_SYSINIT_TARGET
, NULL
, true);
160 return unit_add_two_dependencies_by_name(UNIT(n
), UNIT_BEFORE
, UNIT_CONFLICTS
, SPECIAL_SHUTDOWN_TARGET
, NULL
, true);
163 static int busname_add_extras(BusName
*n
) {
170 r
= unit_name_to_prefix(u
->id
, &n
->name
);
175 if (!u
->description
) {
176 r
= unit_set_description(u
, n
->name
);
182 if (!UNIT_DEREF(n
->service
)) {
185 r
= unit_load_related_unit(u
, ".service", &x
);
189 unit_ref_set(&n
->service
, x
);
192 r
= unit_add_two_dependencies(u
, UNIT_BEFORE
, UNIT_TRIGGERS
, UNIT_DEREF(n
->service
), true);
197 if (u
->default_dependencies
) {
198 r
= busname_add_default_default_dependencies(n
);
206 static int busname_verify(BusName
*n
) {
211 if (UNIT(n
)->load_state
!= UNIT_LOADED
)
214 if (!service_name_is_valid(n
->name
)) {
215 log_unit_error(UNIT(n
), "Name= setting is not a valid service name Refusing.");
219 e
= strjoina(n
->name
, ".busname");
220 if (!unit_has_name(UNIT(n
), e
)) {
221 log_unit_error(UNIT(n
), "Name= setting doesn't match unit name. Refusing.");
228 static int busname_load(Unit
*u
) {
229 BusName
*n
= BUSNAME(u
);
233 assert(u
->load_state
== UNIT_STUB
);
235 r
= unit_load_fragment_and_dropin(u
);
239 if (u
->load_state
== UNIT_LOADED
) {
240 /* This is a new unit? Then let's add in some extras */
241 r
= busname_add_extras(n
);
246 return busname_verify(n
);
249 static void busname_dump(Unit
*u
, FILE *f
, const char *prefix
) {
250 BusName
*n
= BUSNAME(u
);
256 "%sBus Name State: %s\n"
261 prefix
, busname_state_to_string(n
->state
),
262 prefix
, busname_result_to_string(n
->result
),
264 prefix
, yes_no(n
->activating
),
265 prefix
, yes_no(n
->accept_fd
));
267 if (n
->control_pid
> 0)
269 "%sControl PID: "PID_FMT
"\n",
270 prefix
, n
->control_pid
);
273 static void busname_unwatch_fd(BusName
*n
) {
278 if (!n
->starter_event_source
)
281 r
= sd_event_source_set_enabled(n
->starter_event_source
, SD_EVENT_OFF
);
283 log_unit_debug_errno(UNIT(n
), r
, "Failed to disable event source: %m");
286 static int busname_watch_fd(BusName
*n
) {
291 if (n
->starter_fd
< 0)
294 if (n
->starter_event_source
) {
295 r
= sd_event_source_set_enabled(n
->starter_event_source
, SD_EVENT_ON
);
299 r
= sd_event_add_io(UNIT(n
)->manager
->event
, &n
->starter_event_source
, n
->starter_fd
, EPOLLIN
, busname_dispatch_io
, n
);
303 (void) sd_event_source_set_description(n
->starter_event_source
, "busname-starter");
309 log_unit_warning_errno(UNIT(n
), r
, "Failed to watch starter fd: %m");
310 busname_unwatch_fd(n
);
314 static int busname_open_fd(BusName
*n
) {
315 _cleanup_free_
char *path
= NULL
;
320 if (n
->starter_fd
>= 0)
323 mode
= UNIT(n
)->manager
->running_as
== MANAGER_SYSTEM
? "system" : "user";
324 n
->starter_fd
= bus_kernel_open_bus_fd(mode
, &path
);
325 if (n
->starter_fd
< 0)
326 return log_unit_warning_errno(UNIT(n
), n
->starter_fd
, "Failed to open %s: %m", path
?: "kdbus");
331 static void busname_set_state(BusName
*n
, BusNameState state
) {
332 BusNameState old_state
;
335 old_state
= n
->state
;
338 if (!IN_SET(state
, BUSNAME_MAKING
, BUSNAME_SIGTERM
, BUSNAME_SIGKILL
)) {
339 n
->timer_event_source
= sd_event_source_unref(n
->timer_event_source
);
340 busname_unwatch_control_pid(n
);
343 if (state
!= BUSNAME_LISTENING
)
344 busname_unwatch_fd(n
);
346 if (!IN_SET(state
, BUSNAME_LISTENING
, BUSNAME_MAKING
, BUSNAME_REGISTERED
, BUSNAME_RUNNING
))
349 if (state
!= old_state
)
350 log_unit_debug(UNIT(n
), "Changed %s -> %s", busname_state_to_string(old_state
), busname_state_to_string(state
));
352 unit_notify(UNIT(n
), state_translation_table
[old_state
], state_translation_table
[state
], true);
355 static int busname_coldplug(Unit
*u
) {
356 BusName
*n
= BUSNAME(u
);
360 assert(n
->state
== BUSNAME_DEAD
);
362 if (n
->deserialized_state
== n
->state
)
365 if (IN_SET(n
->deserialized_state
, BUSNAME_MAKING
, BUSNAME_SIGTERM
, BUSNAME_SIGKILL
)) {
367 if (n
->control_pid
<= 0)
370 r
= unit_watch_pid(UNIT(n
), n
->control_pid
);
374 r
= busname_arm_timer(n
);
379 if (IN_SET(n
->deserialized_state
, BUSNAME_MAKING
, BUSNAME_LISTENING
, BUSNAME_REGISTERED
, BUSNAME_RUNNING
)) {
380 r
= busname_open_fd(n
);
385 if (n
->deserialized_state
== BUSNAME_LISTENING
) {
386 r
= busname_watch_fd(n
);
391 busname_set_state(n
, n
->deserialized_state
);
395 static int busname_make_starter(BusName
*n
, pid_t
*_pid
) {
399 r
= busname_arm_timer(n
);
403 /* We have to resolve the user/group names out-of-process,
404 * hence let's fork here. It's messy, but well, what can we
414 (void) default_signals(SIGNALS_CRASH_HANDLER
, SIGNALS_IGNORE
, -1);
415 (void) ignore_signals(SIGPIPE
, -1);
418 r
= bus_kernel_make_starter(n
->starter_fd
, n
->name
, n
->activating
, n
->accept_fd
, n
->policy
, n
->policy_world
);
420 ret
= EXIT_MAKE_STARTER
;
428 log_error_errno(r
, "Failed to create starter connection at step %s: %m", exit_status_to_string(ret
, EXIT_STATUS_SYSTEMD
));
433 r
= unit_watch_pid(UNIT(n
), pid
);
441 n
->timer_event_source
= sd_event_source_unref(n
->timer_event_source
);
445 static void busname_enter_dead(BusName
*n
, BusNameResult f
) {
448 if (f
!= BUSNAME_SUCCESS
)
451 busname_set_state(n
, n
->result
!= BUSNAME_SUCCESS
? BUSNAME_FAILED
: BUSNAME_DEAD
);
454 static void busname_enter_signal(BusName
*n
, BusNameState state
, BusNameResult f
) {
455 KillContext kill_context
= {};
460 if (f
!= BUSNAME_SUCCESS
)
463 kill_context_init(&kill_context
);
465 r
= unit_kill_context(UNIT(n
),
467 state
!= BUSNAME_SIGTERM
? KILL_KILL
: KILL_TERMINATE
,
472 log_unit_warning_errno(UNIT(n
), r
, "Failed to kill control process: %m");
477 r
= busname_arm_timer(n
);
479 log_unit_warning_errno(UNIT(n
), r
, "Failed to arm timer: %m");
483 busname_set_state(n
, state
);
484 } else if (state
== BUSNAME_SIGTERM
)
485 busname_enter_signal(n
, BUSNAME_SIGKILL
, BUSNAME_SUCCESS
);
487 busname_enter_dead(n
, BUSNAME_SUCCESS
);
492 busname_enter_dead(n
, BUSNAME_FAILURE_RESOURCES
);
495 static void busname_enter_listening(BusName
*n
) {
501 r
= busname_watch_fd(n
);
503 log_unit_warning_errno(UNIT(n
), r
, "Failed to watch names: %m");
507 busname_set_state(n
, BUSNAME_LISTENING
);
509 busname_set_state(n
, BUSNAME_REGISTERED
);
514 busname_enter_signal(n
, BUSNAME_SIGTERM
, BUSNAME_FAILURE_RESOURCES
);
517 static void busname_enter_making(BusName
*n
) {
522 r
= busname_open_fd(n
);
527 /* If there is a policy, we need to resolve user/group
528 * names, which we can't do from PID1, hence let's
530 busname_unwatch_control_pid(n
);
532 r
= busname_make_starter(n
, &n
->control_pid
);
534 log_unit_warning_errno(UNIT(n
), r
, "Failed to fork 'making' task: %m");
538 busname_set_state(n
, BUSNAME_MAKING
);
540 /* If there is no policy, we can do everything
541 * directly from PID 1, hence do so. */
543 r
= bus_kernel_make_starter(n
->starter_fd
, n
->name
, n
->activating
, n
->accept_fd
, NULL
, n
->policy_world
);
545 log_unit_warning_errno(UNIT(n
), r
, "Failed to make starter: %m");
549 busname_enter_listening(n
);
555 busname_enter_dead(n
, BUSNAME_FAILURE_RESOURCES
);
558 static void busname_enter_running(BusName
*n
) {
559 _cleanup_bus_error_free_ sd_bus_error error
= SD_BUS_ERROR_NULL
;
560 bool pending
= false;
570 /* We don't take connections anymore if we are supposed to
571 * shut down anyway */
573 if (unit_stop_pending(UNIT(n
))) {
574 log_unit_debug(UNIT(n
), "Suppressing activation request since unit stop is scheduled.");
576 /* Flush all queued activation reqeuest by closing and reopening the connection */
577 bus_kernel_drop_one(n
->starter_fd
);
579 busname_enter_listening(n
);
583 /* If there's already a start pending don't bother to do
585 SET_FOREACH(other
, UNIT(n
)->dependencies
[UNIT_TRIGGERS
], i
)
586 if (unit_active_or_pending(other
)) {
592 if (!UNIT_ISSET(n
->service
)) {
593 log_unit_error(UNIT(n
), "Service to activate vanished, refusing activation.");
598 r
= manager_add_job(UNIT(n
)->manager
, JOB_START
, UNIT_DEREF(n
->service
), JOB_REPLACE
, true, &error
, NULL
);
603 busname_set_state(n
, BUSNAME_RUNNING
);
607 log_unit_warning(UNIT(n
), "Failed to queue service startup job: %s", bus_error_message(&error
, r
));
608 busname_enter_dead(n
, BUSNAME_FAILURE_RESOURCES
);
611 static int busname_start(Unit
*u
) {
612 BusName
*n
= BUSNAME(u
);
616 /* We cannot fulfill this request right now, try again later
618 if (IN_SET(n
->state
, BUSNAME_SIGTERM
, BUSNAME_SIGKILL
))
622 if (n
->state
== BUSNAME_MAKING
)
625 if (n
->activating
&& UNIT_ISSET(n
->service
)) {
628 service
= SERVICE(UNIT_DEREF(n
->service
));
630 if (UNIT(service
)->load_state
!= UNIT_LOADED
) {
631 log_unit_error(u
, "Bus service %s not loaded, refusing.", UNIT(service
)->id
);
636 assert(IN_SET(n
->state
, BUSNAME_DEAD
, BUSNAME_FAILED
));
638 n
->result
= BUSNAME_SUCCESS
;
639 busname_enter_making(n
);
644 static int busname_stop(Unit
*u
) {
645 BusName
*n
= BUSNAME(u
);
650 if (IN_SET(n
->state
, BUSNAME_SIGTERM
, BUSNAME_SIGKILL
))
653 /* If there's already something running, we go directly into
656 if (n
->state
== BUSNAME_MAKING
) {
657 busname_enter_signal(n
, BUSNAME_SIGTERM
, BUSNAME_SUCCESS
);
661 assert(IN_SET(n
->state
, BUSNAME_REGISTERED
, BUSNAME_LISTENING
, BUSNAME_RUNNING
));
663 busname_enter_dead(n
, BUSNAME_SUCCESS
);
667 static int busname_serialize(Unit
*u
, FILE *f
, FDSet
*fds
) {
668 BusName
*n
= BUSNAME(u
);
675 unit_serialize_item(u
, f
, "state", busname_state_to_string(n
->state
));
676 unit_serialize_item(u
, f
, "result", busname_result_to_string(n
->result
));
678 if (n
->control_pid
> 0)
679 unit_serialize_item_format(u
, f
, "control-pid", PID_FMT
, n
->control_pid
);
681 r
= unit_serialize_item_fd(u
, f
, fds
, "starter-fd", n
->starter_fd
);
688 static int busname_deserialize_item(Unit
*u
, const char *key
, const char *value
, FDSet
*fds
) {
689 BusName
*n
= BUSNAME(u
);
695 if (streq(key
, "state")) {
698 state
= busname_state_from_string(value
);
700 log_unit_debug(u
, "Failed to parse state value: %s", value
);
702 n
->deserialized_state
= state
;
704 } else if (streq(key
, "result")) {
707 f
= busname_result_from_string(value
);
709 log_unit_debug(u
, "Failed to parse result value: %s", value
);
710 else if (f
!= BUSNAME_SUCCESS
)
713 } else if (streq(key
, "control-pid")) {
716 if (parse_pid(value
, &pid
) < 0)
717 log_unit_debug(u
, "Failed to parse control-pid value: %s", value
);
719 n
->control_pid
= pid
;
720 } else if (streq(key
, "starter-fd")) {
723 if (safe_atoi(value
, &fd
) < 0 || fd
< 0 || !fdset_contains(fds
, fd
))
724 log_unit_debug(u
, "Failed to parse starter fd value: %s", value
);
726 safe_close(n
->starter_fd
);
727 n
->starter_fd
= fdset_remove(fds
, fd
);
730 log_unit_debug(u
, "Unknown serialization key: %s", key
);
735 _pure_
static UnitActiveState
busname_active_state(Unit
*u
) {
738 return state_translation_table
[BUSNAME(u
)->state
];
741 _pure_
static const char *busname_sub_state_to_string(Unit
*u
) {
744 return busname_state_to_string(BUSNAME(u
)->state
);
747 static int busname_peek_message(BusName
*n
) {
748 struct kdbus_cmd_recv cmd_recv
= {
749 .size
= sizeof(cmd_recv
),
750 .flags
= KDBUS_RECV_PEEK
,
752 struct kdbus_cmd_free cmd_free
= {
753 .size
= sizeof(cmd_free
),
755 const char *comm
= NULL
;
756 struct kdbus_item
*d
;
758 size_t start
, ps
, sz
, delta
;
763 /* Generate a friendly debug log message about which process
764 * caused triggering of this bus name. This simply peeks the
765 * metadata of the first queued message and logs it. */
769 /* Let's shortcut things a bit, if debug logging is turned off
772 if (log_get_max_level() < LOG_DEBUG
)
775 r
= ioctl(n
->starter_fd
, KDBUS_CMD_RECV
, &cmd_recv
);
777 if (errno
== EINTR
|| errno
== EAGAIN
)
780 return log_unit_error_errno(UNIT(n
), errno
, "Failed to query activation message: %m");
783 /* We map as late as possible, and unmap imemdiately after
784 * use. On 32bit address space is scarce and we want to be
785 * able to handle a lot of activator connections at the same
786 * time, and hence shouldn't keep the mmap()s around for
787 * longer than necessary. */
790 start
= (cmd_recv
.msg
.offset
/ ps
) * ps
;
791 delta
= cmd_recv
.msg
.offset
- start
;
792 sz
= PAGE_ALIGN(delta
+ cmd_recv
.msg
.msg_size
);
794 p
= mmap(NULL
, sz
, PROT_READ
, MAP_SHARED
, n
->starter_fd
, start
);
795 if (p
== MAP_FAILED
) {
796 r
= log_unit_error_errno(UNIT(n
), errno
, "Failed to map activation message: %m");
800 k
= (struct kdbus_msg
*) ((uint8_t *) p
+ delta
);
801 KDBUS_ITEM_FOREACH(d
, k
, items
) {
804 case KDBUS_ITEM_PIDS
:
808 case KDBUS_ITEM_PID_COMM
:
815 log_unit_debug(UNIT(n
), "Activation triggered by process " PID_FMT
" (%s)", pid
, strna(comm
));
821 (void) munmap(p
, sz
);
823 cmd_free
.offset
= cmd_recv
.msg
.offset
;
824 if (ioctl(n
->starter_fd
, KDBUS_CMD_FREE
, &cmd_free
) < 0)
825 log_unit_warning(UNIT(n
), "Failed to free peeked message, ignoring: %m");
830 static int busname_dispatch_io(sd_event_source
*source
, int fd
, uint32_t revents
, void *userdata
) {
831 BusName
*n
= userdata
;
836 if (n
->state
!= BUSNAME_LISTENING
)
839 log_unit_debug(UNIT(n
), "Activation request");
841 if (revents
!= EPOLLIN
) {
842 log_unit_error(UNIT(n
), "Got unexpected poll event (0x%x) on starter fd.", revents
);
846 busname_peek_message(n
);
847 busname_enter_running(n
);
851 busname_enter_dead(n
, BUSNAME_FAILURE_RESOURCES
);
855 static void busname_sigchld_event(Unit
*u
, pid_t pid
, int code
, int status
) {
856 BusName
*n
= BUSNAME(u
);
862 if (pid
!= n
->control_pid
)
867 if (is_clean_exit(code
, status
, NULL
))
869 else if (code
== CLD_EXITED
)
870 f
= BUSNAME_FAILURE_EXIT_CODE
;
871 else if (code
== CLD_KILLED
)
872 f
= BUSNAME_FAILURE_SIGNAL
;
873 else if (code
== CLD_DUMPED
)
874 f
= BUSNAME_FAILURE_CORE_DUMP
;
876 assert_not_reached("Unknown sigchld code");
878 log_unit_full(u
, f
== BUSNAME_SUCCESS
? LOG_DEBUG
: LOG_NOTICE
, 0,
879 "Control process exited, code=%s status=%i", sigchld_code_to_string(code
), status
);
881 if (f
!= BUSNAME_SUCCESS
)
887 if (f
== BUSNAME_SUCCESS
)
888 busname_enter_listening(n
);
890 busname_enter_signal(n
, BUSNAME_SIGTERM
, f
);
893 case BUSNAME_SIGTERM
:
894 case BUSNAME_SIGKILL
:
895 busname_enter_dead(n
, f
);
899 assert_not_reached("Uh, control process died at wrong time.");
902 /* Notify clients about changed exit status */
903 unit_add_to_dbus_queue(u
);
906 static int busname_dispatch_timer(sd_event_source
*source
, usec_t usec
, void *userdata
) {
907 BusName
*n
= BUSNAME(userdata
);
910 assert(n
->timer_event_source
== source
);
915 log_unit_warning(UNIT(n
), "Making timed out. Terminating.");
916 busname_enter_signal(n
, BUSNAME_SIGTERM
, BUSNAME_FAILURE_TIMEOUT
);
919 case BUSNAME_SIGTERM
:
920 log_unit_warning(UNIT(n
), "Stopping timed out. Killing.");
921 busname_enter_signal(n
, BUSNAME_SIGKILL
, BUSNAME_FAILURE_TIMEOUT
);
924 case BUSNAME_SIGKILL
:
925 log_unit_warning(UNIT(n
), "Processes still around after SIGKILL. Ignoring.");
926 busname_enter_dead(n
, BUSNAME_FAILURE_TIMEOUT
);
930 assert_not_reached("Timeout at wrong time.");
936 static void busname_reset_failed(Unit
*u
) {
937 BusName
*n
= BUSNAME(u
);
941 if (n
->state
== BUSNAME_FAILED
)
942 busname_set_state(n
, BUSNAME_DEAD
);
944 n
->result
= BUSNAME_SUCCESS
;
947 static void busname_trigger_notify(Unit
*u
, Unit
*other
) {
948 BusName
*n
= BUSNAME(u
);
954 if (!IN_SET(n
->state
, BUSNAME_RUNNING
, BUSNAME_LISTENING
))
957 if (other
->load_state
!= UNIT_LOADED
|| other
->type
!= UNIT_SERVICE
)
962 if (s
->state
== SERVICE_FAILED
&& s
->result
== SERVICE_FAILURE_START_LIMIT
)
963 busname_enter_dead(n
, BUSNAME_FAILURE_SERVICE_FAILED_PERMANENT
);
964 else if (IN_SET(s
->state
,
965 SERVICE_DEAD
, SERVICE_FAILED
,
966 SERVICE_STOP
, SERVICE_STOP_SIGTERM
, SERVICE_STOP_SIGKILL
,
967 SERVICE_STOP_POST
, SERVICE_FINAL_SIGTERM
, SERVICE_FINAL_SIGKILL
,
968 SERVICE_AUTO_RESTART
))
969 busname_enter_listening(n
);
972 static int busname_kill(Unit
*u
, KillWho who
, int signo
, sd_bus_error
*error
) {
973 return unit_kill_common(u
, who
, signo
, -1, BUSNAME(u
)->control_pid
, error
);
976 static int busname_get_timeout(Unit
*u
, uint64_t *timeout
) {
977 BusName
*n
= BUSNAME(u
);
980 if (!n
->timer_event_source
)
983 r
= sd_event_source_get_time(n
->timer_event_source
, timeout
);
990 static bool busname_supported(void) {
991 static int supported
= -1;
994 supported
= is_kdbus_available();
999 static const char* const busname_result_table
[_BUSNAME_RESULT_MAX
] = {
1000 [BUSNAME_SUCCESS
] = "success",
1001 [BUSNAME_FAILURE_RESOURCES
] = "resources",
1002 [BUSNAME_FAILURE_TIMEOUT
] = "timeout",
1003 [BUSNAME_FAILURE_EXIT_CODE
] = "exit-code",
1004 [BUSNAME_FAILURE_SIGNAL
] = "signal",
1005 [BUSNAME_FAILURE_CORE_DUMP
] = "core-dump",
1006 [BUSNAME_FAILURE_SERVICE_FAILED_PERMANENT
] = "service-failed-permanent",
1009 DEFINE_STRING_TABLE_LOOKUP(busname_result
, BusNameResult
);
1011 const UnitVTable busname_vtable
= {
1012 .object_size
= sizeof(BusName
),
1018 .private_section
= "BusName",
1021 .no_instances
= true,
1023 .init
= busname_init
,
1024 .done
= busname_done
,
1025 .load
= busname_load
,
1027 .coldplug
= busname_coldplug
,
1029 .dump
= busname_dump
,
1031 .start
= busname_start
,
1032 .stop
= busname_stop
,
1034 .kill
= busname_kill
,
1036 .get_timeout
= busname_get_timeout
,
1038 .serialize
= busname_serialize
,
1039 .deserialize_item
= busname_deserialize_item
,
1041 .active_state
= busname_active_state
,
1042 .sub_state_to_string
= busname_sub_state_to_string
,
1044 .sigchld_event
= busname_sigchld_event
,
1046 .trigger_notify
= busname_trigger_notify
,
1048 .reset_failed
= busname_reset_failed
,
1050 .supported
= busname_supported
,
1052 .bus_vtable
= bus_busname_vtable
,
1054 .status_message_formats
= {
1055 .finished_start_job
= {
1056 [JOB_DONE
] = "Listening on %s.",
1057 [JOB_FAILED
] = "Failed to listen on %s.",
1059 .finished_stop_job
= {
1060 [JOB_DONE
] = "Closed %s.",
1061 [JOB_FAILED
] = "Failed stopping %s.",