swrap: Add swrap_msghdr_filter_cmsg_pktinfo().
authorAndreas Schneider <asn@samba.org>
Tue, 3 Jun 2014 13:04:45 +0000 (15:04 +0200)
committerMichael Adam <obnox@samba.org>
Thu, 5 Jun 2014 21:57:10 +0000 (23:57 +0200)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
lib/socket_wrapper/socket_wrapper.c

index 8cb924e282a09fe6289ab9de3947d7bc5f5dfc5d..d1d73d9a732b7a409434372f0ef5386cd0be5274 100644 (file)
@@ -3217,6 +3217,11 @@ static int swrap_sendmsg_copy_cmsg(struct cmsghdr *cmsg,
        return 0;
 }
 
+static int swrap_sendmsg_filter_cmsg_pktinfo(struct cmsghdr *cmsg,
+                                           uint8_t *cm_data,
+                                           size_t *cm_data_space);
+
+
 static int swrap_sendmsg_filter_cmsg_socket(struct cmsghdr *cmsg,
                                            uint8_t *cm_data,
                                            size_t *cm_data_space)
@@ -3226,17 +3231,16 @@ static int swrap_sendmsg_filter_cmsg_socket(struct cmsghdr *cmsg,
        switch(cmsg->cmsg_type) {
 #ifdef IP_PKTINFO
        case IP_PKTINFO:
-               /* TODO swrap_msghdr_filter_cmsg_pktinfo */
+               rc = swrap_sendmsg_filter_cmsg_pktinfo(cmsg,
+                                                      cm_data,
+                                                      cm_data_space);
                break;
 #endif
 #ifdef IPV6_PKTINFO
        case IPV6_PKTINFO:
-               /* TODO swrap_msghdr_filter_cmsg_pktinfo */
-               break;
-#endif
-#ifdef IP_RECVDSTADDR
-       case IP_RECVDSTADDR:
-               /* TODO swrap_msghdr_filter_cmsg_pktinfo */
+               rc = swrap_sendmsg_filter_cmsg_pktinfo(cmsg,
+                                                      cm_data,
+                                                      cm_data_space);
                break;
 #endif
        default:
@@ -3245,6 +3249,21 @@ static int swrap_sendmsg_filter_cmsg_socket(struct cmsghdr *cmsg,
 
        return rc;
 }
+
+static int swrap_sendmsg_filter_cmsg_pktinfo(struct cmsghdr *cmsg,
+                                            uint8_t *cm_data,
+                                            size_t *cm_data_space)
+{
+       (void)cmsg; /* unused */
+       (void)cm_data; /* unused */
+       (void)cm_data_space; /* unused */
+
+       /*
+        * Passing a IP pktinfo to a unix socket might be rejected by the
+        * Kernel, at least on FreeBSD. So skip this cmsg.
+        */
+       return 0;
+}
 #endif /* HAVE_STRUCT_MSGHDR_MSG_CONTROL */
 
 static ssize_t swrap_sendmsg_before(int fd,