From 4a49cc1da607cc0a6ee7f08b4550c3ba736255dd Mon Sep 17 00:00:00 2001 From: Joe Orton Date: Tue, 16 Apr 2019 11:39:37 +0100 Subject: [PATCH] fix IPv6 fallback behaviour (#1130328) use Python3 in tests Resolves: rhbz#1130328 --- libserf-1.3.9-ipv6fail.patch | 73 ++++++++++++++++++++++++++++++++++++ libserf.spec | 7 +++- 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 libserf-1.3.9-ipv6fail.patch diff --git a/libserf-1.3.9-ipv6fail.patch b/libserf-1.3.9-ipv6fail.patch new file mode 100644 index 0000000..35587cb --- /dev/null +++ b/libserf-1.3.9-ipv6fail.patch @@ -0,0 +1,73 @@ + +https://bugzilla.redhat.com/show_bug.cgi?id=1130328 + +https://issues.apache.org/jira/browse/SERF-190 + +--- serf-1.3.9/outgoing.c.ipv6fail 2015-10-17 13:25:14.000000000 +0100 ++++ serf-1.3.9/outgoing.c 2019-04-16 11:31:53.586762388 +0100 +@@ -1264,17 +1264,6 @@ apr_status_t serf__process_connection(se + return APR_SUCCESS; + } + } +- if ((events & APR_POLLHUP) != 0) { +- /* The connection got reset by the server. On Windows this can happen +- when all data is read, so just cleanup the connection and open +- a new one. +- If we haven't had any successful responses on this connection, +- then error out as it is likely a server issue. */ +- if (conn->completed_responses) { +- return reset_connection(conn, 1); +- } +- return SERF_ERROR_ABORTED_CONNECTION; +- } + if ((events & APR_POLLERR) != 0) { + /* We might be talking to a buggy HTTP server that doesn't + * do lingering-close. (httpd < 2.1.8 does this.) +@@ -1292,11 +1281,15 @@ apr_status_t serf__process_connection(se + { + apr_os_sock_t osskt; + if (!apr_os_sock_get(&osskt, conn->skt)) { +- int error; ++ int error = 0, rv; + apr_socklen_t l = sizeof(error); + +- if (!getsockopt(osskt, SOL_SOCKET, SO_ERROR, (char*)&error, +- &l)) { ++ rv = getsockopt(osskt, SOL_SOCKET, SO_ERROR, (char*)&error, &l); ++ /* The error is placed in errno on Solaris for SO_ERROR */ ++ if (rv) ++ error = errno; ++ ++ if (error) { + status = APR_FROM_OS_ERROR(error); + + /* Handle fallback for multi-homed servers. +@@ -1310,8 +1303,8 @@ apr_status_t serf__process_connection(se + && conn->address->next != NULL + && (APR_STATUS_IS_ECONNREFUSED(status) + || APR_STATUS_IS_TIMEUP(status) +- || APR_STATUS_IS_ENETUNREACH(status))) { +- ++ || APR_STATUS_IS_ENETUNREACH(status) ++ || APR_STATUS_IS_EHOSTUNREACH(status))) { + conn->address = conn->address->next; + return reset_connection(conn, 1); + } +@@ -1323,6 +1316,17 @@ apr_status_t serf__process_connection(se + #endif + return APR_EGENERAL; + } ++ if ((events & APR_POLLHUP) != 0) { ++ /* The connection got reset by the server. On Windows this can happen ++ when all data is read, so just cleanup the connection and open ++ a new one. ++ If we haven't had any successful responses on this connection, ++ then error out as it is likely a server issue. */ ++ if (conn->completed_responses) { ++ return reset_connection(conn, 1); ++ } ++ return SERF_ERROR_ABORTED_CONNECTION; ++ } + if ((events & APR_POLLOUT) != 0) { + if ((status = write_to_connection(conn)) != APR_SUCCESS) + return status; diff --git a/libserf.spec b/libserf.spec index 49ed7f8..c6dca82 100644 --- a/libserf.spec +++ b/libserf.spec @@ -8,7 +8,7 @@ Name: libserf Version: 1.3.9 -Release: 11%{?dist} +Release: 12%{?dist} Summary: High-Performance Asynchronous HTTP Client Library License: ASL 2.0 URL: http://serf.apache.org/ @@ -18,6 +18,7 @@ BuildRequires: apr-devel, apr-util-devel, krb5-devel, openssl-devel BuildRequires: zlib-devel Patch0: %{name}-norpath.patch Patch1: %{name}-python3.patch +Patch2: %{name}-1.3.9-ipv6fail.patch %description The serf library is a C-based HTTP client library built upon the Apache @@ -74,6 +75,10 @@ export LD_LIBRARY_PATH=%{buildroot}%{_libdir} %{_libdir}/pkgconfig/serf*.pc %changelog +* Tue Apr 16 2019 Joe Orton - 1.3.9-12 +- fix IPv6 fallback behaviour (#1130328) +- use Python3 in tests + * Fri Feb 01 2019 Fedora Release Engineering - 1.3.9-11 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild