Bug Summary

File:build-scan/../src/core/dbus-socket.c
Warning:line 368, column 40
Potential leak of memory pointed to by 'p'

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name dbus-socket.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=all -relaxed-aliasing -menable-no-infs -menable-no-nans -menable-unsafe-fp-math -fno-signed-zeros -mreassociate -freciprocal-math -fdenormal-fp-math=preserve-sign,preserve-sign -ffp-contract=fast -fno-rounding-math -ffast-math -ffinite-math-only -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/12.0.0 -include config.h -I src/core/libcore.a.p -I src/core -I ../src/core -I src/basic -I ../src/basic -I src/shared -I ../src/shared -I src/systemd -I ../src/systemd -I src/journal -I ../src/journal -I src/journal-remote -I ../src/journal-remote -I src/nspawn -I ../src/nspawn -I src/resolve -I ../src/resolve -I src/timesync -I ../src/timesync -I ../src/time-wait-sync -I src/login -I ../src/login -I src/udev -I ../src/udev -I src/libudev -I ../src/libudev -I ../src/libsystemd/sd-bus -I ../src/libsystemd/sd-device -I ../src/libsystemd/sd-hwdb -I ../src/libsystemd/sd-id128 -I ../src/libsystemd/sd-netlink -I ../src/libsystemd/sd-network -I src/libsystemd-network -I ../src/libsystemd-network -I . -I .. -I /usr/include/libmount -I /usr/include/blkid -D _FILE_OFFSET_BITS=64 -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/12.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wwrite-strings -Wno-unused-parameter -Wno-missing-field-initializers -Wno-unused-result -Wno-format-signedness -Wno-error=nonnull -std=gnu99 -fconst-strings -fdebug-compilation-dir /home/mrc0mmand/repos/@redhat-plumbers/systemd-rhel8/build-scan -ferror-limit 19 -fvisibility hidden -stack-protector 2 -fgnuc-version=4.2.1 -fcolor-diagnostics -analyzer-output=html -faddrsig -o /tmp/scan-build-2021-07-16-221226-1465241-1 -x c ../src/core/dbus-socket.c
1/* SPDX-License-Identifier: LGPL-2.1+ */
2
3#include "alloc-util.h"
4#include "bus-util.h"
5#include "dbus-cgroup.h"
6#include "dbus-execute.h"
7#include "dbus-kill.h"
8#include "dbus-socket.h"
9#include "dbus-util.h"
10#include "fd-util.h"
11#include "parse-util.h"
12#include "path-util.h"
13#include "socket.h"
14#include "socket-protocol-list.h"
15#include "socket-util.h"
16#include "string-util.h"
17#include "unit.h"
18
19static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result, socket_result, SocketResult)int property_get_result(sd_bus *bus, const char *path, const char
*interface, const char *property, sd_bus_message *reply, void
*userdata, sd_bus_error *error) { SocketResult *data = userdata
; do { if ((__builtin_expect(!!(!(bus)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("bus"), "../src/core/dbus-socket.c", 19,
__PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(reply)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD,
("reply"), "../src/core/dbus-socket.c", 19, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/core/dbus-socket.c", 19
, __PRETTY_FUNCTION__); } while (0); return sd_bus_message_append
(reply, "s", socket_result_to_string((*(data)))); }
;
20static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_bind_ipv6_only, socket_address_bind_ipv6_only, SocketAddressBindIPv6Only)int property_get_bind_ipv6_only(sd_bus *bus, const char *path
, const char *interface, const char *property, sd_bus_message
*reply, void *userdata, sd_bus_error *error) { SocketAddressBindIPv6Only
*data = userdata; do { if ((__builtin_expect(!!(!(bus)),0)))
log_assert_failed_realm(LOG_REALM_SYSTEMD, ("bus"), "../src/core/dbus-socket.c"
, 20, __PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(reply)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD,
("reply"), "../src/core/dbus-socket.c", 20, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/core/dbus-socket.c", 20
, __PRETTY_FUNCTION__); } while (0); return sd_bus_message_append
(reply, "s", socket_address_bind_ipv6_only_to_string((*(data)
))); }
;
21static BUS_DEFINE_PROPERTY_GET(property_get_fdname, "s", Socket, socket_fdname)int property_get_fdname(sd_bus *bus, const char *path, const char
*interface, const char *property, sd_bus_message *reply, void
*userdata, sd_bus_error *error) { Socket *data = userdata; do
{ if ((__builtin_expect(!!(!(bus)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("bus"), "../src/core/dbus-socket.c", 21,
__PRETTY_FUNCTION__); } while (0); do { if ((__builtin_expect
(!!(!(reply)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD,
("reply"), "../src/core/dbus-socket.c", 21, __PRETTY_FUNCTION__
); } while (0); do { if ((__builtin_expect(!!(!(data)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("data"), "../src/core/dbus-socket.c", 21
, __PRETTY_FUNCTION__); } while (0); return sd_bus_message_append
(reply, "s", (socket_fdname(data))); }
;
22
23static int property_get_listen(
24 sd_bus *bus,
25 const char *path,
26 const char *interface,
27 const char *property,
28 sd_bus_message *reply,
29 void *userdata,
30 sd_bus_error *error) {
31
32 Socket *s = SOCKET(userdata);
33 SocketPort *p;
34 int r;
35
36 assert(bus)do { if ((__builtin_expect(!!(!(bus)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("bus"), "../src/core/dbus-socket.c", 36,
__PRETTY_FUNCTION__); } while (0)
;
37 assert(reply)do { if ((__builtin_expect(!!(!(reply)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("reply"), "../src/core/dbus-socket.c", 37
, __PRETTY_FUNCTION__); } while (0)
;
38 assert(s)do { if ((__builtin_expect(!!(!(s)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("s"), "../src/core/dbus-socket.c", 38, __PRETTY_FUNCTION__
); } while (0)
;
39
40 r = sd_bus_message_open_container(reply, 'a', "(ss)");
41 if (r < 0)
42 return r;
43
44 LIST_FOREACH(port, p, s->ports)for ((p) = (s->ports); (p); (p) = (p)->port_next) {
45 _cleanup_free___attribute__((cleanup(freep))) char *address = NULL((void*)0);
46 const char *a;
47
48 switch (p->type) {
49 case SOCKET_SOCKET: {
50 r = socket_address_print(&p->address, &address);
51 if (r)
52 return r;
53
54 a = address;
55 break;
56 }
57
58 case SOCKET_SPECIAL:
59 case SOCKET_MQUEUE:
60 case SOCKET_FIFO:
61 case SOCKET_USB_FUNCTION:
62 a = p->path;
63 break;
64
65 default:
66 assert_not_reached("Unknown socket type")do { log_assert_failed_unreachable_realm(LOG_REALM_SYSTEMD, (
"Unknown socket type"), "../src/core/dbus-socket.c", 66, __PRETTY_FUNCTION__
); } while (0)
;
67 }
68
69 r = sd_bus_message_append(reply, "(ss)", socket_port_type_to_string(p), a);
70 if (r < 0)
71 return r;
72 }
73
74 return sd_bus_message_close_container(reply);
75}
76
77const sd_bus_vtable bus_socket_vtable[] = {
78 SD_BUS_VTABLE_START(0){ .type = _SD_BUS_VTABLE_START, .flags = 0, .x = { .start = {
.element_size = sizeof(sd_bus_vtable) }, }, }
,
79 SD_BUS_PROPERTY("BindIPv6Only", "s", property_get_bind_ipv6_only, offsetof(Socket, bind_ipv6_only), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "BindIPv6Only", .signature =
"s", .get = property_get_bind_ipv6_only, .set = ((void*)0), .
offset = __builtin_offsetof(Socket, bind_ipv6_only), }, }, }
,
80 SD_BUS_PROPERTY("Backlog", "u", bus_property_get_unsigned, offsetof(Socket, backlog), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "Backlog", .signature = "u",
.get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void*)
0), .offset = __builtin_offsetof(Socket, backlog), }, }, }
,
81 SD_BUS_PROPERTY("TimeoutUSec", "t", bus_property_get_usec, offsetof(Socket, timeout_usec), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "TimeoutUSec", .signature = "t"
, .get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void*
)0), .offset = __builtin_offsetof(Socket, timeout_usec), }, }
, }
,
82 SD_BUS_PROPERTY("BindToDevice", "s", NULL, offsetof(Socket, bind_to_device), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "BindToDevice", .signature =
"s", .get = ((void*)0), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, bind_to_device), }, }, }
,
83 SD_BUS_PROPERTY("SocketUser", "s", NULL, offsetof(Socket, user), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "SocketUser", .signature = "s"
, .get = ((void*)0), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, user), }, }, }
,
84 SD_BUS_PROPERTY("SocketGroup", "s", NULL, offsetof(Socket, group), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "SocketGroup", .signature = "s"
, .get = ((void*)0), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, group), }, }, }
,
85 SD_BUS_PROPERTY("SocketMode", "u", bus_property_get_mode, offsetof(Socket, socket_mode), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "SocketMode", .signature = "u"
, .get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void*
)0), .offset = __builtin_offsetof(Socket, socket_mode), }, },
}
,
86 SD_BUS_PROPERTY("DirectoryMode", "u", bus_property_get_mode, offsetof(Socket, directory_mode), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "DirectoryMode", .signature =
"u", .get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void
*)0), .offset = __builtin_offsetof(Socket, directory_mode), }
, }, }
,
87 SD_BUS_PROPERTY("Accept", "b", bus_property_get_bool, offsetof(Socket, accept), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "Accept", .signature = "b", .
get = bus_property_get_bool, .set = ((void*)0), .offset = __builtin_offsetof
(Socket, accept), }, }, }
,
88 SD_BUS_PROPERTY("FlushPending", "b", bus_property_get_bool, offsetof(Socket, flush_pending), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "FlushPending", .signature =
"b", .get = bus_property_get_bool, .set = ((void*)0), .offset
= __builtin_offsetof(Socket, flush_pending), }, }, }
,
89 SD_BUS_PROPERTY("Writable", "b", bus_property_get_bool, offsetof(Socket, writable), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "Writable", .signature = "b"
, .get = bus_property_get_bool, .set = ((void*)0), .offset = __builtin_offsetof
(Socket, writable), }, }, }
,
90 SD_BUS_PROPERTY("KeepAlive", "b", bus_property_get_bool, offsetof(Socket, keep_alive), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "KeepAlive", .signature = "b"
, .get = bus_property_get_bool, .set = ((void*)0), .offset = __builtin_offsetof
(Socket, keep_alive), }, }, }
,
91 SD_BUS_PROPERTY("KeepAliveTimeUSec", "t", bus_property_get_usec, offsetof(Socket, keep_alive_time), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "KeepAliveTimeUSec", .signature
= "t", .get = ((sd_bus_property_get_t) ((void*)0)), .set = (
(void*)0), .offset = __builtin_offsetof(Socket, keep_alive_time
), }, }, }
,
92 SD_BUS_PROPERTY("KeepAliveIntervalUSec", "t", bus_property_get_usec, offsetof(Socket, keep_alive_interval), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "KeepAliveIntervalUSec", .signature
= "t", .get = ((sd_bus_property_get_t) ((void*)0)), .set = (
(void*)0), .offset = __builtin_offsetof(Socket, keep_alive_interval
), }, }, }
,
93 SD_BUS_PROPERTY("KeepAliveProbes", "u", bus_property_get_unsigned, offsetof(Socket, keep_alive_cnt), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "KeepAliveProbes", .signature
= "u", .get = ((sd_bus_property_get_t) ((void*)0)), .set = (
(void*)0), .offset = __builtin_offsetof(Socket, keep_alive_cnt
), }, }, }
,
94 SD_BUS_PROPERTY("DeferAcceptUSec" , "t", bus_property_get_usec, offsetof(Socket, defer_accept), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "DeferAcceptUSec", .signature
= "t", .get = ((sd_bus_property_get_t) ((void*)0)), .set = (
(void*)0), .offset = __builtin_offsetof(Socket, defer_accept)
, }, }, }
,
95 SD_BUS_PROPERTY("NoDelay", "b", bus_property_get_bool, offsetof(Socket, no_delay), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "NoDelay", .signature = "b",
.get = bus_property_get_bool, .set = ((void*)0), .offset = __builtin_offsetof
(Socket, no_delay), }, }, }
,
96 SD_BUS_PROPERTY("Priority", "i", bus_property_get_int, offsetof(Socket, priority), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "Priority", .signature = "i"
, .get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void*
)0), .offset = __builtin_offsetof(Socket, priority), }, }, }
,
97 SD_BUS_PROPERTY("ReceiveBuffer", "t", bus_property_get_size, offsetof(Socket, receive_buffer), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "ReceiveBuffer", .signature =
"t", .get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void
*)0), .offset = __builtin_offsetof(Socket, receive_buffer), }
, }, }
,
98 SD_BUS_PROPERTY("SendBuffer", "t", bus_property_get_size, offsetof(Socket, send_buffer), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "SendBuffer", .signature = "t"
, .get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void*
)0), .offset = __builtin_offsetof(Socket, send_buffer), }, },
}
,
99 SD_BUS_PROPERTY("IPTOS", "i", bus_property_get_int, offsetof(Socket, ip_tos), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "IPTOS", .signature = "i", .
get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void*)0)
, .offset = __builtin_offsetof(Socket, ip_tos), }, }, }
,
100 SD_BUS_PROPERTY("IPTTL", "i", bus_property_get_int, offsetof(Socket, ip_ttl), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "IPTTL", .signature = "i", .
get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void*)0)
, .offset = __builtin_offsetof(Socket, ip_ttl), }, }, }
,
101 SD_BUS_PROPERTY("PipeSize", "t", bus_property_get_size, offsetof(Socket, pipe_size), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "PipeSize", .signature = "t"
, .get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void*
)0), .offset = __builtin_offsetof(Socket, pipe_size), }, }, }
,
102 SD_BUS_PROPERTY("FreeBind", "b", bus_property_get_bool, offsetof(Socket, free_bind), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "FreeBind", .signature = "b"
, .get = bus_property_get_bool, .set = ((void*)0), .offset = __builtin_offsetof
(Socket, free_bind), }, }, }
,
103 SD_BUS_PROPERTY("Transparent", "b", bus_property_get_bool, offsetof(Socket, transparent), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "Transparent", .signature = "b"
, .get = bus_property_get_bool, .set = ((void*)0), .offset = __builtin_offsetof
(Socket, transparent), }, }, }
,
104 SD_BUS_PROPERTY("Broadcast", "b", bus_property_get_bool, offsetof(Socket, broadcast), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "Broadcast", .signature = "b"
, .get = bus_property_get_bool, .set = ((void*)0), .offset = __builtin_offsetof
(Socket, broadcast), }, }, }
,
105 SD_BUS_PROPERTY("PassCredentials", "b", bus_property_get_bool, offsetof(Socket, pass_cred), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "PassCredentials", .signature
= "b", .get = bus_property_get_bool, .set = ((void*)0), .offset
= __builtin_offsetof(Socket, pass_cred), }, }, }
,
106 SD_BUS_PROPERTY("PassSecurity", "b", bus_property_get_bool, offsetof(Socket, pass_sec), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "PassSecurity", .signature =
"b", .get = bus_property_get_bool, .set = ((void*)0), .offset
= __builtin_offsetof(Socket, pass_sec), }, }, }
,
107 SD_BUS_PROPERTY("PassPacketInfo", "b", bus_property_get_bool, offsetof(Socket, pass_pktinfo), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "PassPacketInfo", .signature
= "b", .get = bus_property_get_bool, .set = ((void*)0), .offset
= __builtin_offsetof(Socket, pass_pktinfo), }, }, }
,
108 SD_BUS_PROPERTY("RemoveOnStop", "b", bus_property_get_bool, offsetof(Socket, remove_on_stop), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "RemoveOnStop", .signature =
"b", .get = bus_property_get_bool, .set = ((void*)0), .offset
= __builtin_offsetof(Socket, remove_on_stop), }, }, }
,
109 SD_BUS_PROPERTY("Listen", "a(ss)", property_get_listen, 0, SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "Listen", .signature = "a(ss)"
, .get = property_get_listen, .set = ((void*)0), .offset = 0,
}, }, }
,
110 SD_BUS_PROPERTY("Symlinks", "as", NULL, offsetof(Socket, symlinks), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "Symlinks", .signature = "as"
, .get = ((void*)0), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, symlinks), }, }, }
,
111 SD_BUS_PROPERTY("Mark", "i", bus_property_get_int, offsetof(Socket, mark), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "Mark", .signature = "i", .get
= ((sd_bus_property_get_t) ((void*)0)), .set = ((void*)0), .
offset = __builtin_offsetof(Socket, mark), }, }, }
,
112 SD_BUS_PROPERTY("MaxConnections", "u", bus_property_get_unsigned, offsetof(Socket, max_connections), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "MaxConnections", .signature
= "u", .get = ((sd_bus_property_get_t) ((void*)0)), .set = (
(void*)0), .offset = __builtin_offsetof(Socket, max_connections
), }, }, }
,
113 SD_BUS_PROPERTY("MaxConnectionsPerSource", "u", bus_property_get_unsigned, offsetof(Socket, max_connections_per_source), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "MaxConnectionsPerSource", .
signature = "u", .get = ((sd_bus_property_get_t) ((void*)0)),
.set = ((void*)0), .offset = __builtin_offsetof(Socket, max_connections_per_source
), }, }, }
,
114 SD_BUS_PROPERTY("MessageQueueMaxMessages", "x", bus_property_get_long, offsetof(Socket, mq_maxmsg), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "MessageQueueMaxMessages", .
signature = "x", .get = ((sd_bus_property_get_t) ((void*)0)),
.set = ((void*)0), .offset = __builtin_offsetof(Socket, mq_maxmsg
), }, }, }
,
115 SD_BUS_PROPERTY("MessageQueueMessageSize", "x", bus_property_get_long, offsetof(Socket, mq_msgsize), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "MessageQueueMessageSize", .
signature = "x", .get = ((sd_bus_property_get_t) ((void*)0)),
.set = ((void*)0), .offset = __builtin_offsetof(Socket, mq_msgsize
), }, }, }
,
116 SD_BUS_PROPERTY("TCPCongestion", "s", NULL, offsetof(Socket, tcp_congestion), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "TCPCongestion", .signature =
"s", .get = ((void*)0), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, tcp_congestion), }, }, }
,
117 SD_BUS_PROPERTY("ReusePort", "b", bus_property_get_bool, offsetof(Socket, reuse_port), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "ReusePort", .signature = "b"
, .get = bus_property_get_bool, .set = ((void*)0), .offset = __builtin_offsetof
(Socket, reuse_port), }, }, }
,
118 SD_BUS_PROPERTY("SmackLabel", "s", NULL, offsetof(Socket, smack), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "SmackLabel", .signature = "s"
, .get = ((void*)0), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, smack), }, }, }
,
119 SD_BUS_PROPERTY("SmackLabelIPIn", "s", NULL, offsetof(Socket, smack_ip_in), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "SmackLabelIPIn", .signature
= "s", .get = ((void*)0), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, smack_ip_in), }, }, }
,
120 SD_BUS_PROPERTY("SmackLabelIPOut", "s", NULL, offsetof(Socket, smack_ip_out), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "SmackLabelIPOut", .signature
= "s", .get = ((void*)0), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, smack_ip_out), }, }, }
,
121 SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid, offsetof(Socket, control_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE
, .x = { .property = { .member = "ControlPID", .signature = "u"
, .get = ((sd_bus_property_get_t) ((void*)0)), .set = ((void*
)0), .offset = __builtin_offsetof(Socket, control_pid), }, },
}
,
122 SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Socket, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE
, .x = { .property = { .member = "Result", .signature = "s", .
get = property_get_result, .set = ((void*)0), .offset = __builtin_offsetof
(Socket, result), }, }, }
,
123 SD_BUS_PROPERTY("NConnections", "u", bus_property_get_unsigned, offsetof(Socket, n_connections), 0){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = 0, .x = { .property
= { .member = "NConnections", .signature = "u", .get = ((sd_bus_property_get_t
) ((void*)0)), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, n_connections), }, }, }
,
124 SD_BUS_PROPERTY("NAccepted", "u", bus_property_get_unsigned, offsetof(Socket, n_accepted), 0){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = 0, .x = { .property
= { .member = "NAccepted", .signature = "u", .get = ((sd_bus_property_get_t
) ((void*)0)), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, n_accepted), }, }, }
,
125 SD_BUS_PROPERTY("NRefused", "u", bus_property_get_unsigned, offsetof(Socket, n_refused), 0){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = 0, .x = { .property
= { .member = "NRefused", .signature = "u", .get = ((sd_bus_property_get_t
) ((void*)0)), .set = ((void*)0), .offset = __builtin_offsetof
(Socket, n_refused), }, }, }
,
126 SD_BUS_PROPERTY("FileDescriptorName", "s", property_get_fdname, 0, 0){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = 0, .x = { .property
= { .member = "FileDescriptorName", .signature = "s", .get =
property_get_fdname, .set = ((void*)0), .offset = 0, }, }, }
,
127 SD_BUS_PROPERTY("SocketProtocol", "i", bus_property_get_int, offsetof(Socket, socket_protocol), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "SocketProtocol", .signature
= "i", .get = ((sd_bus_property_get_t) ((void*)0)), .set = (
(void*)0), .offset = __builtin_offsetof(Socket, socket_protocol
), }, }, }
,
128 SD_BUS_PROPERTY("TriggerLimitIntervalUSec", "t", bus_property_get_usec, offsetof(Socket, trigger_limit.interval), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "TriggerLimitIntervalUSec", .
signature = "t", .get = ((sd_bus_property_get_t) ((void*)0)),
.set = ((void*)0), .offset = __builtin_offsetof(Socket, trigger_limit
.interval), }, }, }
,
129 SD_BUS_PROPERTY("TriggerLimitBurst", "u", bus_property_get_unsigned, offsetof(Socket, trigger_limit.burst), SD_BUS_VTABLE_PROPERTY_CONST){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_CONST
, .x = { .property = { .member = "TriggerLimitBurst", .signature
= "u", .get = ((sd_bus_property_get_t) ((void*)0)), .set = (
(void*)0), .offset = __builtin_offsetof(Socket, trigger_limit
.burst), }, }, }
,
130 SD_BUS_PROPERTY("UID", "u", bus_property_get_uid, offsetof(Unit, ref_uid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE
, .x = { .property = { .member = "UID", .signature = "u", .get
= ((sd_bus_property_get_t) ((void*)0)), .set = ((void*)0), .
offset = __builtin_offsetof(Unit, ref_uid), }, }, }
,
131 SD_BUS_PROPERTY("GID", "u", bus_property_get_gid, offsetof(Unit, ref_gid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE
, .x = { .property = { .member = "GID", .signature = "u", .get
= ((sd_bus_property_get_t) ((void*)0)), .set = ((void*)0), .
offset = __builtin_offsetof(Unit, ref_gid), }, }, }
,
132 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPre", offsetof(Socket, exec_command[SOCKET_EXEC_START_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION
, .x = { .property = { .member = "ExecStartPre", .signature =
"a(sasbttttuii)", .get = bus_property_get_exec_command_list,
.set = ((void*)0), .offset = __builtin_offsetof(Socket, exec_command
[SOCKET_EXEC_START_PRE]), }, }, }
,
133 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPost", offsetof(Socket, exec_command[SOCKET_EXEC_START_POST]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION
, .x = { .property = { .member = "ExecStartPost", .signature =
"a(sasbttttuii)", .get = bus_property_get_exec_command_list,
.set = ((void*)0), .offset = __builtin_offsetof(Socket, exec_command
[SOCKET_EXEC_START_POST]), }, }, }
,
134 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStopPre", offsetof(Socket, exec_command[SOCKET_EXEC_STOP_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION
, .x = { .property = { .member = "ExecStopPre", .signature = "a(sasbttttuii)"
, .get = bus_property_get_exec_command_list, .set = ((void*)0
), .offset = __builtin_offsetof(Socket, exec_command[SOCKET_EXEC_STOP_PRE
]), }, }, }
,
135 BUS_EXEC_COMMAND_LIST_VTABLE("ExecStopPost", offsetof(Socket, exec_command[SOCKET_EXEC_STOP_POST]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION){ .type = _SD_BUS_VTABLE_PROPERTY, .flags = SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION
, .x = { .property = { .member = "ExecStopPost", .signature =
"a(sasbttttuii)", .get = bus_property_get_exec_command_list,
.set = ((void*)0), .offset = __builtin_offsetof(Socket, exec_command
[SOCKET_EXEC_STOP_POST]), }, }, }
,
136 SD_BUS_VTABLE_END{ .type = _SD_BUS_VTABLE_END, .flags = 0, .x = { { 0 } }, }
137};
138
139static inline bool_Bool check_size_t_truncation(uint64_t t) {
140 return (size_t) t == t;
141}
142
143static inline const char* supported_socket_protocol_to_string(int32_t i) {
144 if (i == IPPROTO_IPIPPROTO_IP)
145 return "";
146
147 if (!IN_SET(i, IPPROTO_UDPLITE, IPPROTO_SCTP)({ _Bool _found = 0; static __attribute__ ((unused)) char _static_assert__macros_need_to_be_extended
[20 - sizeof((int[]){IPPROTO_UDPLITE, IPPROTO_SCTP})/sizeof(int
)]; switch(i) { case IPPROTO_UDPLITE: case IPPROTO_SCTP: _found
= 1; break; default: break; } _found; })
)
148 return NULL((void*)0);
149
150 return socket_protocol_to_name(i);
151}
152
153static BUS_DEFINE_SET_TRANSIENT(int, "i", int32_t, int, "%" PRIi32)int bus_set_transient_int( Unit *u, const char *name, int *p,
sd_bus_message *message, UnitWriteFlags flags, sd_bus_error *
error) { int32_t v; int r; do { if ((__builtin_expect(!!(!(p)
),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("p"), "../src/core/dbus-socket.c"
, 153, __PRETTY_FUNCTION__); } while (0); r = sd_bus_message_read
(message, "i", &v); if (r < 0) return r; if (!(((flags
) & (UNIT_RUNTIME|UNIT_PERSISTENT)) == 0)) { *p = (int) v
; unit_write_settingf(u, flags, name, "%s=" "%" "i", name, v)
; } return 1; }
;
154static BUS_DEFINE_SET_TRANSIENT(message_queue, "x", int64_t, long, "%" PRIi64)int bus_set_transient_message_queue( Unit *u, const char *name
, long *p, sd_bus_message *message, UnitWriteFlags flags, sd_bus_error
*error) { int64_t v; int r; do { if ((__builtin_expect(!!(!(
p)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("p"), "../src/core/dbus-socket.c"
, 154, __PRETTY_FUNCTION__); } while (0); r = sd_bus_message_read
(message, "x", &v); if (r < 0) return r; if (!(((flags
) & (UNIT_RUNTIME|UNIT_PERSISTENT)) == 0)) { *p = (long) v
; unit_write_settingf(u, flags, name, "%s=" "%" "l" "i", name
, v); } return 1; }
;
155static BUS_DEFINE_SET_TRANSIENT_IS_VALID(size_t_check_truncation, "t", uint64_t, size_t, "%" PRIu64, check_size_t_truncation)int bus_set_transient_size_t_check_truncation( Unit *u, const
char *name, size_t *p, sd_bus_message *message, UnitWriteFlags
flags, sd_bus_error *error) { uint64_t v; int r; do { if ((__builtin_expect
(!!(!(p)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("p"
), "../src/core/dbus-socket.c", 155, __PRETTY_FUNCTION__); } while
(0); r = sd_bus_message_read(message, "t", &v); if (r <
0) return r; if (!check_size_t_truncation(v)) return sd_bus_error_setf
(error, "org.freedesktop.DBus.Error.InvalidArgs", "Invalid %s setting: "
"%" "l" "u", name, v); if (!(((flags) & (UNIT_RUNTIME|UNIT_PERSISTENT
)) == 0)) { *p = (size_t) v; unit_write_settingf(u, flags, name
, "%s=" "%" "l" "u", name, v); } return 1; }
;
156static BUS_DEFINE_SET_TRANSIENT_PARSE(bind_ipv6_only, SocketAddressBindIPv6Only, socket_address_bind_ipv6_only_or_bool_from_string)int bus_set_transient_bind_ipv6_only( Unit *u, const char *name
, SocketAddressBindIPv6Only *p, sd_bus_message *message, UnitWriteFlags
flags, sd_bus_error *error) { const char *s; SocketAddressBindIPv6Only
v; int r; do { if ((__builtin_expect(!!(!(p)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("p"), "../src/core/dbus-socket.c", 156, __PRETTY_FUNCTION__
); } while (0); r = sd_bus_message_read(message, "s", &s)
; if (r < 0) return r; v = socket_address_bind_ipv6_only_or_bool_from_string
(s); if (v < 0) return sd_bus_error_setf(error, "org.freedesktop.DBus.Error.InvalidArgs"
, "Invalid %s setting: %s", name, s); if (!(((flags) & (UNIT_RUNTIME
|UNIT_PERSISTENT)) == 0)) { *p = v; unit_write_settingf(u, flags
, name, "%s=%s", name, s); } return 1; }
;
157static BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(fdname, fdname_is_valid)int bus_set_transient_fdname( Unit *u, const char *name, char
**p, sd_bus_message *message, UnitWriteFlags flags, sd_bus_error
*error) { const char *v; int r; do { if ((__builtin_expect(!
!(!(p)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("p")
, "../src/core/dbus-socket.c", 157, __PRETTY_FUNCTION__); } while
(0); r = sd_bus_message_read(message, "s", &v); if (r <
0) return r; if (!isempty(v) && !fdname_is_valid(v))
return sd_bus_error_setf(error, "org.freedesktop.DBus.Error.InvalidArgs"
, "Invalid %s setting: %s", name, v); if (!(((flags) & (UNIT_RUNTIME
|UNIT_PERSISTENT)) == 0)) { r = free_and_strdup(p, empty_to_null
(v)); if (r < 0) return r; unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS
, name, "%s=%s", name, strempty(v)); } return 1; }
;
158static BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(ifname, ifname_valid)int bus_set_transient_ifname( Unit *u, const char *name, char
**p, sd_bus_message *message, UnitWriteFlags flags, sd_bus_error
*error) { const char *v; int r; do { if ((__builtin_expect(!
!(!(p)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("p")
, "../src/core/dbus-socket.c", 158, __PRETTY_FUNCTION__); } while
(0); r = sd_bus_message_read(message, "s", &v); if (r <
0) return r; if (!isempty(v) && !ifname_valid(v)) return
sd_bus_error_setf(error, "org.freedesktop.DBus.Error.InvalidArgs"
, "Invalid %s setting: %s", name, v); if (!(((flags) & (UNIT_RUNTIME
|UNIT_PERSISTENT)) == 0)) { r = free_and_strdup(p, empty_to_null
(v)); if (r < 0) return r; unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS
, name, "%s=%s", name, strempty(v)); } return 1; }
;
159static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(ip_tos, "i", int32_t, int, "%" PRIi32, ip_tos_to_string_alloc)int bus_set_transient_ip_tos( Unit *u, const char *name, int *
p, sd_bus_message *message, UnitWriteFlags flags, sd_bus_error
*error) { __attribute__((cleanup(freep))) char *s = ((void*)
0); int32_t v; int r; do { if ((__builtin_expect(!!(!(p)),0))
) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("p"), "../src/core/dbus-socket.c"
, 159, __PRETTY_FUNCTION__); } while (0); r = sd_bus_message_read
(message, "i", &v); if (r < 0) return r; r = ip_tos_to_string_alloc
(v, &s); if (r == -22) return sd_bus_error_setf(error, "org.freedesktop.DBus.Error.InvalidArgs"
, "Invalid %s setting: " "%" "i", name, v); if (r < 0) return
r; if (!(((flags) & (UNIT_RUNTIME|UNIT_PERSISTENT)) == 0
)) { *p = (int) v; unit_write_settingf(u, flags, name, "%s=%s"
, name, s); } return 1; }
;
160static BUS_DEFINE_SET_TRANSIENT_TO_STRING(socket_protocol, "i", int32_t, int, "%" PRIi32, supported_socket_protocol_to_string)int bus_set_transient_socket_protocol( Unit *u, const char *name
, int *p, sd_bus_message *message, UnitWriteFlags flags, sd_bus_error
*error) { const char *s; int32_t v; int r; do { if ((__builtin_expect
(!!(!(p)),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("p"
), "../src/core/dbus-socket.c", 160, __PRETTY_FUNCTION__); } while
(0); r = sd_bus_message_read(message, "i", &v); if (r <
0) return r; s = supported_socket_protocol_to_string(v); if (
!s) return sd_bus_error_setf(error, "org.freedesktop.DBus.Error.InvalidArgs"
, "Invalid %s setting: " "%" "i", name, v); if (!(((flags) &
(UNIT_RUNTIME|UNIT_PERSISTENT)) == 0)) { *p = (int) v; unit_write_settingf
(u, flags, name, "%s=%s", name, s); } return 1; }
;
161
162static int bus_socket_set_transient_property(
163 Socket *s,
164 const char *name,
165 sd_bus_message *message,
166 UnitWriteFlags flags,
167 sd_bus_error *error) {
168
169 SocketExecCommand ci;
170 Unit *u = UNIT(s)({ typeof(s) _u_ = (s); Unit *_w_ = _u_ ? &(_u_)->meta
: ((void*)0); _w_; })
;
1
Assuming '_u_' is non-null
2
'?' condition is true
171 int r;
172
173 assert(s)do { if ((__builtin_expect(!!(!(s)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("s"), "../src/core/dbus-socket.c", 173, __PRETTY_FUNCTION__
); } while (0)
;
3
Taking false branch
4
Loop condition is false. Exiting loop
174 assert(name)do { if ((__builtin_expect(!!(!(name)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("name"), "../src/core/dbus-socket.c", 174
, __PRETTY_FUNCTION__); } while (0)
;
5
Assuming 'name' is non-null
6
Taking false branch
7
Loop condition is false. Exiting loop
175 assert(message)do { if ((__builtin_expect(!!(!(message)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("message"), "../src/core/dbus-socket.c",
175, __PRETTY_FUNCTION__); } while (0)
;
8
Assuming 'message' is non-null
9
Taking false branch
10
Loop condition is false. Exiting loop
176
177 flags |= UNIT_PRIVATE;
178
179 if (streq(name, "Accept")(strcmp((name),("Accept")) == 0))
11
Assuming the condition is false
12
Taking false branch
180 return bus_set_transient_bool(u, name, &s->accept, message, flags, error);
181
182 if (streq(name, "FlushPending")(strcmp((name),("FlushPending")) == 0))
13
Assuming the condition is false
14
Taking false branch
183 return bus_set_transient_bool(u, name, &s->flush_pending, message, flags, error);
184
185 if (streq(name, "Writable")(strcmp((name),("Writable")) == 0))
15
Assuming the condition is false
16
Taking false branch
186 return bus_set_transient_bool(u, name, &s->writable, message, flags, error);
187
188 if (streq(name, "KeepAlive")(strcmp((name),("KeepAlive")) == 0))
17
Assuming the condition is false
18
Taking false branch
189 return bus_set_transient_bool(u, name, &s->keep_alive, message, flags, error);
190
191 if (streq(name, "NoDelay")(strcmp((name),("NoDelay")) == 0))
19
Assuming the condition is false
20
Taking false branch
192 return bus_set_transient_bool(u, name, &s->no_delay, message, flags, error);
193
194 if (streq(name, "FreeBind")(strcmp((name),("FreeBind")) == 0))
21
Assuming the condition is false
22
Taking false branch
195 return bus_set_transient_bool(u, name, &s->free_bind, message, flags, error);
196
197 if (streq(name, "Transparent")(strcmp((name),("Transparent")) == 0))
23
Assuming the condition is false
24
Taking false branch
198 return bus_set_transient_bool(u, name, &s->transparent, message, flags, error);
199
200 if (streq(name, "Broadcast")(strcmp((name),("Broadcast")) == 0))
25
Assuming the condition is false
26
Taking false branch
201 return bus_set_transient_bool(u, name, &s->broadcast, message, flags, error);
202
203 if (streq(name, "PassCredentials")(strcmp((name),("PassCredentials")) == 0))
27
Assuming the condition is false
28
Taking false branch
204 return bus_set_transient_bool(u, name, &s->pass_cred, message, flags, error);
205
206 if (streq(name, "PassSecurity")(strcmp((name),("PassSecurity")) == 0))
29
Assuming the condition is false
30
Taking false branch
207 return bus_set_transient_bool(u, name, &s->pass_sec, message, flags, error);
208
209 if (streq(name, "PassPacketInfo")(strcmp((name),("PassPacketInfo")) == 0))
31
Assuming the condition is false
32
Taking false branch
210 return bus_set_transient_bool(u, name, &s->pass_pktinfo, message, flags, error);
211
212 if (streq(name, "ReusePort")(strcmp((name),("ReusePort")) == 0))
33
Assuming the condition is false
34
Taking false branch
213 return bus_set_transient_bool(u, name, &s->reuse_port, message, flags, error);
214
215 if (streq(name, "RemoveOnStop")(strcmp((name),("RemoveOnStop")) == 0))
35
Assuming the condition is false
36
Taking false branch
216 return bus_set_transient_bool(u, name, &s->remove_on_stop, message, flags, error);
217
218 if (streq(name, "SELinuxContextFromNet")(strcmp((name),("SELinuxContextFromNet")) == 0))
37
Assuming the condition is false
38
Taking false branch
219 return bus_set_transient_bool(u, name, &s->selinux_context_from_net, message, flags, error);
220
221 if (streq(name, "Priority")(strcmp((name),("Priority")) == 0))
39
Assuming the condition is false
40
Taking false branch
222 return bus_set_transient_int(u, name, &s->priority, message, flags, error);
223
224 if (streq(name, "IPTTL")(strcmp((name),("IPTTL")) == 0))
41
Assuming the condition is false
42
Taking false branch
225 return bus_set_transient_int(u, name, &s->ip_ttl, message, flags, error);
226
227 if (streq(name, "Mark")(strcmp((name),("Mark")) == 0))
43
Assuming the condition is false
44
Taking false branch
228 return bus_set_transient_int(u, name, &s->mark, message, flags, error);
229
230 if (streq(name, "Backlog")(strcmp((name),("Backlog")) == 0))
45
Assuming the condition is false
46
Taking false branch
231 return bus_set_transient_unsigned(u, name, &s->backlog, message, flags, error);
232
233 if (streq(name, "MaxConnections")(strcmp((name),("MaxConnections")) == 0))
47
Assuming the condition is false
48
Taking false branch
234 return bus_set_transient_unsigned(u, name, &s->max_connections, message, flags, error);
235
236 if (streq(name, "MaxConnectionsPerSource")(strcmp((name),("MaxConnectionsPerSource")) == 0))
49
Assuming the condition is false
50
Taking false branch
237 return bus_set_transient_unsigned(u, name, &s->max_connections_per_source, message, flags, error);
238
239 if (streq(name, "KeepAliveProbes")(strcmp((name),("KeepAliveProbes")) == 0))
51
Assuming the condition is false
52
Taking false branch
240 return bus_set_transient_unsigned(u, name, &s->keep_alive_cnt, message, flags, error);
241
242 if (streq(name, "TriggerLimitBurst")(strcmp((name),("TriggerLimitBurst")) == 0))
53
Assuming the condition is false
54
Taking false branch
243 return bus_set_transient_unsigned(u, name, &s->trigger_limit.burst, message, flags, error);
244
245 if (streq(name, "SocketMode")(strcmp((name),("SocketMode")) == 0))
55
Assuming the condition is false
56
Taking false branch
246 return bus_set_transient_mode_t(u, name, &s->socket_mode, message, flags, error);
247
248 if (streq(name, "DirectoryMode")(strcmp((name),("DirectoryMode")) == 0))
57
Assuming the condition is false
58
Taking false branch
249 return bus_set_transient_mode_t(u, name, &s->directory_mode, message, flags, error);
250
251 if (streq(name, "MessageQueueMaxMessages")(strcmp((name),("MessageQueueMaxMessages")) == 0))
59
Assuming the condition is false
60
Taking false branch
252 return bus_set_transient_message_queue(u, name, &s->mq_maxmsg, message, flags, error);
253
254 if (streq(name, "MessageQueueMessageSize")(strcmp((name),("MessageQueueMessageSize")) == 0))
61
Assuming the condition is false
62
Taking false branch
255 return bus_set_transient_message_queue(u, name, &s->mq_msgsize, message, flags, error);
256
257 if (streq(name, "TimeoutUSec")(strcmp((name),("TimeoutUSec")) == 0))
63
Assuming the condition is false
64
Taking false branch
258 return bus_set_transient_usec_fix_0(u, name, &s->timeout_usec, message, flags, error);
259
260 if (streq(name, "KeepAliveTimeUSec")(strcmp((name),("KeepAliveTimeUSec")) == 0))
65
Assuming the condition is false
66
Taking false branch
261 return bus_set_transient_usec(u, name, &s->keep_alive_time, message, flags, error);
262
263 if (streq(name, "KeepAliveIntervalUSec")(strcmp((name),("KeepAliveIntervalUSec")) == 0))
67
Assuming the condition is false
68
Taking false branch
264 return bus_set_transient_usec(u, name, &s->keep_alive_interval, message, flags, error);
265
266 if (streq(name, "DeferAcceptUSec")(strcmp((name),("DeferAcceptUSec")) == 0))
69
Assuming the condition is false
70
Taking false branch
267 return bus_set_transient_usec(u, name, &s->defer_accept, message, flags, error);
268
269 if (streq(name, "TriggerLimitIntervalUSec")(strcmp((name),("TriggerLimitIntervalUSec")) == 0))
71
Assuming the condition is false
72
Taking false branch
270 return bus_set_transient_usec(u, name, &s->trigger_limit.interval, message, flags, error);
271
272 if (streq(name, "SmackLabel")(strcmp((name),("SmackLabel")) == 0))
73
Assuming the condition is false
74
Taking false branch
273 return bus_set_transient_string(u, name, &s->smack, message, flags, error);
274
275 if (streq(name, "SmackLabelIPin")(strcmp((name),("SmackLabelIPin")) == 0))
75
Assuming the condition is false
76
Taking false branch
276 return bus_set_transient_string(u, name, &s->smack_ip_in, message, flags, error);
277
278 if (streq(name, "SmackLabelIPOut")(strcmp((name),("SmackLabelIPOut")) == 0))
77
Assuming the condition is false
78
Taking false branch
279 return bus_set_transient_string(u, name, &s->smack_ip_out, message, flags, error);
280
281 if (streq(name, "TCPCongestion")(strcmp((name),("TCPCongestion")) == 0))
79
Assuming the condition is false
80
Taking false branch
282 return bus_set_transient_string(u, name, &s->tcp_congestion, message, flags, error);
283
284 if (streq(name, "FileDescriptorName")(strcmp((name),("FileDescriptorName")) == 0))
81
Assuming the condition is false
82
Taking false branch
285 return bus_set_transient_fdname(u, name, &s->fdname, message, flags, error);
286
287 if (streq(name, "SocketUser")(strcmp((name),("SocketUser")) == 0))
83
Assuming the condition is false
84
Taking false branch
288 return bus_set_transient_user_relaxed(u, name, &s->user, message, flags, error);
289
290 if (streq(name, "SocketGroup")(strcmp((name),("SocketGroup")) == 0))
85
Assuming the condition is false
86
Taking false branch
291 return bus_set_transient_user_relaxed(u, name, &s->group, message, flags, error);
292
293 if (streq(name, "BindIPv6Only")(strcmp((name),("BindIPv6Only")) == 0))
87
Assuming the condition is false
88
Taking false branch
294 return bus_set_transient_bind_ipv6_only(u, name, &s->bind_ipv6_only, message, flags, error);
295
296 if (streq(name, "ReceiveBuffer")(strcmp((name),("ReceiveBuffer")) == 0))
89
Assuming the condition is false
90
Taking false branch
297 return bus_set_transient_size_t_check_truncation(u, name, &s->receive_buffer, message, flags, error);
298
299 if (streq(name, "SendBuffer")(strcmp((name),("SendBuffer")) == 0))
91
Assuming the condition is false
92
Taking false branch
300 return bus_set_transient_size_t_check_truncation(u, name, &s->send_buffer, message, flags, error);
301
302 if (streq(name, "PipeSize")(strcmp((name),("PipeSize")) == 0))
93
Assuming the condition is false
94
Taking false branch
303 return bus_set_transient_size_t_check_truncation(u, name, &s->pipe_size, message, flags, error);
304
305 if (streq(name, "BindToDevice")(strcmp((name),("BindToDevice")) == 0))
95
Assuming the condition is false
96
Taking false branch
306 return bus_set_transient_ifname(u, name, &s->bind_to_device, message, flags, error);
307
308 if (streq(name, "IPTOS")(strcmp((name),("IPTOS")) == 0))
97
Assuming the condition is false
98
Taking false branch
309 return bus_set_transient_ip_tos(u, name, &s->ip_tos, message, flags, error);
310
311 if (streq(name, "SocketProtocol")(strcmp((name),("SocketProtocol")) == 0))
99
Assuming the condition is false
100
Taking false branch
312 return bus_set_transient_socket_protocol(u, name, &s->socket_protocol, message, flags, error);
313
314 if ((ci = socket_exec_command_from_string(name)) >= 0)
101
Assuming the condition is false
102
Taking false branch
315 return bus_set_transient_exec_command(u, name, &s->exec_command[ci], message, flags, error);
316
317 if (streq(name, "Symlinks")(strcmp((name),("Symlinks")) == 0)) {
103
Assuming the condition is false
104
Taking false branch
318 _cleanup_strv_free___attribute__((cleanup(strv_freep))) char **l = NULL((void*)0);
319 char **p;
320
321 r = sd_bus_message_read_strv(message, &l);
322 if (r < 0)
323 return r;
324
325 STRV_FOREACH(p, l)for ((p) = (l); (p) && *(p); (p)++) {
326 if (!path_is_absolute(*p))
327 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS"org.freedesktop.DBus.Error.InvalidArgs", "Symlink path is not absolute: %s", *p);
328 }
329
330 if (!UNIT_WRITE_FLAGS_NOOP(flags)(((flags) & (UNIT_RUNTIME|UNIT_PERSISTENT)) == 0)) {
331 if (strv_isempty(l)) {
332 s->symlinks = strv_free(s->symlinks);
333 unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, "%s=", name);
334 } else {
335 _cleanup_free___attribute__((cleanup(freep))) char *joined = NULL((void*)0);
336
337 r = strv_extend_strv(&s->symlinks, l, true1);
338 if (r < 0)
339 return -ENOMEM12;
340
341 joined = strv_join(l, " ");
342 if (!joined)
343 return -ENOMEM12;
344
345 unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, "%s=%s", name, joined);
346 }
347 }
348
349 return 1;
350
351 } else if (streq(name, "Listen")(strcmp((name),("Listen")) == 0)) {
105
Taking true branch
352 const char *t, *a;
353 bool_Bool empty = true1;
354
355 r = sd_bus_message_enter_container(message, 'a', "(ss)");
356 if (r < 0)
106
Assuming 'r' is >= 0
107
Taking false branch
357 return r;
358
359 while ((r = sd_bus_message_read(message, "(ss)", &t, &a)) > 0) {
108
Assuming the condition is true
109
Loop condition is true. Entering loop body
360 _cleanup_free___attribute__((cleanup(freep))) SocketPort *p = NULL((void*)0);
361
362 p = new0(SocketPort, 1)((SocketPort*) calloc((1), sizeof(SocketPort)));
110
Memory is allocated
363 if (!p)
111
Assuming 'p' is non-null
112
Taking false branch
364 return log_oom()log_oom_internal(LOG_REALM_SYSTEMD, "../src/core/dbus-socket.c"
, 364, __func__)
;
365
366 p->type = socket_port_type_from_string(t);
367 if (p->type < 0)
113
Assuming field 'type' is < 0
114
Taking true branch
368 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS"org.freedesktop.DBus.Error.InvalidArgs", "Unknown Socket type: %s", t);
115
Potential leak of memory pointed to by 'p'
369
370 if (p->type != SOCKET_SOCKET) {
371 p->path = strdup(a);
372 path_simplify(p->path, false0);
373
374 } else if (streq(t, "Netlink")(strcmp((t),("Netlink")) == 0)) {
375 r = socket_address_parse_netlink(&p->address, a);
376 if (r < 0)
377 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS"org.freedesktop.DBus.Error.InvalidArgs", "Invalid netlink address: %s", a);
378
379 } else {
380 r = socket_address_parse(&p->address, a);
381 if (r < 0)
382 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS"org.freedesktop.DBus.Error.InvalidArgs", "Invalid address: %s", a);
383
384 p->address.type = socket_address_type_from_string(t);
385 if (p->address.type < 0)
386 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS"org.freedesktop.DBus.Error.InvalidArgs", "Invalid address type: %s", t);
387
388 if (socket_address_family(&p->address)((&p->address)->sockaddr.sa.sa_family) != AF_LOCAL1 && p->address.type == SOCK_SEQPACKETSOCK_SEQPACKET)
389 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS"org.freedesktop.DBus.Error.InvalidArgs", "Address family not supported: %s", a);
390 }
391
392 p->fd = -1;
393 p->auxiliary_fds = NULL((void*)0);
394 p->n_auxiliary_fds = 0;
395 p->socket = s;
396
397 empty = false0;
398
399 if (!UNIT_WRITE_FLAGS_NOOP(flags)(((flags) & (UNIT_RUNTIME|UNIT_PERSISTENT)) == 0)) {
400 SocketPort *tail;
401
402 LIST_FIND_TAIL(port, s->ports, tail)do { typeof(*(s->ports)) *_item = (s->ports); if (!_item
) (tail) = ((void*)0); else { while (_item->port_next) _item
= _item->port_next; (tail) = _item; } } while (0)
;
403 LIST_INSERT_AFTER(port, s->ports, tail, p)do { typeof(*(s->ports)) **_head = &(s->ports), *_a
= (tail), *_b = (p); do { if ((__builtin_expect(!!(!(_b)),0)
)) log_assert_failed_realm(LOG_REALM_SYSTEMD, ("_b"), "../src/core/dbus-socket.c"
, 403, __PRETTY_FUNCTION__); } while (0); if (!_a) { if ((_b->
port_next = *_head)) _b->port_next->port_prev = _b; _b->
port_prev = ((void*)0); *_head = _b; } else { if ((_b->port_next
= _a->port_next)) _b->port_next->port_prev = _b; _b
->port_prev = _a; _a->port_next = _b; } } while (0)
;
404
405 p = NULL((void*)0);
406
407 unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, "Listen%s=%s", t, a);
408 }
409 }
410 if (r < 0)
411 return r;
412
413 r = sd_bus_message_exit_container(message);
414 if (r < 0)
415 return r;
416
417 if (!UNIT_WRITE_FLAGS_NOOP(flags)(((flags) & (UNIT_RUNTIME|UNIT_PERSISTENT)) == 0) && empty) {
418 socket_free_ports(s);
419 unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, "ListenStream=");
420 }
421
422 return 1;
423 }
424
425 return 0;
426}
427
428int bus_socket_set_property(
429 Unit *u,
430 const char *name,
431 sd_bus_message *message,
432 UnitWriteFlags flags,
433 sd_bus_error *error) {
434
435 Socket *s = SOCKET(u);
436 int r;
437
438 assert(s)do { if ((__builtin_expect(!!(!(s)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("s"), "../src/core/dbus-socket.c", 438, __PRETTY_FUNCTION__
); } while (0)
;
439 assert(name)do { if ((__builtin_expect(!!(!(name)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("name"), "../src/core/dbus-socket.c", 439
, __PRETTY_FUNCTION__); } while (0)
;
440 assert(message)do { if ((__builtin_expect(!!(!(message)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("message"), "../src/core/dbus-socket.c",
440, __PRETTY_FUNCTION__); } while (0)
;
441
442 assert(s)do { if ((__builtin_expect(!!(!(s)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("s"), "../src/core/dbus-socket.c", 442, __PRETTY_FUNCTION__
); } while (0)
;
443 assert(name)do { if ((__builtin_expect(!!(!(name)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("name"), "../src/core/dbus-socket.c", 443
, __PRETTY_FUNCTION__); } while (0)
;
444 assert(message)do { if ((__builtin_expect(!!(!(message)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("message"), "../src/core/dbus-socket.c",
444, __PRETTY_FUNCTION__); } while (0)
;
445
446 r = bus_cgroup_set_property(u, &s->cgroup_context, name, message, flags, error);
447 if (r != 0)
448 return r;
449
450 if (u->transient && u->load_state == UNIT_STUB) {
451 /* This is a transient unit, let's load a little more */
452
453 r = bus_socket_set_transient_property(s, name, message, flags, error);
454 if (r != 0)
455 return r;
456
457 r = bus_exec_context_set_transient_property(u, &s->exec_context, name, message, flags, error);
458 if (r != 0)
459 return r;
460
461 r = bus_kill_context_set_transient_property(u, &s->kill_context, name, message, flags, error);
462 if (r != 0)
463 return r;
464 }
465
466 return 0;
467}
468
469int bus_socket_commit_properties(Unit *u) {
470 assert(u)do { if ((__builtin_expect(!!(!(u)),0))) log_assert_failed_realm
(LOG_REALM_SYSTEMD, ("u"), "../src/core/dbus-socket.c", 470, __PRETTY_FUNCTION__
); } while (0)
;
471
472 unit_update_cgroup_members_masks(u);
473 unit_realize_cgroup(u);
474
475 return 0;
476}