Hello community,

here is the log from the commit of package socket_wrapper for openSUSE:Factory 
checked in at 2016-06-09 16:12:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/socket_wrapper (Old)
 and      /work/SRC/openSUSE:Factory/.socket_wrapper.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "socket_wrapper"

Changes:
--------
--- /work/SRC/openSUSE:Factory/socket_wrapper/socket_wrapper.changes    
2016-03-29 14:50:40.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.socket_wrapper.new/socket_wrapper.changes       
2016-06-09 16:16:36.000000000 +0200
@@ -1,0 +2,9 @@
+Tue May 31 06:57:22 UTC 2016 - [email protected]
+
+- Update to version 1.1.7
+  * Added support for accept4()
+  * Added support for OpenBSD
+  * Fixed sendto() with UDP and a connected socket
+  * Fixed AF_RAWLINK sockets
+
+-------------------------------------------------------------------

Old:
----
  socket_wrapper-1.1.6.tar.gz

New:
----
  socket_wrapper-1.1.7.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ socket_wrapper.spec ++++++
--- /var/tmp/diff_new_pack.DTpVOl/_old  2016-06-09 16:16:38.000000000 +0200
+++ /var/tmp/diff_new_pack.DTpVOl/_new  2016-06-09 16:16:38.000000000 +0200
@@ -24,7 +24,7 @@
 ############################# NOTE ##################################
 
 Name:           socket_wrapper
-Version:        1.1.6
+Version:        1.1.7
 Release:        0
 Summary:        A library passing all socket communications trough Unix sockets
 License:        BSD-3-Clause

++++++ socket_wrapper-1.1.6.tar.gz -> socket_wrapper-1.1.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/socket_wrapper-1.1.6/CMakeLists.txt 
new/socket_wrapper-1.1.7/CMakeLists.txt
--- old/socket_wrapper-1.1.6/CMakeLists.txt     2016-03-15 13:54:36.000000000 
+0100
+++ new/socket_wrapper-1.1.7/CMakeLists.txt     2016-05-17 12:30:49.000000000 
+0200
@@ -8,7 +8,7 @@
 
 set(APPLICATION_VERSION_MAJOR "1")
 set(APPLICATION_VERSION_MINOR "1")
-set(APPLICATION_VERSION_PATCH "6")
+set(APPLICATION_VERSION_PATCH "7")
 
 set(APPLICATION_VERSION 
"${APPLICATION_VERSION_MAJOR}.${APPLICATION_VERSION_MINOR}.${APPLICATION_VERSION_PATCH}")
 
@@ -19,7 +19,7 @@
 #     Increment AGE. Set REVISION to 0
 #   If the source code was changed, but there were no interface changes:
 #     Increment REVISION.
-set(LIBRARY_VERSION "0.1.6")
+set(LIBRARY_VERSION "0.1.7")
 set(LIBRARY_SOVERSION "0")
 
 # where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is 
checked
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/socket_wrapper-1.1.6/ChangeLog 
new/socket_wrapper-1.1.7/ChangeLog
--- old/socket_wrapper-1.1.6/ChangeLog  2016-03-15 13:54:36.000000000 +0100
+++ new/socket_wrapper-1.1.7/ChangeLog  2016-05-20 08:57:55.000000000 +0200
@@ -1,6 +1,12 @@
 ChangeLog
 ==========
 
+version 1.1.7 (released 2016-05-20)
+  * Added support for accept4()
+  * Added support for OpenBSD
+  * Fixed sendto() with UDP and a connected socket
+  * Fixed AF_RAWLINK sockets
+
 version 1.1.6 (released 2016-03-15)
   * Added a wrapper for write()
   * Added support for automatic binding of ephemeral ports
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/socket_wrapper-1.1.6/ConfigureChecks.cmake 
new/socket_wrapper-1.1.7/ConfigureChecks.cmake
--- old/socket_wrapper-1.1.6/ConfigureChecks.cmake      2015-03-23 
10:10:06.000000000 +0100
+++ new/socket_wrapper-1.1.7/ConfigureChecks.cmake      2016-05-17 
11:05:23.000000000 +0200
@@ -62,6 +62,9 @@
 check_function_exists(eventfd HAVE_EVENTFD)
 check_function_exists(timerfd_create HAVE_TIMERFD_CREATE)
 check_function_exists(bindresvport HAVE_BINDRESVPORT)
+check_function_exists(accept4 HAVE_ACCEPT4)
+
+check_function_exists(pledge HAVE_PLEDGE)
 
 
 if (UNIX)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/socket_wrapper-1.1.6/config.h.cmake 
new/socket_wrapper-1.1.7/config.h.cmake
--- old/socket_wrapper-1.1.6/config.h.cmake     2015-03-23 10:10:06.000000000 
+0100
+++ new/socket_wrapper-1.1.7/config.h.cmake     2016-05-17 11:05:23.000000000 
+0200
@@ -39,6 +39,8 @@
 #cmakedefine HAVE_EVENTFD 1
 #cmakedefine HAVE_TIMERFD_CREATE 1
 #cmakedefine HAVE_BINDRESVPORT 1
+#cmakedefine HAVE_ACCEPT4 1
+#cmakedefine HAVE_PLEDGE 1
 
 #cmakedefine HAVE_ACCEPT_PSOCKLEN_T 1
 #cmakedefine HAVE_IOCTL_INT 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/socket_wrapper-1.1.6/src/socket_wrapper.c 
new/socket_wrapper-1.1.7/src/socket_wrapper.c
--- old/socket_wrapper-1.1.6/src/socket_wrapper.c       2016-03-02 
09:29:48.000000000 +0100
+++ new/socket_wrapper-1.1.7/src/socket_wrapper.c       2016-05-17 
11:44:04.000000000 +0200
@@ -335,9 +335,16 @@
 #include <dlfcn.h>
 
 struct swrap_libc_fns {
+#ifdef HAVE_ACCEPT4
+       int (*libc_accept4)(int sockfd,
+                          struct sockaddr *addr,
+                          socklen_t *addrlen,
+                          int flags);
+#else
        int (*libc_accept)(int sockfd,
                           struct sockaddr *addr,
                           socklen_t *addrlen);
+#endif
        int (*libc_bind)(int sockfd,
                         const struct sockaddr *addr,
                         socklen_t addrlen);
@@ -552,12 +559,26 @@
  * has probably something todo with with the linker.
  * So we need load each function at the point it is called the first time.
  */
+#ifdef HAVE_ACCEPT4
+static int libc_accept4(int sockfd,
+                       struct sockaddr *addr,
+                       socklen_t *addrlen,
+                       int flags)
+{
+       swrap_load_lib_function(SWRAP_LIBSOCKET, accept4);
+
+       return swrap.fns.libc_accept4(sockfd, addr, addrlen, flags);
+}
+
+#else /* HAVE_ACCEPT4 */
+
 static int libc_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
 {
        swrap_load_lib_function(SWRAP_LIBSOCKET, accept);
 
        return swrap.fns.libc_accept(sockfd, addr, addrlen);
 }
+#endif /* HAVE_ACCEPT4 */
 
 static int libc_bind(int sockfd,
                     const struct sockaddr *addr,
@@ -2386,6 +2407,9 @@
 #ifdef AF_NETLINK
        case AF_NETLINK:
 #endif /* AF_NETLINK */
+#ifdef AF_PACKET
+       case AF_PACKET:
+#endif /* AF_PACKET */
        case AF_UNIX:
                return libc_socket(family, type, protocol);
        default:
@@ -2575,7 +2599,10 @@
  *   ACCEPT
  ***************************************************************************/
 
-static int swrap_accept(int s, struct sockaddr *addr, socklen_t *addrlen)
+static int swrap_accept(int s,
+                       struct sockaddr *addr,
+                       socklen_t *addrlen,
+                       int flags)
 {
        struct socket_info *parent_si, *child_si;
        struct socket_info_fd *child_fi;
@@ -2596,7 +2623,11 @@
 
        parent_si = find_socket_info(s);
        if (!parent_si) {
+#ifdef HAVE_ACCEPT4
+               return libc_accept4(s, addr, addrlen, flags);
+#else
                return libc_accept(s, addr, addrlen);
+#endif
        }
 
        /*
@@ -2609,7 +2640,11 @@
                return -1;
        }
 
+#ifdef HAVE_ACCEPT4
+       ret = libc_accept4(s, &un_addr.sa.s, &un_addr.sa_socklen, flags);
+#else
        ret = libc_accept(s, &un_addr.sa.s, &un_addr.sa_socklen);
+#endif
        if (ret == -1) {
                if (errno == ENOTSOCK) {
                        /* Remove stale fds */
@@ -2713,13 +2748,20 @@
        return fd;
 }
 
+#ifdef HAVE_ACCEPT4
+int accept4(int s, struct sockaddr *addr, socklen_t *addrlen, int flags)
+{
+       return swrap_accept(s, addr, (socklen_t *)addrlen, flags);
+}
+#endif
+
 #ifdef HAVE_ACCEPT_PSOCKLEN_T
 int accept(int s, struct sockaddr *addr, Psocklen_t addrlen)
 #else
 int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
 #endif
 {
-       return swrap_accept(s, addr, (socklen_t *)addrlen);
+       return swrap_accept(s, addr, (socklen_t *)addrlen, 0);
 }
 
 static int autobind_start_init;
@@ -3880,9 +3922,15 @@
        }
        case SOCK_DGRAM:
                if (si->connected) {
-                       if (msg->msg_name) {
-                               errno = EISCONN;
-                               return -1;
+                       if (msg->msg_name != NULL) {
+                               /*
+                                * We are dealing with unix sockets and if we
+                                * are connected, we should only talk to the
+                                * connected unix path. Using the fd to send
+                                * to another server would be hard to achieve.
+                                */
+                               msg->msg_name = NULL;
+                               msg->msg_namelen = 0;
                        }
                } else {
                        const struct sockaddr *msg_name;
@@ -4429,12 +4477,25 @@
                return len;
        }
 
-       ret = libc_sendto(s,
-                         buf,
-                         len,
-                         flags,
-                         (struct sockaddr *)msg.msg_name,
-                         msg.msg_namelen);
+       /*
+        * If it is a dgram socket and we are connected, don't include the
+        * 'to' address.
+        */
+       if (si->type == SOCK_DGRAM && si->connected) {
+               ret = libc_sendto(s,
+                                 buf,
+                                 len,
+                                 flags,
+                                 NULL,
+                                 0);
+       } else {
+               ret = libc_sendto(s,
+                                 buf,
+                                 len,
+                                 flags,
+                                 (struct sockaddr *)msg.msg_name,
+                                 msg.msg_namelen);
+       }
 
        swrap_sendmsg_after(s, si, &msg, to, ret);
 
@@ -5248,6 +5309,16 @@
 }
 #endif
 
+#ifdef HAVE_PLEDGE
+int pledge(const char *promises, const char *paths[])
+{
+       (void)promises; /* unused */
+       (void)paths; /* unused */
+
+       return 0;
+}
+#endif /* HAVE_PLEDGE */
+
 /****************************
  * DESTRUCTOR
  ***************************/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/socket_wrapper-1.1.6/tests/test_echo_udp_sendto_recvfrom.c 
new/socket_wrapper-1.1.7/tests/test_echo_udp_sendto_recvfrom.c
--- old/socket_wrapper-1.1.6/tests/test_echo_udp_sendto_recvfrom.c      
2015-10-14 11:38:17.000000000 +0200
+++ new/socket_wrapper-1.1.7/tests/test_echo_udp_sendto_recvfrom.c      
2016-05-17 11:44:16.000000000 +0200
@@ -192,6 +192,104 @@
 }
 #endif
 
+static void test_connect_sendto_ipv4(void **state)
+{
+       struct torture_address addr = {
+               .sa_socklen = sizeof(struct sockaddr_in),
+       };
+       char send_buf[] = "packet.0";
+       char recv_buf[64] = {0};
+       ssize_t ret;
+       int rc;
+       int s;
+
+       (void) state; /* unused */
+
+       addr.sa.in.sin_family = AF_INET;
+       addr.sa.in.sin_port = htons(torture_server_port());
+
+       rc = inet_pton(AF_INET,
+                      torture_server_address(AF_INET),
+                      &addr.sa.in.sin_addr);
+       assert_int_equal(rc, 1);
+
+       s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+       assert_int_not_equal(s, -1);
+
+       /* Now, connect */
+       rc = connect(s, &addr.sa.s, addr.sa_socklen);
+       assert_return_code(rc, errno);
+
+       ret = sendto(s,
+                    send_buf,
+                    sizeof(send_buf),
+                    0,
+                    &addr.sa.s,
+                    addr.sa_socklen);
+       assert_return_code(ret, errno);
+
+       ret = recvfrom(s,
+                      recv_buf,
+                      sizeof(recv_buf),
+                      0,
+                      NULL,
+                      0);
+       assert_return_code(ret, errno);
+
+       assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+
+       close(s);
+}
+
+static void test_connect_sendto_null_ipv4(void **state)
+{
+       struct torture_address addr = {
+               .sa_socklen = sizeof(struct sockaddr_in),
+       };
+       char send_buf[] = "packet.0";
+       char recv_buf[64] = {0};
+       ssize_t ret;
+       int rc;
+       int s;
+
+       (void) state; /* unused */
+
+       addr.sa.in.sin_family = AF_INET;
+       addr.sa.in.sin_port = htons(torture_server_port());
+
+       rc = inet_pton(AF_INET,
+                      torture_server_address(AF_INET),
+                      &addr.sa.in.sin_addr);
+       assert_int_equal(rc, 1);
+
+       s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+       assert_int_not_equal(s, -1);
+
+       /* Now, connect */
+       rc = connect(s, &addr.sa.s, addr.sa_socklen);
+       assert_return_code(rc, errno);
+
+       ret = sendto(s,
+                    send_buf,
+                    sizeof(send_buf),
+                    0,
+                    NULL,
+                    0);
+       assert_return_code(ret, errno);
+
+       ret = recvfrom(s,
+                      recv_buf,
+                      sizeof(recv_buf),
+                      0,
+                      NULL,
+                      0);
+       assert_return_code(ret, errno);
+
+       assert_memory_equal(send_buf, recv_buf, sizeof(send_buf));
+
+       close(s);
+}
+
 int main(void) {
        int rc;
 
@@ -204,6 +302,12 @@
                                                setup_echo_srv_udp_ipv6,
                                                teardown),
 #endif
+               cmocka_unit_test_setup_teardown(test_connect_sendto_ipv4,
+                                               setup_echo_srv_udp_ipv4,
+                                               teardown),
+               cmocka_unit_test_setup_teardown(test_connect_sendto_null_ipv4,
+                                               setup_echo_srv_udp_ipv4,
+                                               teardown),
        };
 
        rc = cmocka_run_group_tests(sendto_tests, NULL, NULL);


Reply via email to