1 From b059c96dc69dfe3055c5b32b078a05c53b11ebb3 Mon Sep 17 00:00:00 2001
2 From: Simon Kelley <simon@thekelleys.org.uk>
3 Date: Fri, 8 May 2015 20:25:51 +0100
4 Subject: [PATCH 89/98] Check IPv4-mapped IPv6 addresses with --stop-rebind.
8 src/rfc1035.c | 21 +++++++++++++++++----
9 2 files changed, 20 insertions(+), 4 deletions(-)
11 diff --git a/CHANGELOG b/CHANGELOG
12 index d8fc57a418bb..94a521f996e2 100644
15 @@ -115,6 +115,9 @@ version 2.73
16 header to 1280 bytes. If it then answers, make that
19 + Check IPv4-mapped IPv6 addresses when --stop-rebind
20 + is active. Thanks to Jordan Milne for spotting this.
24 Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
25 diff --git a/src/rfc1035.c b/src/rfc1035.c
26 index 8b1709dd3495..5e3f566fdbc5 100644
29 @@ -1117,10 +1117,23 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
30 memcpy(&addr, p1, addrlen);
32 /* check for returned address in private space */
35 - private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
39 + if ((flags & F_IPV4) &&
40 + private_net(addr.addr.addr4, !option_bool(OPT_LOCAL_REBIND)))
44 + if ((flags & F_IPV6) &&
45 + IN6_IS_ADDR_V4MAPPED(&addr.addr.addr6))
48 + v4.s_addr = ((const uint32_t *) (&addr.addr.addr6))[3];
49 + if (private_net(v4, !option_bool(OPT_LOCAL_REBIND)))
56 if (ipsets && (flags & (F_IPV4 | F_IPV6)))