[SCM] Socket Wrapper Repository - branch master updated

Andreas Schneider asn at samba.org
Mon Sep 1 03:31:30 MDT 2014


The branch, master has been updated
       via  442ac15 swrap: Fix whitespace errors.
       via  98dda4f swrap: Update copyright notice.
       via  e3f7e8c swrap: Wrap fopen to detect stale file descriptors.
       via  9694d99 swrap: Use swrap_address in swrap_accept().
       via  3f53182 swrap: Remove unused sockaddr_dup() function.
       via  eedb8e7 swrap: Use swrap_address in the socket_info struct.
       via  bb76c42 swrap: Use a sockaddr_un for the unix path in socket_info.
       via  2b587c8 swrap: Rename swrap_pcap_dump_packet().
       via  7942896 swrap: Rename swrap_pcap_get_fd().
       via  d094f2c swrap: Rename swrap_marshall_packet().
       via  016569e swrap: Rename swrap_packet_init().
       via  8af84a5 swrap: Rename socket_wrapper_pcap_file().
       via  29ea9ce echo_srv: Fix type punning warnings.
       via  0c921aa tests: Fix type punning warnings.
       via  fa6fee0 swrap: Fix type punning warnings.
       via  6637a81 cmake: Set strict aliasing and strict overflow checks.
      from  c83b7d4 Add #define __APPLE_USE_RFC_3542 to CFLAGS

http://gitweb.samba.org/?p=socket_wrapper.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 442ac150e96595ba4025f9f508ce25b9d8a62b23
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Sep 1 09:17:06 2014 +0200

    swrap: Fix whitespace errors.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 98dda4f6d01ebea315a7a3d335ae26064394bcf0
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Aug 29 13:12:58 2014 +0200

    swrap: Update copyright notice.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit e3f7e8ce9158420379fbba3164c05bd845708c60
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Aug 27 16:00:43 2014 +0200

    swrap: Wrap fopen to detect stale file descriptors.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 9694d9924f3f7e88852936a8a27101986bb47223
Author: Andreas Schneider <asn at samba.org>
Date:   Wed May 21 15:14:56 2014 +0200

    swrap: Use swrap_address in swrap_accept().
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 3f531827c0223be4a88ae8c09b4361c2c59a2769
Author: Andreas Schneider <asn at samba.org>
Date:   Wed May 21 15:15:38 2014 +0200

    swrap: Remove unused sockaddr_dup() function.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit eedb8e72cf898d623dc93f881878ca2fcbbb7402
Author: Andreas Schneider <asn at samba.org>
Date:   Wed May 21 14:56:35 2014 +0200

    swrap: Use swrap_address in the socket_info struct.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit bb76c424e29b17398c342cf64cadfe96ced7b997
Author: Andreas Schneider <asn at samba.org>
Date:   Wed May 21 14:06:05 2014 +0200

    swrap: Use a sockaddr_un for the unix path in socket_info.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 2b587c81f8e29118206a40a20422d0f08f61da5c
Author: Andreas Schneider <asn at samba.org>
Date:   Wed May 21 11:01:46 2014 +0200

    swrap: Rename swrap_pcap_dump_packet().
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 7942896ce6bd0ad7a169aea5cba062f50727d265
Author: Andreas Schneider <asn at samba.org>
Date:   Wed May 21 10:59:29 2014 +0200

    swrap: Rename swrap_pcap_get_fd().
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit d094f2c18684755bb204bb29d74dc0fe6256fa81
Author: Andreas Schneider <asn at samba.org>
Date:   Wed May 21 10:58:48 2014 +0200

    swrap: Rename swrap_marshall_packet().
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 016569e151f8a7d238f2b3401aac80fbc78d2b87
Author: Andreas Schneider <asn at samba.org>
Date:   Wed May 21 10:57:36 2014 +0200

    swrap: Rename swrap_packet_init().
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 8af84a5b318e419dcd2ebfd4020d5792424a7240
Author: Andreas Schneider <asn at samba.org>
Date:   Wed May 21 10:55:48 2014 +0200

    swrap: Rename socket_wrapper_pcap_file().
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 29ea9ce132d2dca6b6de10b3d740b3ce38bccb55
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Aug 29 17:37:51 2014 +0200

    echo_srv: Fix type punning warnings.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 0c921aa3129a5b1b0ff9c7fae2c0b2ca6bde7510
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Aug 29 10:33:16 2014 +0200

    tests: Fix type punning warnings.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit fa6fee05250c844eb0e00ee47b87ea2e5cd383bf
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Aug 29 10:25:51 2014 +0200

    swrap: Fix type punning warnings.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

commit 6637a810c7548bcea3fdaa88d4ffe2ed612bcf7a
Author: Andreas Schneider <asn at samba.org>
Date:   Thu Aug 28 15:22:35 2014 +0200

    cmake: Set strict aliasing and strict overflow checks.
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 cmake/Modules/DefineCompilerFlags.cmake  |    4 +
 src/socket_wrapper.c                     |  659 +++++++++++++++++-------------
 tests/CMakeLists.txt                     |    1 +
 tests/echo_srv.c                         |  178 ++++----
 tests/test_echo_tcp_bind.c               |  163 +++++---
 tests/test_echo_tcp_connect.c            |   30 +-
 tests/test_echo_tcp_get_peer_sock_name.c |  370 ++++++++++-------
 tests/test_echo_tcp_socket.c             |   20 +-
 tests/test_echo_tcp_socket_options.c     |   48 ++--
 tests/test_echo_tcp_write_read.c         |   30 +-
 tests/test_echo_tcp_writev_readv.c       |   32 +-
 tests/test_echo_udp_send_recv.c          |   28 +-
 tests/test_echo_udp_sendmsg_recvmsg.c    |   54 ++--
 tests/test_echo_udp_sendto_recvfrom.c    |   62 ++--
 tests/torture.h                          |   17 +
 15 files changed, 942 insertions(+), 754 deletions(-)


Changeset truncated at 500 lines:

diff --git a/cmake/Modules/DefineCompilerFlags.cmake b/cmake/Modules/DefineCompilerFlags.cmake
index 4a747d2..53481c3 100644
--- a/cmake/Modules/DefineCompilerFlags.cmake
+++ b/cmake/Modules/DefineCompilerFlags.cmake
@@ -15,10 +15,14 @@ if (UNIX AND NOT WIN32)
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wshadow -Wmissing-prototypes -Wdeclaration-after-statement")
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused -Wfloat-equal -Wpointer-arith -Wwrite-strings -Wformat-security")
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-format-attribute -Wcast-align -Wcast-qual")
+        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-missing-field-initializers")
 
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=pointer-arith -Werror=declaration-after-statement")
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=implicit-function-declaration -Werror=write-strings")
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast")
+        # -Werror=strict-aliasing is broken
+        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-aliasing -Wstrict-aliasing=2")
+        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrict-overflow -Wstrict-overflow=5 -Werror=strict-overflow")
         set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE")
 
 	if (OSX)
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index 930ab58..1b3352b 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -1,7 +1,7 @@
 /*
- * Copyright (C) Jelmer Vernooij 2005,2008 <jelmer at samba.org>
- * Copyright (C) Stefan Metzmacher 2006-2009 <metze at samba.org>
- * Copyright (C) Andreas Schneider 2013 <asn at samba.org>
+ * Copyright (c) 2005-2008 Jelmer Vernooij <jelmer at samba.org>
+ * Copyright (C) 2006-2014 Stefan Metzmacher <metze at samba.org>
+ * Copyright (C) 2013-2014 Andreas Schneider <asn at samba.org>
  *
  * All rights reserved.
  *
@@ -210,6 +210,19 @@ enum swrap_dbglvl_e {
  * without changing the format above */
 #define MAX_WRAPPED_INTERFACES 40
 
+struct swrap_address {
+	socklen_t sa_socklen;
+	union {
+		struct sockaddr s;
+		struct sockaddr_in in;
+#ifdef HAVE_IPV6
+		struct sockaddr_in6 in6;
+#endif
+		struct sockaddr_un un;
+		struct sockaddr_storage ss;
+	} sa;
+};
+
 struct socket_info_fd {
 	struct socket_info_fd *prev, *next;
 	int fd;
@@ -229,16 +242,12 @@ struct socket_info
 	int defer_connect;
 	int pktinfo;
 
-	char *tmp_path;
-
-	struct sockaddr *bindname;
-	socklen_t bindname_len;
-
-	struct sockaddr *myname;
-	socklen_t myname_len;
+	/* The unix path so we can unlink it on close() */
+	struct sockaddr_un un_addr;
 
-	struct sockaddr *peername;
-	socklen_t peername_len;
+	struct swrap_address bindname;
+	struct swrap_address myname;
+	struct swrap_address peername;
 
 	struct {
 		unsigned long pck_snd;
@@ -328,6 +337,7 @@ struct swrap_libc_fns {
 			    socklen_t addrlen);
 	int (*libc_dup)(int fd);
 	int (*libc_dup2)(int oldfd, int newfd);
+	FILE *(*libc_fopen)(const char *name, const char *mode);
 #ifdef HAVE_EVENTFD
 	int (*libc_eventfd)(int count, int flags);
 #endif
@@ -636,6 +646,13 @@ static int libc_listen(int sockfd, int backlog)
 	return swrap.fns.libc_listen(sockfd, backlog);
 }
 
+static FILE *libc_fopen(const char *name, const char *mode)
+{
+	swrap_load_lib_function(SWRAP_LIBC, fopen);
+
+	return swrap.fns.libc_fopen(name, mode);
+}
+
 static int libc_vopen(const char *pathname, int flags, va_list ap)
 {
 	long int mode = 0;
@@ -813,22 +830,15 @@ static const struct in6_addr *swrap_ipv6(void)
 }
 #endif
 
-static struct sockaddr *sockaddr_dup(const void *data, socklen_t len)
-{
-	struct sockaddr *ret = (struct sockaddr *)malloc(len);
-	memcpy(ret, data, len);
-	return ret;
-}
-
-static void set_port(int family, int prt, struct sockaddr *addr)
+static void set_port(int family, int prt, struct swrap_address *addr)
 {
 	switch (family) {
 	case AF_INET:
-		((struct sockaddr_in *)addr)->sin_port = htons(prt);
+		addr->sa.in.sin_port = htons(prt);
 		break;
 #ifdef HAVE_IPV6
 	case AF_INET6:
-		((struct sockaddr_in6 *)addr)->sin6_port = htons(prt);
+		addr->sa.in6.sin6_port = htons(prt);
 		break;
 #endif
 	}
@@ -970,7 +980,7 @@ static int convert_in_un_remote(struct socket_info *si, const struct sockaddr *i
 
 	switch (inaddr->sa_family) {
 	case AF_INET: {
-		const struct sockaddr_in *in = 
+		const struct sockaddr_in *in =
 		    (const struct sockaddr_in *)(const void *)inaddr;
 		unsigned int addr = ntohl(in->sin_addr.s_addr);
 		char u_type = '\0';
@@ -1017,7 +1027,7 @@ static int convert_in_un_remote(struct socket_info *si, const struct sockaddr *i
 	}
 #ifdef HAVE_IPV6
 	case AF_INET6: {
-		const struct sockaddr_in6 *in = 
+		const struct sockaddr_in6 *in =
 		    (const struct sockaddr_in6 *)(const void *)inaddr;
 		struct in6_addr cmp1, cmp2;
 
@@ -1064,14 +1074,14 @@ static int convert_in_un_remote(struct socket_info *si, const struct sockaddr *i
 	}
 
 	if (is_bcast) {
-		snprintf(un->sun_path, sizeof(un->sun_path), "%s/EINVAL", 
+		snprintf(un->sun_path, sizeof(un->sun_path), "%s/EINVAL",
 			 socket_wrapper_dir());
 		SWRAP_LOG(SWRAP_LOG_DEBUG, "un path [%s]", un->sun_path);
 		/* the caller need to do more processing */
 		return 0;
 	}
 
-	snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, 
+	snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT,
 		 socket_wrapper_dir(), type, iface, prt);
 	SWRAP_LOG(SWRAP_LOG_DEBUG, "un path [%s]", un->sun_path);
 
@@ -1091,7 +1101,7 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in
 
 	switch (si->family) {
 	case AF_INET: {
-		const struct sockaddr_in *in = 
+		const struct sockaddr_in *in =
 		    (const struct sockaddr_in *)(const void *)inaddr;
 		unsigned int addr = ntohl(in->sin_addr.s_addr);
 		char u_type = '\0';
@@ -1144,7 +1154,7 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in
 		}
 
 		/* Store the bind address for connect() */
-		if (si->bindname == NULL) {
+		if (si->bindname.sa_socklen == 0) {
 			struct sockaddr_in bind_in;
 			socklen_t blen = sizeof(struct sockaddr_in);
 
@@ -1153,15 +1163,15 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in
 			bind_in.sin_port = in->sin_port;
 			bind_in.sin_addr.s_addr = htonl(0x7F000000 | iface);
 
-			si->bindname = sockaddr_dup(&bind_in, blen);
-			si->bindname_len = blen;
+			si->bindname.sa_socklen = blen;
+			memcpy(&si->bindname.sa.in, &bind_in, blen);
 		}
 
 		break;
 	}
 #ifdef HAVE_IPV6
 	case AF_INET6: {
-		const struct sockaddr_in6 *in = 
+		const struct sockaddr_in6 *in =
 		    (const struct sockaddr_in6 *)(const void *)inaddr;
 		struct in6_addr cmp1, cmp2;
 
@@ -1195,7 +1205,7 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in
 		}
 
 		/* Store the bind address for connect() */
-		if (si->bindname == NULL) {
+		if (si->bindname.sa_socklen == 0) {
 			struct sockaddr_in6 bind_in;
 			socklen_t blen = sizeof(struct sockaddr_in6);
 
@@ -1206,8 +1216,8 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in
 			bind_in.sin6_addr = *swrap_ipv6();
 			bind_in.sin6_addr.s6_addr[15] = iface;
 
-			si->bindname = sockaddr_dup(&bind_in, blen);
-			si->bindname_len = blen;
+			memcpy(&si->bindname.sa.in6, &bind_in, blen);
+			si->bindname.sa_socklen = blen;
 		}
 
 		break;
@@ -1230,12 +1240,12 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in
 	if (prt == 0) {
 		/* handle auto-allocation of ephemeral ports */
 		for (prt = 5001; prt < 10000; prt++) {
-			snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, 
+			snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT,
 				 socket_wrapper_dir(), type, iface, prt);
 			if (stat(un->sun_path, &st) == 0) continue;
 
-			set_port(si->family, prt, si->myname);
-			set_port(si->family, prt, si->bindname);
+			set_port(si->family, prt, &si->myname);
+			set_port(si->family, prt, &si->bindname);
 
 			break;
 		}
@@ -1245,7 +1255,7 @@ static int convert_in_un_alloc(struct socket_info *si, const struct sockaddr *in
 		}
 	}
 
-	snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT, 
+	snprintf(un->sun_path, sizeof(un->sun_path), "%s/"SOCKET_FORMAT,
 		 socket_wrapper_dir(), type, iface, prt);
 	SWRAP_LOG(SWRAP_LOG_DEBUG, "un path [%s]", un->sun_path);
 	return 0;
@@ -1440,8 +1450,8 @@ static int sockaddr_convert_to_un(struct socket_info *si,
 	return -1;
 }
 
-static int sockaddr_convert_from_un(const struct socket_info *si, 
-				    const struct sockaddr_un *in_addr, 
+static int sockaddr_convert_from_un(const struct socket_info *si,
+				    const struct sockaddr_un *in_addr,
 				    socklen_t un_addrlen,
 				    int family,
 				    struct sockaddr *out_addr,
@@ -1449,7 +1459,7 @@ static int sockaddr_convert_from_un(const struct socket_info *si,
 {
 	int ret;
 
-	if (out_addr == NULL || out_addrlen == NULL) 
+	if (out_addr == NULL || out_addrlen == NULL)
 		return 0;
 
 	if (un_addrlen == 0) {
@@ -1597,7 +1607,7 @@ union swrap_packet_payload {
 	 SWRAP_PACKET_IP_SIZE + \
 	 SWRAP_PACKET_PAYLOAD_SIZE)
 
-static const char *socket_wrapper_pcap_file(void)
+static const char *swrap_pcap_init_file(void)
 {
 	static int initialized = 0;
 	static const char *s = NULL;
@@ -1614,7 +1624,7 @@ static const char *socket_wrapper_pcap_file(void)
 	/*
 	 * TODO: don't use the structs use plain buffer offsets
 	 *       and PUSH_U8(), PUSH_U16() and PUSH_U32()
-	 * 
+	 *
 	 * for now make sure we disable PCAP support
 	 * if the struct has alignment!
 	 */
@@ -1659,17 +1669,17 @@ static const char *socket_wrapper_pcap_file(void)
 	return s;
 }
 
-static uint8_t *swrap_packet_init(struct timeval *tval,
-				  const struct sockaddr *src,
-				  const struct sockaddr *dest,
-				  int socket_type,
-				  const uint8_t *payload,
-				  size_t payload_len,
-				  unsigned long tcp_seqno,
-				  unsigned long tcp_ack,
-				  unsigned char tcp_ctl,
-				  int unreachable,
-				  size_t *_packet_len)
+static uint8_t *swrap_pcap_packet_init(struct timeval *tval,
+				       const struct sockaddr *src,
+				       const struct sockaddr *dest,
+				       int socket_type,
+				       const uint8_t *payload,
+				       size_t payload_len,
+				       unsigned long tcp_seqno,
+				       unsigned long tcp_ack,
+				       unsigned char tcp_ctl,
+				       int unreachable,
+				       size_t *_packet_len)
 {
 	uint8_t *base;
 	uint8_t *buf;
@@ -1893,7 +1903,7 @@ static uint8_t *swrap_packet_init(struct timeval *tval,
 	return base;
 }
 
-static int swrap_get_pcap_fd(const char *fname)
+static int swrap_pcap_get_fd(const char *fname)
 {
 	static int fd = -1;
 
@@ -1922,11 +1932,11 @@ static int swrap_get_pcap_fd(const char *fname)
 	return fd;
 }
 
-static uint8_t *swrap_marshall_packet(struct socket_info *si,
-				      const struct sockaddr *addr,
-				      enum swrap_packet_type type,
-				      const void *buf, size_t len,
-				      size_t *packet_len)
+static uint8_t *swrap_pcap_marshall_packet(struct socket_info *si,
+					   const struct sockaddr *addr,
+					   enum swrap_packet_type type,
+					   const void *buf, size_t len,
+					   size_t *packet_len)
 {
 	const struct sockaddr *src_addr;
 	const struct sockaddr *dest_addr;
@@ -1952,7 +1962,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 	case SWRAP_CONNECT_SEND:
 		if (si->type != SOCK_STREAM) return NULL;
 
-		src_addr = si->myname;
+		src_addr  = &si->myname.sa.s;
 		dest_addr = addr;
 
 		tcp_seqno = si->io.pck_snd;
@@ -1966,7 +1976,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 	case SWRAP_CONNECT_RECV:
 		if (si->type != SOCK_STREAM) return NULL;
 
-		dest_addr = si->myname;
+		dest_addr = &si->myname.sa.s;
 		src_addr = addr;
 
 		tcp_seqno = si->io.pck_rcv;
@@ -1980,8 +1990,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 	case SWRAP_CONNECT_UNREACH:
 		if (si->type != SOCK_STREAM) return NULL;
 
-		dest_addr = si->myname;
-		src_addr = addr;
+		dest_addr = &si->myname.sa.s;
+		src_addr  = addr;
 
 		/* Unreachable: resend the data of SWRAP_CONNECT_SEND */
 		tcp_seqno = si->io.pck_snd - 1;
@@ -1994,7 +2004,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 	case SWRAP_CONNECT_ACK:
 		if (si->type != SOCK_STREAM) return NULL;
 
-		src_addr = si->myname;
+		src_addr  = &si->myname.sa.s;
 		dest_addr = addr;
 
 		tcp_seqno = si->io.pck_snd;
@@ -2006,7 +2016,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 	case SWRAP_ACCEPT_SEND:
 		if (si->type != SOCK_STREAM) return NULL;
 
-		dest_addr = si->myname;
+		dest_addr = &si->myname.sa.s;
 		src_addr = addr;
 
 		tcp_seqno = si->io.pck_rcv;
@@ -2020,7 +2030,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 	case SWRAP_ACCEPT_RECV:
 		if (si->type != SOCK_STREAM) return NULL;
 
-		src_addr = si->myname;
+		src_addr = &si->myname.sa.s;
 		dest_addr = addr;
 
 		tcp_seqno = si->io.pck_snd;
@@ -2034,7 +2044,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 	case SWRAP_ACCEPT_ACK:
 		if (si->type != SOCK_STREAM) return NULL;
 
-		dest_addr = si->myname;
+		dest_addr = &si->myname.sa.s;
 		src_addr = addr;
 
 		tcp_seqno = si->io.pck_rcv;
@@ -2044,8 +2054,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 		break;
 
 	case SWRAP_SEND:
-		src_addr = si->myname;
-		dest_addr = si->peername;
+		src_addr  = &si->myname.sa.s;
+		dest_addr = &si->peername.sa.s;
 
 		tcp_seqno = si->io.pck_snd;
 		tcp_ack = si->io.pck_rcv;
@@ -2056,13 +2066,16 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 		break;
 
 	case SWRAP_SEND_RST:
-		dest_addr = si->myname;
-		src_addr = si->peername;
+		dest_addr = &si->myname.sa.s;
+		src_addr  = &si->peername.sa.s;
 
 		if (si->type == SOCK_DGRAM) {
-			return swrap_marshall_packet(si, si->peername,
-					  SWRAP_SENDTO_UNREACH,
-			      		  buf, len, packet_len);
+			return swrap_pcap_marshall_packet(si,
+							  &si->peername.sa.s,
+							  SWRAP_SENDTO_UNREACH,
+							  buf,
+							  len,
+							  packet_len);
 		}
 
 		tcp_seqno = si->io.pck_rcv;
@@ -2072,8 +2085,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 		break;
 
 	case SWRAP_PENDING_RST:
-		dest_addr = si->myname;
-		src_addr = si->peername;
+		dest_addr = &si->myname.sa.s;
+		src_addr  = &si->peername.sa.s;
 
 		if (si->type == SOCK_DGRAM) {
 			return NULL;
@@ -2086,8 +2099,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 		break;
 
 	case SWRAP_RECV:
-		dest_addr = si->myname;
-		src_addr = si->peername;
+		dest_addr = &si->myname.sa.s;
+		src_addr  = &si->peername.sa.s;
 
 		tcp_seqno = si->io.pck_rcv;
 		tcp_ack = si->io.pck_snd;
@@ -2098,8 +2111,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 		break;
 
 	case SWRAP_RECV_RST:
-		dest_addr = si->myname;
-		src_addr = si->peername;
+		dest_addr = &si->myname.sa.s;
+		src_addr  = &si->peername.sa.s;
 
 		if (si->type == SOCK_DGRAM) {
 			return NULL;
@@ -2112,7 +2125,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 		break;
 
 	case SWRAP_SENDTO:
-		src_addr = si->myname;
+		src_addr = &si->myname.sa.s;
 		dest_addr = addr;
 
 		si->io.pck_snd += len;
@@ -2120,7 +2133,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 		break;
 
 	case SWRAP_SENDTO_UNREACH:
-		dest_addr = si->myname;
+		dest_addr = &si->myname.sa.s;
 		src_addr = addr;
 
 		unreachable = 1;
@@ -2128,7 +2141,7 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 		break;
 
 	case SWRAP_RECVFROM:
-		dest_addr = si->myname;
+		dest_addr = &si->myname.sa.s;
 		src_addr = addr;
 
 		si->io.pck_rcv += len;
@@ -2138,8 +2151,8 @@ static uint8_t *swrap_marshall_packet(struct socket_info *si,
 	case SWRAP_CLOSE_SEND:
 		if (si->type != SOCK_STREAM) return NULL;
 
-		src_addr = si->myname;
-		dest_addr = si->peername;
+		src_addr  = &si->myname.sa.s;
+		dest_addr = &si->peername.sa.s;


-- 
Socket Wrapper Repository


More information about the samba-cvs mailing list