The branch, master has been updated
       via  bd951c1 swrap: Add paranoia NULL checks
       via  6e1ed1d swrap: Fix strict aliasing issues in 
swrap_pcap_packet_init()
       via  2cfe068 swrap: Fix "Value stored never used" warning
       via  6f69593 tests: Fix typo in echo_srv help
       via  887ce58 doc: Fix some typos in the manpage
      from  2d53497 swrap: Do not use FALL_THROUGH for empty case statements

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


- Log -----------------------------------------------------------------
commit bd951c1f6944011bb5585cb58c92ca5cd5b78489
Author: Andreas Schneider <a...@samba.org>
Date:   Fri Mar 15 14:59:14 2019 +0100

    swrap: Add paranoia NULL checks
    
    csbuild complains about missing NULL checks here.
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>

commit 6e1ed1da3f4372b7de69c5f8be227d85727b2b59
Author: Andreas Schneider <a...@samba.org>
Date:   Thu Feb 28 13:00:40 2019 +0100

    swrap: Fix strict aliasing issues in swrap_pcap_packet_init()
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>

commit 2cfe0686137c61edd2ff9c6fa01e5499d210c0c5
Author: Anoop C S <anoo...@redhat.com>
Date:   Fri Mar 15 18:48:40 2019 +0530

    swrap: Fix "Value stored never used" warning
    
    Signed-off-by: Anoop C S <anoo...@redhat.com>
    Reviewed-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>

commit 6f69593669b7d8424492da95a58d4d7cffa3c974
Author: Andreas Schneider <a...@samba.org>
Date:   Thu Feb 28 13:02:35 2019 +0100

    tests: Fix typo in echo_srv help
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>

commit 887ce58dff7d8325e01738bd099e57dbace469f8
Author: Andreas Schneider <a...@samba.org>
Date:   Thu Feb 28 13:02:08 2019 +0100

    doc: Fix some typos in the manpage
    
    Signed-off-by: Andreas Schneider <a...@samba.org>
    Reviewed-by: Ralph Boehme <s...@samba.org>

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

Summary of changes:
 doc/socket_wrapper.1     |   6 +--
 doc/socket_wrapper.1.txt |   8 +--
 src/socket_wrapper.c     | 123 +++++++++++++++++++++++++++--------------------
 tests/echo_srv.c         |   2 +-
 4 files changed, 79 insertions(+), 60 deletions(-)


Changeset truncated at 500 lines:

diff --git a/doc/socket_wrapper.1 b/doc/socket_wrapper.1
index a064eed..9f3f75a 100644
--- a/doc/socket_wrapper.1
+++ b/doc/socket_wrapper.1
@@ -44,7 +44,7 @@ socket_wrapper aims to help client/server software 
development teams willing to
 .sp -1
 .IP \(bu 2.3
 .\}
-Redirects all network communication to happen over unix sockets\&.
+Redirects all network communication to happen over Unix sockets\&.
 .RE
 .sp
 .RS 4
@@ -66,13 +66,13 @@ Support for IPv4 and IPv6 socket and addressing emulation\&.
 .sp -1
 .IP \(bu 2.3
 .\}
-Ablility to capture network traffic in pcap format\&.
+Ability to capture network traffic in pcap format\&.
 .RE
 .SH "ENVIRONMENT VARIABLES"
 .PP
 \fBSOCKET_WRAPPER_DIR\fR
 .RS 4
-The user defines a directory where to put all the unix sockets using the 
envionment variable "SOCKET_WRAPPER_DIR=/path/to/socket_dir"\&. When a server 
opens a port or a client wants to connect, socket_wrapper will translate IP 
addresses to a special socket_wrapper name and look for the relevant unix 
socket in the SOCKET_WRAPPER_DIR\&.
+The user defines a directory where to put all the unix sockets using the 
environment variable "SOCKET_WRAPPER_DIR=/path/to/socket_dir"\&. When a server 
opens a port or a client wants to connect, socket_wrapper will translate IP 
addresses to a special socket_wrapper name and look for the relevant Unix 
socket in the SOCKET_WRAPPER_DIR\&.
 .RE
 .PP
 \fBSOCKET_WRAPPER_DEFAULT_IFACE\fR
diff --git a/doc/socket_wrapper.1.txt b/doc/socket_wrapper.1.txt
index da16c6d..b3ba96c 100644
--- a/doc/socket_wrapper.1.txt
+++ b/doc/socket_wrapper.1.txt
@@ -21,9 +21,9 @@ gain full functional test coverage. It makes possible to run 
several instances
 of the full software stack on the same machine and perform locally functional
 testing of complex network configurations.
 
-- Redirects all network communication to happen over unix sockets.
+- Redirects all network communication to happen over Unix sockets.
 - Support for IPv4 and IPv6 socket and addressing emulation.
-- Ablility to capture network traffic in pcap format.
+- Ability to capture network traffic in pcap format.
 
 ENVIRONMENT VARIABLES
 ---------------------
@@ -31,9 +31,9 @@ ENVIRONMENT VARIABLES
 *SOCKET_WRAPPER_DIR*::
 
 The user defines a directory where to put all the unix sockets using the
-envionment variable "SOCKET_WRAPPER_DIR=/path/to/socket_dir". When a server
+environment variable "SOCKET_WRAPPER_DIR=/path/to/socket_dir". When a server
 opens a port or a client wants to connect, socket_wrapper will translate IP
-addresses to a special socket_wrapper name and look for the relevant unix
+addresses to a special socket_wrapper name and look for the relevant Unix
 socket in the SOCKET_WRAPPER_DIR.
 
 *SOCKET_WRAPPER_DEFAULT_IFACE*::
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index a5037f7..7841c85 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -2461,14 +2461,20 @@ static uint8_t *swrap_pcap_packet_init(struct timeval 
*tval,
                                       int unreachable,
                                       size_t *_packet_len)
 {
-       uint8_t *base;
-       uint8_t *buf;
-       struct swrap_packet_frame *frame;
-       union swrap_packet_ip *ip;
+       uint8_t *base = NULL;
+       uint8_t *buf = NULL;
+       union {
+               uint8_t *ptr;
+               struct swrap_packet_frame *frame;
+       } f;
+       union {
+               uint8_t *ptr;
+               union swrap_packet_ip *ip;
+       } i;
        union swrap_packet_payload *pay;
        size_t packet_len;
        size_t alloc_len;
-       size_t nonwire_len = sizeof(*frame);
+       size_t nonwire_len = sizeof(struct swrap_packet_frame);
        size_t wire_hdr_len = 0;
        size_t wire_len = 0;
        size_t ip_hdr_len = 0;
@@ -2490,7 +2496,7 @@ static uint8_t *swrap_pcap_packet_init(struct timeval 
*tval,
                dest_in = (const struct sockaddr_in *)(const void *)dest;
                src_port = src_in->sin_port;
                dest_port = dest_in->sin_port;
-               ip_hdr_len = sizeof(ip->v4);
+               ip_hdr_len = sizeof(i.ip->v4);
                break;
 #ifdef HAVE_IPV6
        case AF_INET6:
@@ -2498,7 +2504,7 @@ static uint8_t *swrap_pcap_packet_init(struct timeval 
*tval,
                dest_in6 = (const struct sockaddr_in6 *)(const void *)dest;
                src_port = src_in6->sin6_port;
                dest_port = dest_in6->sin6_port;
-               ip_hdr_len = sizeof(ip->v6);
+               ip_hdr_len = sizeof(i.ip->v6);
                break;
 #endif
        default:
@@ -2539,7 +2545,6 @@ static uint8_t *swrap_pcap_packet_init(struct timeval 
*tval,
                if (wire_len > 64 ) {
                        icmp_truncate_len = wire_len - 64;
                }
-               wire_hdr_len += icmp_hdr_len;
                wire_len += icmp_hdr_len;
        }
 
@@ -2555,39 +2560,50 @@ static uint8_t *swrap_pcap_packet_init(struct timeval 
*tval,
        }
 
        buf = base;
+       f.ptr = buf;
+
+       f.frame->seconds                = tval->tv_sec;
+       f.frame->micro_seconds  = tval->tv_usec;
+       f.frame->recorded_length        = wire_len - icmp_truncate_len;
+       f.frame->full_length    = wire_len - icmp_truncate_len;
 
-       frame = (struct swrap_packet_frame *)(void *)buf;
-       frame->seconds          = tval->tv_sec;
-       frame->micro_seconds    = tval->tv_usec;
-       frame->recorded_length  = wire_len - icmp_truncate_len;
-       frame->full_length      = wire_len - icmp_truncate_len;
        buf += SWRAP_PACKET_FRAME_SIZE;
 
-       ip = (union swrap_packet_ip *)(void *)buf;
+       i.ptr = buf;
        switch (src->sa_family) {
        case AF_INET:
-               ip->v4.ver_hdrlen       = 0x45; /* version 4 and 5 * 32 bit 
words */
-               ip->v4.tos              = 0x00;
-               ip->v4.packet_length    = htons(wire_len - icmp_truncate_len);
-               ip->v4.identification   = htons(0xFFFF);
-               ip->v4.flags            = 0x40; /* BIT 1 set - means don't 
fragment */
-               ip->v4.fragment         = htons(0x0000);
-               ip->v4.ttl              = 0xFF;
-               ip->v4.protocol         = protocol;
-               ip->v4.hdr_checksum     = htons(0x0000);
-               ip->v4.src_addr         = src_in->sin_addr.s_addr;
-               ip->v4.dest_addr        = dest_in->sin_addr.s_addr;
+               if (src_in == NULL || dest_in == NULL) {
+                       SAFE_FREE(base);
+                       return NULL;
+               }
+
+               i.ip->v4.ver_hdrlen     = 0x45; /* version 4 and 5 * 32 bit 
words */
+               i.ip->v4.tos            = 0x00;
+               i.ip->v4.packet_length  = htons(wire_len - icmp_truncate_len);
+               i.ip->v4.identification = htons(0xFFFF);
+               i.ip->v4.flags          = 0x40; /* BIT 1 set - means don't 
fragment */
+               i.ip->v4.fragment       = htons(0x0000);
+               i.ip->v4.ttl            = 0xFF;
+               i.ip->v4.protocol       = protocol;
+               i.ip->v4.hdr_checksum   = htons(0x0000);
+               i.ip->v4.src_addr       = src_in->sin_addr.s_addr;
+               i.ip->v4.dest_addr      = dest_in->sin_addr.s_addr;
                buf += SWRAP_PACKET_IP_V4_SIZE;
                break;
 #ifdef HAVE_IPV6
        case AF_INET6:
-               ip->v6.ver_prio         = 0x60; /* version 4 and 5 * 32 bit 
words */
-               ip->v6.flow_label_high  = 0x00;
-               ip->v6.flow_label_low   = 0x0000;
-               ip->v6.payload_length   = htons(wire_len - icmp_truncate_len); 
/* TODO */
-               ip->v6.next_header      = protocol;
-               memcpy(ip->v6.src_addr, src_in6->sin6_addr.s6_addr, 16);
-               memcpy(ip->v6.dest_addr, dest_in6->sin6_addr.s6_addr, 16);
+               if (src_in6 == NULL || dest_in6 == NULL) {
+                       SAFE_FREE(base);
+                       return NULL;
+               }
+
+               i.ip->v6.ver_prio               = 0x60; /* version 4 and 5 * 32 
bit words */
+               i.ip->v6.flow_label_high        = 0x00;
+               i.ip->v6.flow_label_low = 0x0000;
+               i.ip->v6.payload_length = htons(wire_len - icmp_truncate_len); 
/* TODO */
+               i.ip->v6.next_header    = protocol;
+               memcpy(i.ip->v6.src_addr, src_in6->sin6_addr.s6_addr, 16);
+               memcpy(i.ip->v6.dest_addr, dest_in6->sin6_addr.s6_addr, 16);
                buf += SWRAP_PACKET_IP_V6_SIZE;
                break;
 #endif
@@ -2601,21 +2617,23 @@ static uint8_t *swrap_pcap_packet_init(struct timeval 
*tval,
                        pay->icmp4.code         = 0x01; /* host unreachable */
                        pay->icmp4.checksum     = htons(0x0000);
                        pay->icmp4.unused       = htonl(0x00000000);
+
                        buf += SWRAP_PACKET_PAYLOAD_ICMP4_SIZE;
 
                        /* set the ip header in the ICMP payload */
-                       ip = (union swrap_packet_ip *)(void *)buf;
-                       ip->v4.ver_hdrlen       = 0x45; /* version 4 and 5 * 32 
bit words */
-                       ip->v4.tos              = 0x00;
-                       ip->v4.packet_length    = htons(wire_len - 
icmp_hdr_len);
-                       ip->v4.identification   = htons(0xFFFF);
-                       ip->v4.flags            = 0x40; /* BIT 1 set - means 
don't fragment */
-                       ip->v4.fragment         = htons(0x0000);
-                       ip->v4.ttl              = 0xFF;
-                       ip->v4.protocol         = icmp_protocol;
-                       ip->v4.hdr_checksum     = htons(0x0000);
-                       ip->v4.src_addr         = dest_in->sin_addr.s_addr;
-                       ip->v4.dest_addr        = src_in->sin_addr.s_addr;
+                       i.ptr = buf;
+                       i.ip->v4.ver_hdrlen     = 0x45; /* version 4 and 5 * 32 
bit words */
+                       i.ip->v4.tos            = 0x00;
+                       i.ip->v4.packet_length  = htons(wire_len - 
icmp_hdr_len);
+                       i.ip->v4.identification = htons(0xFFFF);
+                       i.ip->v4.flags          = 0x40; /* BIT 1 set - means 
don't fragment */
+                       i.ip->v4.fragment       = htons(0x0000);
+                       i.ip->v4.ttl            = 0xFF;
+                       i.ip->v4.protocol       = icmp_protocol;
+                       i.ip->v4.hdr_checksum   = htons(0x0000);
+                       i.ip->v4.src_addr       = dest_in->sin_addr.s_addr;
+                       i.ip->v4.dest_addr      = src_in->sin_addr.s_addr;
+
                        buf += SWRAP_PACKET_IP_V4_SIZE;
 
                        src_port = dest_in->sin_port;
@@ -2630,14 +2648,15 @@ static uint8_t *swrap_pcap_packet_init(struct timeval 
*tval,
                        buf += SWRAP_PACKET_PAYLOAD_ICMP6_SIZE;
 
                        /* set the ip header in the ICMP payload */
-                       ip = (union swrap_packet_ip *)(void *)buf;
-                       ip->v6.ver_prio         = 0x60; /* version 4 and 5 * 32 
bit words */
-                       ip->v6.flow_label_high  = 0x00;
-                       ip->v6.flow_label_low   = 0x0000;
-                       ip->v6.payload_length   = htons(wire_len - 
icmp_truncate_len); /* TODO */
-                       ip->v6.next_header      = protocol;
-                       memcpy(ip->v6.src_addr, dest_in6->sin6_addr.s6_addr, 
16);
-                       memcpy(ip->v6.dest_addr, src_in6->sin6_addr.s6_addr, 
16);
+                       i.ptr = buf;
+                       i.ip->v6.ver_prio               = 0x60; /* version 4 
and 5 * 32 bit words */
+                       i.ip->v6.flow_label_high        = 0x00;
+                       i.ip->v6.flow_label_low = 0x0000;
+                       i.ip->v6.payload_length = htons(wire_len - 
icmp_truncate_len); /* TODO */
+                       i.ip->v6.next_header    = protocol;
+                       memcpy(i.ip->v6.src_addr, dest_in6->sin6_addr.s6_addr, 
16);
+                       memcpy(i.ip->v6.dest_addr, src_in6->sin6_addr.s6_addr, 
16);
+
                        buf += SWRAP_PACKET_IP_V6_SIZE;
 
                        src_port = dest_in6->sin6_port;
diff --git a/tests/echo_srv.c b/tests/echo_srv.c
index fac4e8e..01e3325 100644
--- a/tests/echo_srv.c
+++ b/tests/echo_srv.c
@@ -886,7 +886,7 @@ int main(int argc, char **argv)
                                 "[-D] [--pid pidfile]\n"
                                 "-t makes the server listen on TCP\n"
                                 "-u makes the server listen on UDP\n"
-                                "-D tells the server to become a deamon and " \
+                                "-D tells the server to become a daemon and " \
                                 "write a PIDfile\n"
                                 "The default port is 7, the default PIDfile is 
" \
                                 "echo_srv.pid in the current directory\n",


-- 
Socket Wrapper Repository

Reply via email to