1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 #include "alloc-util.h"
5 #include "dbus-cgroup.h"
6 #include "dbus-execute.h"
8 #include "dbus-socket.h"
11 #include "parse-util.h"
12 #include "path-util.h"
14 #include "socket-protocol-list.h"
15 #include "socket-util.h"
16 #include "string-util.h"
19 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result
, socket_result
, SocketResult
);
20 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_bind_ipv6_only
, socket_address_bind_ipv6_only
, SocketAddressBindIPv6Only
);
21 static BUS_DEFINE_PROPERTY_GET(property_get_fdname
, "s", Socket
, socket_fdname
);
23 static int property_get_listen(
26 const char *interface
,
28 sd_bus_message
*reply
,
30 sd_bus_error
*error
) {
32 Socket
*s
= SOCKET(userdata
);
40 r
= sd_bus_message_open_container(reply
, 'a', "(ss)");
44 LIST_FOREACH(port
, p
, s
->ports
) {
45 _cleanup_free_
char *address
= NULL
;
50 r
= socket_address_print(&p
->address
, &address
);
61 case SOCKET_USB_FUNCTION
:
66 assert_not_reached("Unknown socket type");
69 r
= sd_bus_message_append(reply
, "(ss)", socket_port_type_to_string(p
), a
);
74 return sd_bus_message_close_container(reply
);
77 const sd_bus_vtable bus_socket_vtable
[] = {
78 SD_BUS_VTABLE_START(0),
79 SD_BUS_PROPERTY("BindIPv6Only", "s", property_get_bind_ipv6_only
, offsetof(Socket
, bind_ipv6_only
), SD_BUS_VTABLE_PROPERTY_CONST
),
80 SD_BUS_PROPERTY("Backlog", "u", bus_property_get_unsigned
, offsetof(Socket
, backlog
), SD_BUS_VTABLE_PROPERTY_CONST
),
81 SD_BUS_PROPERTY("TimeoutUSec", "t", bus_property_get_usec
, offsetof(Socket
, timeout_usec
), SD_BUS_VTABLE_PROPERTY_CONST
),
82 SD_BUS_PROPERTY("BindToDevice", "s", NULL
, offsetof(Socket
, bind_to_device
), SD_BUS_VTABLE_PROPERTY_CONST
),
83 SD_BUS_PROPERTY("SocketUser", "s", NULL
, offsetof(Socket
, user
), SD_BUS_VTABLE_PROPERTY_CONST
),
84 SD_BUS_PROPERTY("SocketGroup", "s", NULL
, offsetof(Socket
, group
), SD_BUS_VTABLE_PROPERTY_CONST
),
85 SD_BUS_PROPERTY("SocketMode", "u", bus_property_get_mode
, offsetof(Socket
, socket_mode
), SD_BUS_VTABLE_PROPERTY_CONST
),
86 SD_BUS_PROPERTY("DirectoryMode", "u", bus_property_get_mode
, offsetof(Socket
, directory_mode
), SD_BUS_VTABLE_PROPERTY_CONST
),
87 SD_BUS_PROPERTY("Accept", "b", bus_property_get_bool
, offsetof(Socket
, accept
), SD_BUS_VTABLE_PROPERTY_CONST
),
88 SD_BUS_PROPERTY("Writable", "b", bus_property_get_bool
, offsetof(Socket
, writable
), SD_BUS_VTABLE_PROPERTY_CONST
),
89 SD_BUS_PROPERTY("KeepAlive", "b", bus_property_get_bool
, offsetof(Socket
, keep_alive
), SD_BUS_VTABLE_PROPERTY_CONST
),
90 SD_BUS_PROPERTY("KeepAliveTimeUSec", "t", bus_property_get_usec
, offsetof(Socket
, keep_alive_time
), SD_BUS_VTABLE_PROPERTY_CONST
),
91 SD_BUS_PROPERTY("KeepAliveIntervalUSec", "t", bus_property_get_usec
, offsetof(Socket
, keep_alive_interval
), SD_BUS_VTABLE_PROPERTY_CONST
),
92 SD_BUS_PROPERTY("KeepAliveProbes", "u", bus_property_get_unsigned
, offsetof(Socket
, keep_alive_cnt
), SD_BUS_VTABLE_PROPERTY_CONST
),
93 SD_BUS_PROPERTY("DeferAcceptUSec" , "t", bus_property_get_usec
, offsetof(Socket
, defer_accept
), SD_BUS_VTABLE_PROPERTY_CONST
),
94 SD_BUS_PROPERTY("NoDelay", "b", bus_property_get_bool
, offsetof(Socket
, no_delay
), SD_BUS_VTABLE_PROPERTY_CONST
),
95 SD_BUS_PROPERTY("Priority", "i", bus_property_get_int
, offsetof(Socket
, priority
), SD_BUS_VTABLE_PROPERTY_CONST
),
96 SD_BUS_PROPERTY("ReceiveBuffer", "t", bus_property_get_size
, offsetof(Socket
, receive_buffer
), SD_BUS_VTABLE_PROPERTY_CONST
),
97 SD_BUS_PROPERTY("SendBuffer", "t", bus_property_get_size
, offsetof(Socket
, send_buffer
), SD_BUS_VTABLE_PROPERTY_CONST
),
98 SD_BUS_PROPERTY("IPTOS", "i", bus_property_get_int
, offsetof(Socket
, ip_tos
), SD_BUS_VTABLE_PROPERTY_CONST
),
99 SD_BUS_PROPERTY("IPTTL", "i", bus_property_get_int
, offsetof(Socket
, ip_ttl
), SD_BUS_VTABLE_PROPERTY_CONST
),
100 SD_BUS_PROPERTY("PipeSize", "t", bus_property_get_size
, offsetof(Socket
, pipe_size
), SD_BUS_VTABLE_PROPERTY_CONST
),
101 SD_BUS_PROPERTY("FreeBind", "b", bus_property_get_bool
, offsetof(Socket
, free_bind
), SD_BUS_VTABLE_PROPERTY_CONST
),
102 SD_BUS_PROPERTY("Transparent", "b", bus_property_get_bool
, offsetof(Socket
, transparent
), SD_BUS_VTABLE_PROPERTY_CONST
),
103 SD_BUS_PROPERTY("Broadcast", "b", bus_property_get_bool
, offsetof(Socket
, broadcast
), SD_BUS_VTABLE_PROPERTY_CONST
),
104 SD_BUS_PROPERTY("PassCredentials", "b", bus_property_get_bool
, offsetof(Socket
, pass_cred
), SD_BUS_VTABLE_PROPERTY_CONST
),
105 SD_BUS_PROPERTY("PassSecurity", "b", bus_property_get_bool
, offsetof(Socket
, pass_sec
), SD_BUS_VTABLE_PROPERTY_CONST
),
106 SD_BUS_PROPERTY("RemoveOnStop", "b", bus_property_get_bool
, offsetof(Socket
, remove_on_stop
), SD_BUS_VTABLE_PROPERTY_CONST
),
107 SD_BUS_PROPERTY("Listen", "a(ss)", property_get_listen
, 0, SD_BUS_VTABLE_PROPERTY_CONST
),
108 SD_BUS_PROPERTY("Symlinks", "as", NULL
, offsetof(Socket
, symlinks
), SD_BUS_VTABLE_PROPERTY_CONST
),
109 SD_BUS_PROPERTY("Mark", "i", bus_property_get_int
, offsetof(Socket
, mark
), SD_BUS_VTABLE_PROPERTY_CONST
),
110 SD_BUS_PROPERTY("MaxConnections", "u", bus_property_get_unsigned
, offsetof(Socket
, max_connections
), SD_BUS_VTABLE_PROPERTY_CONST
),
111 SD_BUS_PROPERTY("MaxConnectionsPerSource", "u", bus_property_get_unsigned
, offsetof(Socket
, max_connections_per_source
), SD_BUS_VTABLE_PROPERTY_CONST
),
112 SD_BUS_PROPERTY("MessageQueueMaxMessages", "x", bus_property_get_long
, offsetof(Socket
, mq_maxmsg
), SD_BUS_VTABLE_PROPERTY_CONST
),
113 SD_BUS_PROPERTY("MessageQueueMessageSize", "x", bus_property_get_long
, offsetof(Socket
, mq_msgsize
), SD_BUS_VTABLE_PROPERTY_CONST
),
114 SD_BUS_PROPERTY("TCPCongestion", "s", NULL
, offsetof(Socket
, tcp_congestion
), SD_BUS_VTABLE_PROPERTY_CONST
),
115 SD_BUS_PROPERTY("ReusePort", "b", bus_property_get_bool
, offsetof(Socket
, reuse_port
), SD_BUS_VTABLE_PROPERTY_CONST
),
116 SD_BUS_PROPERTY("SmackLabel", "s", NULL
, offsetof(Socket
, smack
), SD_BUS_VTABLE_PROPERTY_CONST
),
117 SD_BUS_PROPERTY("SmackLabelIPIn", "s", NULL
, offsetof(Socket
, smack_ip_in
), SD_BUS_VTABLE_PROPERTY_CONST
),
118 SD_BUS_PROPERTY("SmackLabelIPOut", "s", NULL
, offsetof(Socket
, smack_ip_out
), SD_BUS_VTABLE_PROPERTY_CONST
),
119 SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid
, offsetof(Socket
, control_pid
), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE
),
120 SD_BUS_PROPERTY("Result", "s", property_get_result
, offsetof(Socket
, result
), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE
),
121 SD_BUS_PROPERTY("NConnections", "u", bus_property_get_unsigned
, offsetof(Socket
, n_connections
), 0),
122 SD_BUS_PROPERTY("NAccepted", "u", bus_property_get_unsigned
, offsetof(Socket
, n_accepted
), 0),
123 SD_BUS_PROPERTY("NRefused", "u", bus_property_get_unsigned
, offsetof(Socket
, n_refused
), 0),
124 SD_BUS_PROPERTY("FileDescriptorName", "s", property_get_fdname
, 0, 0),
125 SD_BUS_PROPERTY("SocketProtocol", "i", bus_property_get_int
, offsetof(Socket
, socket_protocol
), SD_BUS_VTABLE_PROPERTY_CONST
),
126 SD_BUS_PROPERTY("TriggerLimitIntervalUSec", "t", bus_property_get_usec
, offsetof(Socket
, trigger_limit
.interval
), SD_BUS_VTABLE_PROPERTY_CONST
),
127 SD_BUS_PROPERTY("TriggerLimitBurst", "u", bus_property_get_unsigned
, offsetof(Socket
, trigger_limit
.burst
), SD_BUS_VTABLE_PROPERTY_CONST
),
128 SD_BUS_PROPERTY("UID", "u", bus_property_get_uid
, offsetof(Unit
, ref_uid
), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE
),
129 SD_BUS_PROPERTY("GID", "u", bus_property_get_gid
, offsetof(Unit
, ref_gid
), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE
),
130 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPre", offsetof(Socket
, exec_command
[SOCKET_EXEC_START_PRE
]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION
),
131 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPost", offsetof(Socket
, exec_command
[SOCKET_EXEC_START_POST
]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION
),
132 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStopPre", offsetof(Socket
, exec_command
[SOCKET_EXEC_STOP_PRE
]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION
),
133 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStopPost", offsetof(Socket
, exec_command
[SOCKET_EXEC_STOP_POST
]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION
),
137 static inline bool check_size_t_truncation(uint64_t t
) {
138 return (size_t) t
== t
;
141 static inline const char* supported_socket_protocol_to_string(int32_t i
) {
145 if (!IN_SET(i
, IPPROTO_UDPLITE
, IPPROTO_SCTP
))
148 return socket_protocol_to_name(i
);
151 static BUS_DEFINE_SET_TRANSIENT(int, "i", int32_t, int, "%" PRIi32
);
152 static BUS_DEFINE_SET_TRANSIENT(message_queue
, "x", int64_t, long, "%" PRIi64
);
153 static BUS_DEFINE_SET_TRANSIENT_IS_VALID(size_t_check_truncation
, "t", uint64_t, size_t, "%" PRIu64
, check_size_t_truncation
);
154 static BUS_DEFINE_SET_TRANSIENT_PARSE(bind_ipv6_only
, SocketAddressBindIPv6Only
, socket_address_bind_ipv6_only_or_bool_from_string
);
155 static BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(fdname
, fdname_is_valid
);
156 static BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(ifname
, ifname_valid
);
157 static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(ip_tos
, "i", int32_t, int, "%" PRIi32
, ip_tos_to_string_alloc
);
158 static BUS_DEFINE_SET_TRANSIENT_TO_STRING(socket_protocol
, "i", int32_t, int, "%" PRIi32
, supported_socket_protocol_to_string
);
160 static int bus_socket_set_transient_property(
163 sd_bus_message
*message
,
164 UnitWriteFlags flags
,
165 sd_bus_error
*error
) {
167 SocketExecCommand ci
;
175 flags
|= UNIT_PRIVATE
;
177 if (streq(name
, "Accept"))
178 return bus_set_transient_bool(u
, name
, &s
->accept
, message
, flags
, error
);
180 if (streq(name
, "Writable"))
181 return bus_set_transient_bool(u
, name
, &s
->writable
, message
, flags
, error
);
183 if (streq(name
, "KeepAlive"))
184 return bus_set_transient_bool(u
, name
, &s
->keep_alive
, message
, flags
, error
);
186 if (streq(name
, "NoDelay"))
187 return bus_set_transient_bool(u
, name
, &s
->no_delay
, message
, flags
, error
);
189 if (streq(name
, "FreeBind"))
190 return bus_set_transient_bool(u
, name
, &s
->free_bind
, message
, flags
, error
);
192 if (streq(name
, "Transparent"))
193 return bus_set_transient_bool(u
, name
, &s
->transparent
, message
, flags
, error
);
195 if (streq(name
, "Broadcast"))
196 return bus_set_transient_bool(u
, name
, &s
->broadcast
, message
, flags
, error
);
198 if (streq(name
, "PassCredentials"))
199 return bus_set_transient_bool(u
, name
, &s
->pass_cred
, message
, flags
, error
);
201 if (streq(name
, "PassSecurity"))
202 return bus_set_transient_bool(u
, name
, &s
->pass_sec
, message
, flags
, error
);
204 if (streq(name
, "ReusePort"))
205 return bus_set_transient_bool(u
, name
, &s
->reuse_port
, message
, flags
, error
);
207 if (streq(name
, "RemoveOnStop"))
208 return bus_set_transient_bool(u
, name
, &s
->remove_on_stop
, message
, flags
, error
);
210 if (streq(name
, "SELinuxContextFromNet"))
211 return bus_set_transient_bool(u
, name
, &s
->selinux_context_from_net
, message
, flags
, error
);
213 if (streq(name
, "Priority"))
214 return bus_set_transient_int(u
, name
, &s
->priority
, message
, flags
, error
);
216 if (streq(name
, "IPTTL"))
217 return bus_set_transient_int(u
, name
, &s
->ip_ttl
, message
, flags
, error
);
219 if (streq(name
, "Mark"))
220 return bus_set_transient_int(u
, name
, &s
->mark
, message
, flags
, error
);
222 if (streq(name
, "Backlog"))
223 return bus_set_transient_unsigned(u
, name
, &s
->backlog
, message
, flags
, error
);
225 if (streq(name
, "MaxConnections"))
226 return bus_set_transient_unsigned(u
, name
, &s
->max_connections
, message
, flags
, error
);
228 if (streq(name
, "MaxConnectionsPerSource"))
229 return bus_set_transient_unsigned(u
, name
, &s
->max_connections_per_source
, message
, flags
, error
);
231 if (streq(name
, "KeepAliveProbes"))
232 return bus_set_transient_unsigned(u
, name
, &s
->keep_alive_cnt
, message
, flags
, error
);
234 if (streq(name
, "TriggerLimitBurst"))
235 return bus_set_transient_unsigned(u
, name
, &s
->trigger_limit
.burst
, message
, flags
, error
);
237 if (streq(name
, "SocketMode"))
238 return bus_set_transient_mode_t(u
, name
, &s
->socket_mode
, message
, flags
, error
);
240 if (streq(name
, "DirectoryMode"))
241 return bus_set_transient_mode_t(u
, name
, &s
->directory_mode
, message
, flags
, error
);
243 if (streq(name
, "MessageQueueMaxMessages"))
244 return bus_set_transient_message_queue(u
, name
, &s
->mq_maxmsg
, message
, flags
, error
);
246 if (streq(name
, "MessageQueueMessageSize"))
247 return bus_set_transient_message_queue(u
, name
, &s
->mq_msgsize
, message
, flags
, error
);
249 if (streq(name
, "TimeoutUSec"))
250 return bus_set_transient_usec_fix_0(u
, name
, &s
->timeout_usec
, message
, flags
, error
);
252 if (streq(name
, "KeepAliveTimeUSec"))
253 return bus_set_transient_usec(u
, name
, &s
->keep_alive_time
, message
, flags
, error
);
255 if (streq(name
, "KeepAliveIntervalUSec"))
256 return bus_set_transient_usec(u
, name
, &s
->keep_alive_interval
, message
, flags
, error
);
258 if (streq(name
, "DeferAcceptUSec"))
259 return bus_set_transient_usec(u
, name
, &s
->defer_accept
, message
, flags
, error
);
261 if (streq(name
, "TriggerLimitIntervalUSec"))
262 return bus_set_transient_usec(u
, name
, &s
->trigger_limit
.interval
, message
, flags
, error
);
264 if (streq(name
, "SmackLabel"))
265 return bus_set_transient_string(u
, name
, &s
->smack
, message
, flags
, error
);
267 if (streq(name
, "SmackLabelIPin"))
268 return bus_set_transient_string(u
, name
, &s
->smack_ip_in
, message
, flags
, error
);
270 if (streq(name
, "SmackLabelIPOut"))
271 return bus_set_transient_string(u
, name
, &s
->smack_ip_out
, message
, flags
, error
);
273 if (streq(name
, "TCPCongestion"))
274 return bus_set_transient_string(u
, name
, &s
->tcp_congestion
, message
, flags
, error
);
276 if (streq(name
, "FileDescriptorName"))
277 return bus_set_transient_fdname(u
, name
, &s
->fdname
, message
, flags
, error
);
279 if (streq(name
, "SocketUser"))
280 return bus_set_transient_user(u
, name
, &s
->user
, message
, flags
, error
);
282 if (streq(name
, "SocketGroup"))
283 return bus_set_transient_user(u
, name
, &s
->group
, message
, flags
, error
);
285 if (streq(name
, "BindIPv6Only"))
286 return bus_set_transient_bind_ipv6_only(u
, name
, &s
->bind_ipv6_only
, message
, flags
, error
);
288 if (streq(name
, "ReceiveBuffer"))
289 return bus_set_transient_size_t_check_truncation(u
, name
, &s
->receive_buffer
, message
, flags
, error
);
291 if (streq(name
, "SendBuffer"))
292 return bus_set_transient_size_t_check_truncation(u
, name
, &s
->send_buffer
, message
, flags
, error
);
294 if (streq(name
, "PipeSize"))
295 return bus_set_transient_size_t_check_truncation(u
, name
, &s
->pipe_size
, message
, flags
, error
);
297 if (streq(name
, "BindToDevice"))
298 return bus_set_transient_ifname(u
, name
, &s
->bind_to_device
, message
, flags
, error
);
300 if (streq(name
, "IPTOS"))
301 return bus_set_transient_ip_tos(u
, name
, &s
->ip_tos
, message
, flags
, error
);
303 if (streq(name
, "SocketProtocol"))
304 return bus_set_transient_socket_protocol(u
, name
, &s
->socket_protocol
, message
, flags
, error
);
306 if ((ci
= socket_exec_command_from_string(name
)) >= 0)
307 return bus_set_transient_exec_command(u
, name
, &s
->exec_command
[ci
], message
, flags
, error
);
309 if (streq(name
, "Symlinks")) {
310 _cleanup_strv_free_
char **l
= NULL
;
313 r
= sd_bus_message_read_strv(message
, &l
);
318 if (!path_is_absolute(*p
))
319 return sd_bus_error_setf(error
, SD_BUS_ERROR_INVALID_ARGS
, "Symlink path is not absolute: %s", *p
);
322 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
323 if (strv_isempty(l
)) {
324 s
->symlinks
= strv_free(s
->symlinks
);
325 unit_write_settingf(u
, flags
|UNIT_ESCAPE_SPECIFIERS
, name
, "%s=", name
);
327 _cleanup_free_
char *joined
= NULL
;
329 r
= strv_extend_strv(&s
->symlinks
, l
, true);
333 joined
= strv_join(l
, " ");
337 unit_write_settingf(u
, flags
|UNIT_ESCAPE_SPECIFIERS
, name
, "%s=%s", name
, joined
);
343 } else if (streq(name
, "Listen")) {
347 r
= sd_bus_message_enter_container(message
, 'a', "(ss)");
351 while ((r
= sd_bus_message_read(message
, "(ss)", &t
, &a
)) > 0) {
352 _cleanup_free_ SocketPort
*p
= NULL
;
354 p
= new0(SocketPort
, 1);
358 p
->type
= socket_port_type_from_string(t
);
360 return sd_bus_error_setf(error
, SD_BUS_ERROR_INVALID_ARGS
, "Unknown Socket type: %s", t
);
362 if (p
->type
!= SOCKET_SOCKET
) {
364 path_simplify(p
->path
, false);
366 } else if (streq(t
, "Netlink")) {
367 r
= socket_address_parse_netlink(&p
->address
, a
);
369 return sd_bus_error_setf(error
, SD_BUS_ERROR_INVALID_ARGS
, "Invalid netlink address: %s", a
);
372 r
= socket_address_parse(&p
->address
, a
);
374 return sd_bus_error_setf(error
, SD_BUS_ERROR_INVALID_ARGS
, "Invalid address: %s", a
);
376 p
->address
.type
= socket_address_type_from_string(t
);
377 if (p
->address
.type
< 0)
378 return sd_bus_error_setf(error
, SD_BUS_ERROR_INVALID_ARGS
, "Invalid address type: %s", t
);
380 if (socket_address_family(&p
->address
) != AF_LOCAL
&& p
->address
.type
== SOCK_SEQPACKET
)
381 return sd_bus_error_setf(error
, SD_BUS_ERROR_INVALID_ARGS
, "Address family not supported: %s", a
);
385 p
->auxiliary_fds
= NULL
;
386 p
->n_auxiliary_fds
= 0;
391 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
394 LIST_FIND_TAIL(port
, s
->ports
, tail
);
395 LIST_INSERT_AFTER(port
, s
->ports
, tail
, p
);
399 unit_write_settingf(u
, flags
|UNIT_ESCAPE_SPECIFIERS
, name
, "Listen%s=%s", t
, a
);
405 r
= sd_bus_message_exit_container(message
);
409 if (!UNIT_WRITE_FLAGS_NOOP(flags
) && empty
) {
410 socket_free_ports(s
);
411 unit_write_settingf(u
, flags
|UNIT_ESCAPE_SPECIFIERS
, name
, "ListenStream=");
420 int bus_socket_set_property(
423 sd_bus_message
*message
,
424 UnitWriteFlags flags
,
425 sd_bus_error
*error
) {
427 Socket
*s
= SOCKET(u
);
438 r
= bus_cgroup_set_property(u
, &s
->cgroup_context
, name
, message
, flags
, error
);
442 if (u
->transient
&& u
->load_state
== UNIT_STUB
) {
443 /* This is a transient unit, let's load a little more */
445 r
= bus_socket_set_transient_property(s
, name
, message
, flags
, error
);
449 r
= bus_exec_context_set_transient_property(u
, &s
->exec_context
, name
, message
, flags
, error
);
453 r
= bus_kill_context_set_transient_property(u
, &s
->kill_context
, name
, message
, flags
, error
);
461 int bus_socket_commit_properties(Unit
*u
) {
464 unit_update_cgroup_members_masks(u
);
465 unit_realize_cgroup(u
);