]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
socket-util: add helper for getting peer pidfd
authorLennart Poettering <lennart@poettering.net>
Thu, 23 Nov 2023 16:58:01 +0000 (17:58 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 2 Jan 2024 16:57:34 +0000 (17:57 +0100)
src/basic/missing_socket.h
src/basic/socket-util.c
src/basic/socket-util.h

index 30ac297e171716519b748de8f9a752a967785223..3333cf18e7a6e88115bf7c8db898061774f5483e 100644 (file)
@@ -32,6 +32,10 @@ struct sockaddr_vm {
 #define SO_PEERGROUPS 59
 #endif
 
+#ifndef SO_PEERPIDFD
+#define SO_PEERPIDFD 77
+#endif
+
 #ifndef SO_BINDTOIFINDEX
 #define SO_BINDTOIFINDEX 62
 #endif
index 86472c88474f6de43ab1e9037b3991bbca6d8a68..98133a2ecda7686e851dbeab76ced51bf75656e5 100644 (file)
@@ -956,6 +956,21 @@ int getpeergroups(int fd, gid_t **ret) {
         return (int) n;
 }
 
+int getpeerpidfd(int fd) {
+        socklen_t n = sizeof(int);
+        int pidfd = -EBADF;
+
+        assert(fd >= 0);
+
+        if (getsockopt(fd, SOL_SOCKET, SO_PEERPIDFD, &pidfd, &n) < 0)
+                return -errno;
+
+        if (n != sizeof(int))
+                return -EIO;
+
+        return pidfd;
+}
+
 ssize_t send_many_fds_iov_sa(
                 int transport_fd,
                 int *fds_array, size_t n_fds_array,
index 9a11df834d113ebd26a76a88458dc62d52eef185..032d73857ed7f43d790d3df9d070cac4148c7926 100644 (file)
@@ -152,6 +152,7 @@ bool address_label_valid(const char *p);
 int getpeercred(int fd, struct ucred *ucred);
 int getpeersec(int fd, char **ret);
 int getpeergroups(int fd, gid_t **ret);
+int getpeerpidfd(int fd);
 
 ssize_t send_many_fds_iov_sa(
                 int transport_fd,