swrap: Call swrap_msghdr_socket_info in swrap_recvmsg_after().
authorAndreas Schneider <asn@samba.org>
Tue, 3 Jun 2014 12:57:08 +0000 (14:57 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 5 Jun 2014 21:57:10 +0000 (23:57 +0200)
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Andreas Schneider <asn@samba.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
lib/socket_wrapper/socket_wrapper.c

index fdb0c5984c5423787fd379620f3481672f2858e9..e77ef85e7c9204ecefadf2d631b2b29a40f1a542 100644 (file)
@@ -3400,6 +3400,7 @@ static int swrap_recvmsg_after(int fd,
        off_t ofs = 0;
        size_t avail = 0;
        size_t remain;
+       int rc;
 
        /* to give better errors */
        if (ret == -1) {
@@ -3416,8 +3417,8 @@ static int swrap_recvmsg_after(int fd,
        }
 
        if (avail == 0) {
-               errno = saved_errno;
-               return 0;
+               rc = 0;
+               goto done;
        }
 
        if (ret == -1) {
@@ -3460,8 +3461,6 @@ static int swrap_recvmsg_after(int fd,
                }
 
                if (un_addr != NULL) {
-                       int rc;
-
                        rc = sockaddr_convert_from_un(si,
                                                      un_addr,
                                                      un_addrlen,
@@ -3488,10 +3487,23 @@ static int swrap_recvmsg_after(int fd,
                break;
        }
 
+       rc = 0;
 done:
        free(buf);
        errno = saved_errno;
-       return 0;
+
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
+       if (rc == 0 &&
+           msg->msg_controllen > 0 &&
+           msg->msg_control != NULL) {
+               rc = swrap_msghdr_add_socket_info(si, msg);
+               if (rc < 0) {
+                       return -1;
+               }
+       }
+#endif
+
+       return rc;
 }
 
 /****************************************************************************