bind/bind-9.5-any.patch

44 lines
1.4 KiB
Diff

diff -up bind-9.5.0b3/lib/isc/netaddr.c.any bind-9.5.0b3/lib/isc/netaddr.c
--- bind-9.5.0b3/lib/isc/netaddr.c.any 2008-05-05 22:01:29.000000000 +0200
+++ bind-9.5.0b3/lib/isc/netaddr.c 2008-05-05 22:24:52.000000000 +0200
@@ -69,10 +69,11 @@ isc_boolean_t
isc_netaddr_eqprefix(const isc_netaddr_t *a, const isc_netaddr_t *b,
unsigned int prefixlen)
{
- const unsigned char *pa, *pb;
+ const unsigned char *pa, *pb, *pany;
unsigned int ipabytes; /* Length of whole IP address in bytes */
unsigned int nbytes; /* Number of significant whole bytes */
unsigned int nbits; /* Number of significant leftover bits */
+ isc_netaddr_t any; /* represents 0.0.0.0 or ::0 */
REQUIRE(a != NULL && b != NULL);
@@ -86,11 +87,15 @@ isc_netaddr_eqprefix(const isc_netaddr_t
case AF_INET:
pa = (const unsigned char *) &a->type.in;
pb = (const unsigned char *) &b->type.in;
+ isc_netaddr_any(&any);
+ pany = (const unsigned char *) &any.type.in;
ipabytes = 4;
break;
case AF_INET6:
pa = (const unsigned char *) &a->type.in6;
pb = (const unsigned char *) &b->type.in6;
+ isc_netaddr_any6(&any);
+ pany = (const unsigned char *) &any.type.in6;
ipabytes = 16;
break;
default:
@@ -99,6 +104,10 @@ isc_netaddr_eqprefix(const isc_netaddr_t
return (ISC_FALSE);
}
+ if (memcmp(pa, pany, ipabytes) == 0 ||
+ memcmp(pb, pany, ipabytes) == 0)
+ return (ISC_TRUE);
+
/*
* Don't crash if we get a pattern like 10.0.0.1/9999999.
*/