diff options
Diffstat (limited to 'src/core/dbus-socket.c')
-rw-r--r-- | src/core/dbus-socket.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c index 913cc74918..37cf9d204c 100644 --- a/src/core/dbus-socket.c +++ b/src/core/dbus-socket.c @@ -8,10 +8,10 @@ #include "dbus-socket.h" #include "dbus-util.h" #include "fd-util.h" +#include "ip-protocol-list.h" #include "parse-util.h" #include "path-util.h" #include "socket.h" -#include "socket-protocol-list.h" #include "socket-util.h" #include "string-util.h" #include "unit.h" @@ -138,14 +138,14 @@ static inline bool check_size_t_truncation(uint64_t t) { return (size_t) t == t; } -static inline const char* supported_socket_protocol_to_string(int32_t i) { +static inline const char* socket_protocol_to_string(int32_t i) { if (i == IPPROTO_IP) return ""; if (!IN_SET(i, IPPROTO_UDPLITE, IPPROTO_SCTP)) return NULL; - return socket_protocol_to_name(i); + return ip_protocol_to_name(i); } static BUS_DEFINE_SET_TRANSIENT(int, "i", int32_t, int, "%" PRIi32); @@ -155,7 +155,7 @@ static BUS_DEFINE_SET_TRANSIENT_PARSE(bind_ipv6_only, SocketAddressBindIPv6Only, static BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(fdname, fdname_is_valid); static BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(ifname, ifname_valid); static BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(ip_tos, "i", int32_t, int, "%" PRIi32, ip_tos_to_string_alloc); -static BUS_DEFINE_SET_TRANSIENT_TO_STRING(socket_protocol, "i", int32_t, int, "%" PRIi32, supported_socket_protocol_to_string); +static BUS_DEFINE_SET_TRANSIENT_TO_STRING(socket_protocol, "i", int32_t, int, "%" PRIi32, socket_protocol_to_string); static int bus_socket_set_transient_property( Socket *s, @@ -351,16 +351,27 @@ static int bus_socket_set_transient_property( while ((r = sd_bus_message_read(message, "(ss)", &t, &a)) > 0) { _cleanup_free_ SocketPort *p = NULL; - p = new0(SocketPort, 1); + p = new(SocketPort, 1); if (!p) return log_oom(); + *p = (SocketPort) { + .fd = -1, + .socket = s, + }; + p->type = socket_port_type_from_string(t); if (p->type < 0) return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unknown Socket type: %s", t); if (p->type != SOCKET_SOCKET) { + if (!path_is_valid(p->path)) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid socket path: %s", t); + p->path = strdup(a); + if (!p->path) + return log_oom(); + path_simplify(p->path, false); } else if (streq(t, "Netlink")) { @@ -381,21 +392,10 @@ static int bus_socket_set_transient_property( return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Address family not supported: %s", a); } - p->fd = -1; - p->auxiliary_fds = NULL; - p->n_auxiliary_fds = 0; - p->socket = s; - empty = false; if (!UNIT_WRITE_FLAGS_NOOP(flags)) { - SocketPort *tail; - - LIST_FIND_TAIL(port, s->ports, tail); - LIST_INSERT_AFTER(port, s->ports, tail, p); - - p = NULL; - + LIST_APPEND(port, s->ports, TAKE_PTR(p)); unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, "Listen%s=%s", t, a); } } @@ -461,7 +461,7 @@ int bus_socket_set_property( int bus_socket_commit_properties(Unit *u) { assert(u); - unit_update_cgroup_members_masks(u); + unit_invalidate_cgroup_members_masks(u); unit_realize_cgroup(u); return 0; |