]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
socket-util: add trivial socket_get_cookie() helper
authorLennart Poettering <lennart@poettering.net>
Thu, 15 May 2025 07:15:10 +0000 (09:15 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 15 May 2025 07:45:19 +0000 (09:45 +0200)
src/basic/socket-util.c
src/basic/socket-util.h
src/libsystemd/sd-netlink/test-netlink.c
src/shared/socket-netlink.c

index c5499d6e482a4f8c63990de3ebde948225be02d3..919884ba472ae34e68990662ab7e8578246f1606 100644 (file)
@@ -1959,3 +1959,18 @@ finalize:
 
         return 0;
 }
+
+int socket_get_cookie(int fd, uint64_t *ret) {
+        assert(fd >= 0);
+
+        uint64_t cookie = 0;
+        socklen_t cookie_len = sizeof(cookie);
+        if (getsockopt(fd, SOL_SOCKET, SO_COOKIE, &cookie, &cookie_len) < 0)
+                return -errno;
+
+        assert(cookie_len == sizeof(cookie));
+        if (ret)
+                *ret = cookie;
+
+        return 0;
+}
index 830b48e435f1989faec091034de8c97bbaec4b25..dea93dbde89d34e9bcfb9d86995030cbcb5234a9 100644 (file)
@@ -354,3 +354,5 @@ int socket_address_equal_unix(const char *a, const char *b);
 int vsock_get_local_cid(unsigned *ret);
 
 int netlink_socket_get_multicast_groups(int fd, size_t *ret_len, uint32_t **ret_groups);
+
+int socket_get_cookie(int fd, uint64_t *ret);
index 274719c29630555fc641d4eab7a10dd4329a09f9..252bb46b6efed58306cc413025cd5a9cd75b2b06 100644 (file)
@@ -717,9 +717,7 @@ TEST(sock_diag_unix) {
         ASSERT_OK_ERRNO(fstat(unix_fd, &st));
 
         uint64_t cookie;
-        socklen_t cookie_len = sizeof(cookie);
-        ASSERT_OK_ERRNO(getsockopt(unix_fd, SOL_SOCKET, SO_COOKIE, &cookie, &cookie_len));
-        ASSERT_EQ(cookie_len, sizeof(cookie));
+        ASSERT_OK(socket_get_cookie(unix_fd, &cookie));
 
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
         ASSERT_OK(sd_sock_diag_message_new_unix(nl, &message, st.st_ino, cookie, UDIAG_SHOW_RQLEN));
index 1ecb2284fe3d52f56f0c77c3a98322310c73abbe..a810e1c1f3dd1fa6354cbecd37f9619854e57018 100644 (file)
@@ -504,12 +504,10 @@ int af_unix_get_qlen(int fd, uint32_t *ret) {
         if (r < 0)
                 return r;
 
-        uint64_t cookie = 0;
-        socklen_t cookie_len = sizeof(cookie);
-        if (getsockopt(fd, SOL_SOCKET, SO_COOKIE, &cookie, &cookie_len) < 0)
-                return -errno;
-
-        assert(cookie_len == sizeof(cookie));
+        uint64_t cookie;
+        r = socket_get_cookie(fd, &cookie);
+        if (r < 0)
+                return r;
 
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
         r = sd_sock_diag_message_new_unix(nl, &message, st.st_ino, cookie, UDIAG_SHOW_RQLEN);