1 /* SPDX-License-Identifier: LGPL-2.1+ */
5 #include "parse-util.h"
7 #include "unit-printf.h"
11 int bus_property_get_triggered_unit(
14 const char *interface
,
16 sd_bus_message
*reply
,
18 sd_bus_error
*error
) {
20 Unit
*u
= userdata
, *trigger
;
26 trigger
= UNIT_TRIGGER(u
);
28 return sd_bus_message_append(reply
, "s", trigger
? trigger
->id
: NULL
);
31 BUS_DEFINE_SET_TRANSIENT(mode_t
, "u", uint32_t, mode_t
, "%040o");
32 BUS_DEFINE_SET_TRANSIENT(unsigned, "u", uint32_t, unsigned, "%" PRIu32
);
34 static inline bool valid_user_group_name_or_id_relaxed(const char *u
) {
35 return valid_user_group_name(u
, VALID_USER_ALLOW_NUMERIC
|VALID_USER_RELAX
);
38 BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(user_relaxed
, valid_user_group_name_or_id_relaxed
);
39 BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(path
, path_is_absolute
);
41 int bus_set_transient_string(
45 sd_bus_message
*message
,
47 sd_bus_error
*error
) {
54 r
= sd_bus_message_read(message
, "s", &v
);
58 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
59 r
= free_and_strdup(p
, empty_to_null(v
));
63 unit_write_settingf(u
, flags
|UNIT_ESCAPE_SPECIFIERS
, name
,
64 "%s=%s", name
, strempty(v
));
70 int bus_set_transient_bool(
74 sd_bus_message
*message
,
76 sd_bus_error
*error
) {
82 r
= sd_bus_message_read(message
, "b", &v
);
86 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
88 unit_write_settingf(u
, flags
, name
, "%s=%s", name
, yes_no(v
));
94 int bus_set_transient_usec_internal(
99 sd_bus_message
*message
,
100 UnitWriteFlags flags
,
101 sd_bus_error
*error
) {
108 r
= sd_bus_message_read(message
, "t", &v
);
112 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
113 char *n
, ts
[FORMAT_TIMESPAN_MAX
];
116 *p
= v
!= 0 ? v
: USEC_INFINITY
;
120 n
= strndupa(name
, strlen(name
) - 4);
121 unit_write_settingf(u
, flags
, name
, "%sSec=%s", n
,
122 format_timespan(ts
, sizeof(ts
), v
, USEC_PER_MSEC
));