]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
socket-label: move prototype of socket_address_listen() and string table for SocketAd...
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 20 Nov 2025 00:39:32 +0000 (09:39 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 20 Nov 2025 00:58:53 +0000 (09:58 +0900)
The function socket_address_listen() is declared at shared/socket-label.c,
however its prototype was in basic/socket-util.h. This moves the
prototype to shared/socket-label.h.

Also, enum SocketAddressBindIPv6Only is not used anymore in basic/*.[ch].
Let's move the definition and its string table to shared/socket-label.[ch].

Follow-up for b25a930f0e2ebe77bc8b0f0acfac8a3b27ef1f0a.

src/basic/socket-util.c
src/basic/socket-util.h
src/core/socket.h
src/shared/socket-label.c
src/shared/socket-label.h [new file with mode: 0644]
src/shared/socket-netlink.c
src/test/test-tables.c

index 568072a492f7851721f8e9d669cafcd229cd1328..c98cd35d542eec0b91c6800e05484421cf3adae4 100644 (file)
@@ -669,26 +669,6 @@ static const char* const netlink_family_table[] = {
 
 DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(netlink_family, int, INT_MAX);
 
-static const char* const socket_address_bind_ipv6_only_table[_SOCKET_ADDRESS_BIND_IPV6_ONLY_MAX] = {
-        [SOCKET_ADDRESS_DEFAULT] = "default",
-        [SOCKET_ADDRESS_BOTH] = "both",
-        [SOCKET_ADDRESS_IPV6_ONLY] = "ipv6-only"
-};
-
-DEFINE_STRING_TABLE_LOOKUP(socket_address_bind_ipv6_only, SocketAddressBindIPv6Only);
-
-SocketAddressBindIPv6Only socket_address_bind_ipv6_only_or_bool_from_string(const char *n) {
-        int r;
-
-        r = parse_boolean(n);
-        if (r > 0)
-                return SOCKET_ADDRESS_IPV6_ONLY;
-        if (r == 0)
-                return SOCKET_ADDRESS_BOTH;
-
-        return socket_address_bind_ipv6_only_from_string(n);
-}
-
 bool sockaddr_equal(const union sockaddr_union *a, const union sockaddr_union *b) {
         assert(a);
         assert(b);
index 6e937ffee9d3f7441ef8f2af4ea2ae4481865a14..b8cb834131e94b3522e179ddc2a671aeb77fbf11 100644 (file)
@@ -53,14 +53,6 @@ typedef struct SocketAddress {
         int protocol;
 } SocketAddress;
 
-typedef enum SocketAddressBindIPv6Only {
-        SOCKET_ADDRESS_DEFAULT,
-        SOCKET_ADDRESS_BOTH,
-        SOCKET_ADDRESS_IPV6_ONLY,
-        _SOCKET_ADDRESS_BIND_IPV6_ONLY_MAX,
-        _SOCKET_ADDRESS_BIND_IPV6_ONLY_INVALID = -EINVAL,
-} SocketAddressBindIPv6Only;
-
 #define socket_address_family(a) ((a)->sockaddr.sa.sa_family)
 
 const char* socket_address_type_to_string(int t) _const_;
@@ -74,19 +66,6 @@ static inline int socket_address_unlink(const SocketAddress *a) {
 
 bool socket_address_can_accept(const SocketAddress *a) _pure_;
 
-int socket_address_listen(
-                const SocketAddress *a,
-                int flags,
-                int backlog,
-                SocketAddressBindIPv6Only only,
-                const char *bind_to_device,
-                bool reuse_port,
-                bool free_bind,
-                bool transparent,
-                mode_t directory_mode,
-                mode_t socket_mode,
-                const char *label);
-
 int socket_address_verify(const SocketAddress *a, bool strict) _pure_;
 int socket_address_print(const SocketAddress *a, char **p);
 bool socket_address_matches_fd(const SocketAddress *a, int fd);
@@ -108,10 +87,6 @@ int getsockname_pretty(int fd, char **ret);
 
 int socknameinfo_pretty(const struct sockaddr *sa, socklen_t salen, char **_ret);
 
-const char* socket_address_bind_ipv6_only_to_string(SocketAddressBindIPv6Only b) _const_;
-SocketAddressBindIPv6Only socket_address_bind_ipv6_only_from_string(const char *s) _pure_;
-SocketAddressBindIPv6Only socket_address_bind_ipv6_only_or_bool_from_string(const char *s);
-
 int netlink_family_to_string_alloc(int b, char **s);
 int netlink_family_from_string(const char *s) _pure_;
 
index cec10dece94dcc45b63a89be2e855fcc46dbb184..74356e2325ea6c5a7352005e8bac65635bb48463 100644 (file)
@@ -6,6 +6,7 @@
 #include "execute.h"
 #include "list.h"
 #include "pidref.h"
+#include "socket-label.h"
 #include "socket-util.h"
 #include "unit.h"
 
index 0e41f2674e10b06b3119f272340bb76742a6230d..ad64f4f63d2e01a1d66f815a81312ad4108b44d2 100644 (file)
@@ -8,10 +8,33 @@
 #include "fs-util.h"
 #include "log.h"
 #include "mkdir-label.h"
+#include "parse-util.h"
 #include "selinux-util.h"
+#include "socket-label.h"
 #include "socket-util.h"
+#include "string-table.h"
 #include "umask-util.h"
 
+static const char* const socket_address_bind_ipv6_only_table[_SOCKET_ADDRESS_BIND_IPV6_ONLY_MAX] = {
+        [SOCKET_ADDRESS_DEFAULT]   = "default",
+        [SOCKET_ADDRESS_BOTH]      = "both",
+        [SOCKET_ADDRESS_IPV6_ONLY] = "ipv6-only"
+};
+
+DEFINE_STRING_TABLE_LOOKUP(socket_address_bind_ipv6_only, SocketAddressBindIPv6Only);
+
+SocketAddressBindIPv6Only socket_address_bind_ipv6_only_or_bool_from_string(const char *n) {
+        int r;
+
+        r = parse_boolean(n);
+        if (r > 0)
+                return SOCKET_ADDRESS_IPV6_ONLY;
+        if (r == 0)
+                return SOCKET_ADDRESS_BOTH;
+
+        return socket_address_bind_ipv6_only_from_string(n);
+}
+
 int socket_address_listen(
                 const SocketAddress *a,
                 int flags,
@@ -23,7 +46,7 @@ int socket_address_listen(
                 bool transparent,
                 mode_t directory_mode,
                 mode_t socket_mode,
-                const char *label) {
+                const char *selinux_label) {
 
         _cleanup_close_ int fd = -EBADF;
         const char *p;
@@ -38,15 +61,15 @@ int socket_address_listen(
         if (socket_address_family(a) == AF_INET6 && !socket_ipv6_is_supported())
                 return -EAFNOSUPPORT;
 
-        if (label) {
-                r = mac_selinux_create_socket_prepare(label);
+        if (selinux_label) {
+                r = mac_selinux_create_socket_prepare(selinux_label);
                 if (r < 0)
                         return r;
         }
 
         fd = RET_NERRNO(socket(socket_address_family(a), a->type | flags, a->protocol));
 
-        if (label)
+        if (selinux_label)
                 mac_selinux_create_socket_clear();
 
         if (fd < 0)
diff --git a/src/shared/socket-label.h b/src/shared/socket-label.h
new file mode 100644 (file)
index 0000000..8d882cb
--- /dev/null
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "shared-forward.h"
+
+typedef enum SocketAddressBindIPv6Only {
+        SOCKET_ADDRESS_DEFAULT,
+        SOCKET_ADDRESS_BOTH,
+        SOCKET_ADDRESS_IPV6_ONLY,
+        _SOCKET_ADDRESS_BIND_IPV6_ONLY_MAX,
+        _SOCKET_ADDRESS_BIND_IPV6_ONLY_INVALID = -EINVAL,
+} SocketAddressBindIPv6Only;
+
+const char* socket_address_bind_ipv6_only_to_string(SocketAddressBindIPv6Only b) _const_;
+SocketAddressBindIPv6Only socket_address_bind_ipv6_only_from_string(const char *s) _pure_;
+SocketAddressBindIPv6Only socket_address_bind_ipv6_only_or_bool_from_string(const char *s);
+
+int socket_address_listen(
+                const SocketAddress *a,
+                int flags,
+                int backlog,
+                SocketAddressBindIPv6Only only,
+                const char *bind_to_device,
+                bool reuse_port,
+                bool free_bind,
+                bool transparent,
+                mode_t directory_mode,
+                mode_t socket_mode,
+                const char *selinux_label);
index 771bf2f799e83ce42c2b378c64cda0a899c69172..060388685f697d1fee6082e303bec4a0c135ac39 100644 (file)
@@ -15,6 +15,7 @@
 #include "netlink-sock-diag.h"
 #include "netlink-util.h"
 #include "parse-util.h"
+#include "socket-label.h"
 #include "socket-netlink.h"
 #include "socket-util.h"
 #include "string-util.h"
index 41b6cd613641bdd31b6e89ebcf1b2549701a3371..95ceb0e5ae2e87e8c87cb1debb8e9a0077669e0c 100644 (file)
@@ -29,6 +29,7 @@
 #include "service.h"
 #include "show-status.h"
 #include "socket.h"
+#include "socket-label.h"
 #include "socket-util.h"
 #include "swap.h"
 #include "test-tables.h"