You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by jo...@apache.org on 2017/11/29 13:31:09 UTC
svn commit: r1816628 - in /apr/apr/trunk: include/apr_network_io.h
network_io/unix/sockaddr.c test/testsock.c
Author: jorton
Date: Wed Nov 29 13:31:09 2017
New Revision: 1816628
URL: http://svn.apache.org/viewvc?rev=1816628&view=rev
Log:
* network_io/unix/sockaddr.c (apr_sockaddr_zone_set): Fail
for an address which is not link-local.
* include/apr_network_io.h: Document the above.
* test/testsock.c (test_zone): Test for that.
Modified:
apr/apr/trunk/include/apr_network_io.h
apr/apr/trunk/network_io/unix/sockaddr.c
apr/apr/trunk/test/testsock.c
Modified: apr/apr/trunk/include/apr_network_io.h
URL: http://svn.apache.org/viewvc/apr/apr/trunk/include/apr_network_io.h?rev=1816628&r1=1816627&r2=1816628&view=diff
==============================================================================
--- apr/apr/trunk/include/apr_network_io.h (original)
+++ apr/apr/trunk/include/apr_network_io.h Wed Nov 29 13:31:09 2017
@@ -444,6 +444,8 @@ APR_DECLARE(apr_status_t) apr_sockaddr_i
/* Set the zone of an IPv6 link-local address object.
* @param sa Socket address object
* @param zone_id Zone ID (textual "eth0" or numeric "3").
+ * @return Returns APR_EBADIP for non-IPv6 socket or an IPv6 address
+ * which isn't link-local.
*/
APR_DECLARE(apr_status_t) apr_sockaddr_zone_set(apr_sockaddr_t *sa,
const char *zone_id);
Modified: apr/apr/trunk/network_io/unix/sockaddr.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/network_io/unix/sockaddr.c?rev=1816628&r1=1816627&r2=1816628&view=diff
==============================================================================
--- apr/apr/trunk/network_io/unix/sockaddr.c (original)
+++ apr/apr/trunk/network_io/unix/sockaddr.c Wed Nov 29 13:31:09 2017
@@ -1225,7 +1225,8 @@ APR_DECLARE(apr_status_t) apr_sockaddr_z
#else
unsigned int idx;
- if (sa->family != APR_INET6) {
+ if (sa->family != APR_INET6
+ || !IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)sa->ipaddr_ptr)) {
return APR_EBADIP;
}
Modified: apr/apr/trunk/test/testsock.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/test/testsock.c?rev=1816628&r1=1816627&r2=1816628&view=diff
==============================================================================
--- apr/apr/trunk/test/testsock.c (original)
+++ apr/apr/trunk/test/testsock.c Wed Nov 29 13:31:09 2017
@@ -660,7 +660,6 @@ static void test_zone(abts_case *tc, voi
const char *name = NULL;
apr_uint32_t id = 0;
- /* RFC 5737 address */
rv = apr_sockaddr_info_get(&sa, "127.0.0.1", APR_INET, 8080, 0, p);
APR_ASSERT_SUCCESS(tc, "Problem generating sockaddr", rv);
@@ -669,6 +668,12 @@ static void test_zone(abts_case *tc, voi
apr_sockaddr_zone_set(sa, "1"));
ABTS_INT_EQUAL(tc, APR_EBADIP,
apr_sockaddr_zone_get(sa, &name, &id, p));
+
+ rv = apr_sockaddr_info_get(&sa, "::1", APR_INET6, 8080, 0, p);
+ APR_ASSERT_SUCCESS(tc, "Problem generating sockaddr", rv);
+
+ /* Fail for an address which isn't link-local */
+ ABTS_INT_EQUAL(tc, APR_EBADIP, apr_sockaddr_zone_set(sa, "1"));
rv = apr_sockaddr_info_get(&sa, TEST_ZONE_ADDR, APR_INET6, 8080, 0, p);
APR_ASSERT_SUCCESS(tc, "Problem generating sockaddr", rv);