]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journal: unbreak sd_journal_sendv
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 3 Dec 2015 07:20:39 +0000 (02:20 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 3 Dec 2015 14:14:01 +0000 (09:14 -0500)
Borked since
commit 3ee897d6c2401effbc82f5eef35fce405781d6c8
Author: Lennart Poettering <lennart@poettering.net>
Date:   Wed Sep 23 01:00:04 2015 +0200

    tree-wide: port more code to use send_one_fd() and receive_one_fd()

because here our fd is not connected and we need to specify
the address.

src/basic/socket-util.c
src/basic/socket-util.h
src/journal/journal-send.c

index 3458741cb50d938d7022f8b6e89efd409a249173..79901a6a0626c26a708e1f8d180bf2e7230732ae 100644 (file)
@@ -870,16 +870,24 @@ int getpeersec(int fd, char **ret) {
         return 0;
 }
 
-int send_one_fd(int transport_fd, int fd, int flags) {
+int send_one_fd_sa(
+                int transport_fd,
+                int fd,
+                const struct sockaddr *sa, socklen_t len,
+                int flags) {
+
         union {
                 struct cmsghdr cmsghdr;
                 uint8_t buf[CMSG_SPACE(sizeof(int))];
         } control = {};
+        struct cmsghdr *cmsg;
+
         struct msghdr mh = {
+                .msg_name = (struct sockaddr*) sa,
+                .msg_namelen = len,
                 .msg_control = &control,
                 .msg_controllen = sizeof(control),
         };
-        struct cmsghdr *cmsg;
 
         assert(transport_fd >= 0);
         assert(fd >= 0);
index f9c90e0e738a18e14e179d951fa790c0352fe6dc..6da1df68d80333fa25a73051c13515e85a269210 100644 (file)
@@ -128,7 +128,11 @@ int ip_tos_from_string(const char *s);
 int getpeercred(int fd, struct ucred *ucred);
 int getpeersec(int fd, char **ret);
 
-int send_one_fd(int transport_fd, int fd, int flags);
+int send_one_fd_sa(int transport_fd,
+                   int fd,
+                   const struct sockaddr *sa, socklen_t len,
+                   int flags);
+#define send_one_fd(transport_fd, fd, flags) send_one_fd_sa(transport_fd, fd, NULL, 0, flags)
 int receive_one_fd(int transport_fd, int flags);
 
 #define CMSG_FOREACH(cmsg, mh)                                          \
index 8b3a367632bc408304447c343120b36446ef42ca..adb3af006d7cdfb476f6b14e19b360009c72d501 100644 (file)
@@ -337,7 +337,7 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
                         return r;
         }
 
-        return send_one_fd(fd, buffer_fd, 0);
+        return send_one_fd_sa(fd, buffer_fd, mh.msg_name, mh.msg_namelen, 0);
 }
 
 static int fill_iovec_perror_and_send(const char *message, int skip, struct iovec iov[]) {