From ad5e293e036f57ad9ac6a2de0c644c3f898f9dd787baf1fc4fd5c47816bbd42a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ismail=20D=C3=B6nmez?= Date: Sat, 18 Jun 2016 15:57:58 +0000 Subject: [PATCH] Accepting request 402954 from home:adamm:branches:devel:libraries:c_c++ - New upstream version 4.1.5 * Fixed #1806 - uninitialised read in curve getsockopt. * Fixed #1807 - build broken with GCC 6. * Fixed #1831 - potential assertion failure with latest libsodium. * Fixed #1850 - detection issues with tweetnacl/libsodium. * Fixed #1877 - Avoid terminating connections prematurely * fixes some IPv6 related issues - Removed 3ad076.patch, upstreamed OBS-URL: https://build.opensuse.org/request/show/402954 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/zeromq?expand=0&rev=45 --- 3ad076.patch | 410 -------------------------------------------- zeromq-4.1.4.tar.gz | 3 - zeromq-4.1.5.tar.gz | 3 + zeromq.changes | 12 ++ zeromq.spec | 4 +- 5 files changed, 16 insertions(+), 416 deletions(-) delete mode 100644 3ad076.patch delete mode 100644 zeromq-4.1.4.tar.gz create mode 100644 zeromq-4.1.5.tar.gz diff --git a/3ad076.patch b/3ad076.patch deleted file mode 100644 index 6876be4..0000000 --- a/3ad076.patch +++ /dev/null @@ -1,410 +0,0 @@ -From 1586f3f25ebb4b479e4334eccb551634425bcb0f Mon Sep 17 00:00:00 2001 -From: Luca Boccassi -Date: Mon, 18 Apr 2016 17:12:01 +0100 -Subject: [PATCH 1/3] Problem: can't test if IPv6 is available in tests - -Solution: add helper function is_ipv6_available to testutil.hpp to -test if IPv6 is available on the building platform. -This function will try to open and bind a socket to ::1:*, as it's -the ultimate way of knowing if, at least on the loopback, IPv6 is -enabled. ---- - tests/testutil.hpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 52 insertions(+) - -Index: zeromq-4.1.4/tests/testutil.hpp -=================================================================== ---- zeromq-4.1.4.orig/tests/testutil.hpp -+++ zeromq-4.1.4/tests/testutil.hpp -@@ -47,6 +47,7 @@ - #include - - #if defined _WIN32 -+# include "windows.hpp" - # if defined _MSC_VER - # include - # pragma warning(disable:4996) -@@ -56,6 +57,9 @@ - # include - # include - # include -+# include -+# include -+# include - #endif - - // Bounce a message from client to server and back -@@ -299,5 +303,53 @@ void msleep (int milliseconds) - #endif - } - -+// check if IPv6 is available (0/false if not, 1/true if it is) -+// only way to reliably check is to actually open a socket and try to bind it -+int -+is_ipv6_available(void) -+{ -+ int rc, ipv6 = 1; -+ struct sockaddr_in6 test_addr; -+ -+ memset (&test_addr, 0, sizeof (test_addr)); -+ test_addr.sin6_family = AF_INET6; -+ inet_pton (AF_INET6, "::1", &(test_addr.sin6_addr)); -+ -+#ifdef ZMQ_HAVE_WINDOWS -+ SOCKET fd = socket (AF_INET6, SOCK_STREAM, IPPROTO_IP); -+ if (fd == INVALID_SOCKET) -+ ipv6 = 0; -+ else { -+ setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&ipv6, sizeof(int)); -+ rc = setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (const char *)&ipv6, sizeof(int)); -+ if (rc == SOCKET_ERROR) -+ ipv6 = 0; -+ else { -+ rc = bind (fd, (struct sockaddr *)&test_addr, sizeof (test_addr)); -+ if (rc == SOCKET_ERROR) -+ ipv6 = 0; -+ } -+ closesocket (fd); -+ } -+#else -+ int fd = socket (AF_INET6, SOCK_STREAM, IPPROTO_IP); -+ if (fd == -1) -+ ipv6 = 0; -+ else { -+ setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &ipv6, sizeof(int)); -+ rc = setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &ipv6, sizeof(int)); -+ if (rc != 0) -+ ipv6 = 0; -+ else { -+ rc = bind (fd, (struct sockaddr *)&test_addr, sizeof (test_addr)); -+ if (rc != 0) -+ ipv6 = 0; -+ } -+ close (fd); -+ } -+#endif -+ -+ return ipv6; -+} - - #endif -From 0af39a443f39c1a0bb5d7d60ca8667b4e33599f4 Mon Sep 17 00:00:00 2001 -From: Luca Boccassi -Date: Mon, 18 Apr 2016 00:02:36 +0100 -Subject: [PATCH 2/3] Problem: can't unbind with bound addr with IPv6 - -Solution: try to resolve the TCP endpoint passed by the user in the -zmq_unbind call before giving up, if it doesn't match. -This fixes a breakage in the API, where after a call to -zmq_bind(s, "tcp://127.0.0.1:9999") with IPv6 enabled on s would -result in the call to zmq_unbind(s, "tcp://127.0.0.1:9999") failing. -Add more test cases to increase coverage on all combinations of TCP -endpoints. ---- - src/socket_base.cpp | 32 +++++- - tests/test_unbind_wildcard.cpp | 228 +++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 259 insertions(+), 1 deletion(-) - -diff --git a/src/socket_base.cpp b/src/socket_base.cpp -index ec01836..9d34d7e 100644 -Index: zeromq-4.1.4/src/socket_base.cpp -=================================================================== ---- zeromq-4.1.4.orig/src/socket_base.cpp -+++ zeromq-4.1.4/src/socket_base.cpp -@@ -765,8 +765,38 @@ int zmq::socket_base_t::term_endpoint (c - return 0; - } - -+ std::string resolved_addr = std::string (addr_); -+ std::pair range; -+ -+ // The resolved last_endpoint is used as a key in the endpoints map. -+ // The address passed by the user might not match in the TCP case due to -+ // IPv4-in-IPv6 mapping (EG: tcp://[::ffff:127.0.0.1]:9999), so try to -+ // resolve before giving up. Given at this stage we don't know whether a -+ // socket is connected or bound, try with both. -+ if (protocol == "tcp") { -+ range = endpoints.equal_range (resolved_addr); -+ if (range.first == range.second) { -+ tcp_address_t *tcp_addr = new (std::nothrow) tcp_address_t (); -+ alloc_assert (tcp_addr); -+ rc = tcp_addr->resolve (address.c_str (), false, options.ipv6); -+ -+ if (rc == 0) { -+ tcp_addr->to_string (resolved_addr); -+ range = endpoints.equal_range (resolved_addr); -+ -+ if (range.first == range.second) { -+ rc = tcp_addr->resolve (address.c_str (), true, options.ipv6); -+ if (rc == 0) { -+ tcp_addr->to_string (resolved_addr); -+ } -+ } -+ } -+ delete tcp_addr; -+ } -+ } -+ - // Find the endpoints range (if any) corresponding to the addr_ string. -- std::pair range = endpoints.equal_range (std::string (addr_)); -+ range = endpoints.equal_range (resolved_addr); - if (range.first == range.second) { - errno = ENOENT; - return -1; -Index: zeromq-4.1.4/tests/test_unbind_wildcard.cpp -=================================================================== ---- zeromq-4.1.4.orig/tests/test_unbind_wildcard.cpp -+++ zeromq-4.1.4/tests/test_unbind_wildcard.cpp -@@ -22,11 +22,16 @@ - int main (void) - { - setup_test_environment(); -+ int ipv6 = is_ipv6_available (); - void *ctx = zmq_ctx_new (); - assert (ctx); - -+ /* Address wildcard, IPv6 disabled */ - void *sb = zmq_socket (ctx, ZMQ_REP); - assert (sb); -+ void *sc = zmq_socket (ctx, ZMQ_REQ); -+ assert (sc); -+ - int rc = zmq_bind (sb, "tcp://*:5555"); - assert (rc == 0); - -@@ -35,12 +40,235 @@ int main (void) - rc = zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, endpoint, &endpoint_len); - assert (rc == 0); - -+ rc = zmq_connect (sc, endpoint); -+ assert (rc == 0); -+ -+ bounce (sb, sc); -+ -+ rc = zmq_disconnect (sc, endpoint); -+ assert (rc == 0); -+ rc = zmq_unbind (sb, endpoint); -+ assert (rc == 0); -+ -+ rc = zmq_close (sc); -+ assert (rc == 0); -+ rc = zmq_close (sb); -+ assert (rc == 0); -+ -+ /* Address wildcard, IPv6 enabled */ -+ sb = zmq_socket (ctx, ZMQ_REP); -+ assert (sb); -+ sc = zmq_socket (ctx, ZMQ_REQ); -+ assert (sc); -+ -+ rc = zmq_setsockopt (sb, ZMQ_IPV6, &ipv6, sizeof (int)); -+ assert (rc == 0); -+ rc = zmq_setsockopt (sc, ZMQ_IPV6, &ipv6, sizeof (int)); -+ assert (rc == 0); -+ -+ rc = zmq_bind (sb, "tcp://*:5556"); -+ assert (rc == 0); -+ -+ endpoint_len = sizeof (endpoint); -+ memset(endpoint, 0, endpoint_len); -+ rc = zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, endpoint, &endpoint_len); -+ assert (rc == 0); -+ -+ rc = zmq_connect (sc, endpoint); -+ assert (rc == 0); -+ -+ bounce (sb, sc); -+ -+ rc = zmq_disconnect (sc, endpoint); -+ assert (rc == 0); - rc = zmq_unbind (sb, endpoint); - assert (rc == 0); - -+ rc = zmq_close (sc); -+ assert (rc == 0); - rc = zmq_close (sb); - assert (rc == 0); - -+ /* Port wildcard, IPv4 address, IPv6 disabled */ -+ sb = zmq_socket (ctx, ZMQ_REP); -+ assert (sb); -+ sc = zmq_socket (ctx, ZMQ_REQ); -+ assert (sc); -+ -+ rc = zmq_bind (sb, "tcp://127.0.0.1:*"); -+ assert (rc == 0); -+ -+ endpoint_len = sizeof (endpoint); -+ memset(endpoint, 0, endpoint_len); -+ rc = zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, endpoint, &endpoint_len); -+ assert (rc == 0); -+ -+ rc = zmq_connect (sc, endpoint); -+ assert (rc == 0); -+ -+ bounce (sb, sc); -+ -+ rc = zmq_disconnect (sc, endpoint); -+ assert (rc == 0); -+ rc = zmq_unbind (sb, endpoint); -+ assert (rc == 0); -+ -+ rc = zmq_close (sc); -+ assert (rc == 0); -+ rc = zmq_close (sb); -+ assert (rc == 0); -+ -+ /* Port wildcard, IPv4 address, IPv6 enabled */ -+ sb = zmq_socket (ctx, ZMQ_REP); -+ assert (sb); -+ sc = zmq_socket (ctx, ZMQ_REQ); -+ assert (sc); -+ -+ rc = zmq_setsockopt (sb, ZMQ_IPV6, &ipv6, sizeof (int)); -+ assert (rc == 0); -+ rc = zmq_setsockopt (sc, ZMQ_IPV6, &ipv6, sizeof (int)); -+ assert (rc == 0); -+ -+ rc = zmq_bind (sb, "tcp://127.0.0.1:*"); -+ assert (rc == 0); -+ -+ endpoint_len = sizeof (endpoint); -+ memset(endpoint, 0, endpoint_len); -+ rc = zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, endpoint, &endpoint_len); -+ assert (rc == 0); -+ -+ rc = zmq_connect (sc, endpoint); -+ assert (rc == 0); -+ -+ bounce (sb, sc); -+ -+ rc = zmq_disconnect (sc, endpoint); -+ assert (rc == 0); -+ rc = zmq_unbind (sb, endpoint); -+ assert (rc == 0); -+ -+ rc = zmq_close (sc); -+ assert (rc == 0); -+ rc = zmq_close (sb); -+ assert (rc == 0); -+ -+ if (ipv6) { -+ /* Port wildcard, IPv6 address, IPv6 enabled */ -+ sb = zmq_socket (ctx, ZMQ_REP); -+ assert (sb); -+ sc = zmq_socket (ctx, ZMQ_REQ); -+ assert (sc); -+ -+ rc = zmq_setsockopt (sb, ZMQ_IPV6, &ipv6, sizeof (int)); -+ assert (rc == 0); -+ rc = zmq_setsockopt (sc, ZMQ_IPV6, &ipv6, sizeof (int)); -+ assert (rc == 0); -+ -+ rc = zmq_bind (sb, "tcp://[::1]:*"); -+ assert (rc == 0); -+ -+ endpoint_len = sizeof (endpoint); -+ memset(endpoint, 0, endpoint_len); -+ rc = zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, endpoint, &endpoint_len); -+ assert (rc == 0); -+ -+ rc = zmq_connect (sc, endpoint); -+ assert (rc == 0); -+ -+ bounce (sb, sc); -+ -+ rc = zmq_disconnect (sc, endpoint); -+ assert (rc == 0); -+ rc = zmq_unbind (sb, endpoint); -+ assert (rc == 0); -+ -+ rc = zmq_close (sc); -+ assert (rc == 0); -+ rc = zmq_close (sb); -+ assert (rc == 0); -+ } -+ -+ /* No wildcard, IPv4 address, IPv6 disabled */ -+ sb = zmq_socket (ctx, ZMQ_REP); -+ assert (sb); -+ sc = zmq_socket (ctx, ZMQ_REQ); -+ assert (sc); -+ -+ rc = zmq_bind (sb, "tcp://127.0.0.1:5557"); -+ assert (rc == 0); -+ rc = zmq_connect (sc, "tcp://127.0.0.1:5557"); -+ assert (rc == 0); -+ -+ bounce (sb, sc); -+ -+ rc = zmq_disconnect (sc, "tcp://127.0.0.1:5557"); -+ assert (rc == 0); -+ rc = zmq_unbind (sb, "tcp://127.0.0.1:5557"); -+ assert (rc == 0); -+ -+ rc = zmq_close (sc); -+ assert (rc == 0); -+ rc = zmq_close (sb); -+ assert (rc == 0); -+ -+ /* No wildcard, IPv4 address, IPv6 enabled */ -+ sb = zmq_socket (ctx, ZMQ_REP); -+ assert (sb); -+ sc = zmq_socket (ctx, ZMQ_REQ); -+ assert (sc); -+ -+ rc = zmq_setsockopt (sb, ZMQ_IPV6, &ipv6, sizeof (int)); -+ assert (rc == 0); -+ rc = zmq_setsockopt (sc, ZMQ_IPV6, &ipv6, sizeof (int)); -+ assert (rc == 0); -+ -+ rc = zmq_bind (sb, "tcp://127.0.0.1:5558"); -+ assert (rc == 0); -+ rc = zmq_connect (sc, "tcp://127.0.0.1:5558"); -+ assert (rc == 0); -+ -+ bounce (sb, sc); -+ -+ rc = zmq_disconnect (sc, "tcp://127.0.0.1:5558"); -+ assert (rc == 0); -+ rc = zmq_unbind (sb, "tcp://127.0.0.1:5558"); -+ assert (rc == 0); -+ -+ rc = zmq_close (sc); -+ assert (rc == 0); -+ rc = zmq_close (sb); -+ assert (rc == 0); -+ -+ if (ipv6) { -+ /* No wildcard, IPv6 address, IPv6 enabled */ -+ sb = zmq_socket (ctx, ZMQ_REP); -+ assert (sb); -+ sc = zmq_socket (ctx, ZMQ_REQ); -+ assert (sc); -+ -+ rc = zmq_setsockopt (sb, ZMQ_IPV6, &ipv6, sizeof (int)); -+ assert (rc == 0); -+ rc = zmq_setsockopt (sc, ZMQ_IPV6, &ipv6, sizeof (int)); -+ assert (rc == 0); -+ -+ rc = zmq_bind (sb, "tcp://[::1]:5559"); -+ assert (rc == 0); -+ rc = zmq_connect (sc, "tcp://[::1]:5559"); -+ assert (rc == 0); -+ -+ bounce (sb, sc); -+ -+ rc = zmq_disconnect (sc, "tcp://[::1]:5559"); -+ assert (rc == 0); -+ rc = zmq_unbind (sb, "tcp://[::1]:5559"); -+ assert (rc == 0); -+ -+ rc = zmq_close (sc); -+ assert (rc == 0); -+ rc = zmq_close (sb); -+ assert (rc == 0); -+ } -+ - rc = zmq_ctx_term (ctx); - assert (rc == 0); - diff --git a/zeromq-4.1.4.tar.gz b/zeromq-4.1.4.tar.gz deleted file mode 100644 index fe51280..0000000 --- a/zeromq-4.1.4.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e99f44fde25c2e4cb84ce440f87ca7d3fe3271c2b8cfbc67d55e4de25e6fe378 -size 1400012 diff --git a/zeromq-4.1.5.tar.gz b/zeromq-4.1.5.tar.gz new file mode 100644 index 0000000..1720335 --- /dev/null +++ b/zeromq-4.1.5.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04aac57f081ffa3a2ee5ed04887be9e205df3a7ddade0027460b8042432bdbcf +size 794853 diff --git a/zeromq.changes b/zeromq.changes index 11acbe0..c10a158 100644 --- a/zeromq.changes +++ b/zeromq.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Fri Jun 17 12:41:46 UTC 2016 - adam.majer@suse.de + +- New upstream version 4.1.5 + * Fixed #1806 - uninitialised read in curve getsockopt. + * Fixed #1807 - build broken with GCC 6. + * Fixed #1831 - potential assertion failure with latest libsodium. + * Fixed #1850 - detection issues with tweetnacl/libsodium. + * Fixed #1877 - Avoid terminating connections prematurely + * fixes some IPv6 related issues +- Removed 3ad076.patch, upstreamed + ------------------------------------------------------------------- Mon May 30 10:02:29 UTC 2016 - adam.majer@suse.de diff --git a/zeromq.spec b/zeromq.spec index a05ce64..c587e09 100644 --- a/zeromq.spec +++ b/zeromq.spec @@ -21,14 +21,13 @@ %define with_pgm 1 %endif Name: zeromq -Version: 4.1.4 +Version: 4.1.5 Release: 0 Summary: Lightweight messaging kernel License: LGPL-3.0+ Group: Productivity/Networking/Web/Servers Url: http://www.zeromq.org/ Source: http://download.zeromq.org/%{name}-%{version}.tar.gz -Patch: 3ad076.patch BuildRequires: asciidoc BuildRequires: gcc-c++ BuildRequires: pkgconfig @@ -110,7 +109,6 @@ This package holds the development files for ZeroMQ. %prep %setup -q -%patch -p1 %build %configure \