From 375dac22e47cf1ffce19d63c8d7874294f2ad034 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Thu, 20 Feb 2014 13:55:21 +1100 Subject: [PATCH] define DNS_OPT_EDNSOPTIONS (cherry picked from commit 72ba6ba736ef1c0bd106c3023f9f7e9fa3936adf) --- bin/named/client.c | 3 ++- lib/dns/include/dns/message.h | 3 +++ lib/dns/resolver.c | 5 ++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/bin/named/client.c b/bin/named/client.c index 18d3202d08..f995bae668 100644 --- a/bin/named/client.c +++ b/bin/named/client.c @@ -1263,7 +1263,7 @@ client_addopt(ns_client_t *client) { dns_view_t *view; dns_resolver_t *resolver; isc_uint16_t udpsize; - dns_ednsopt_t ednsopts[2]; + dns_ednsopt_t ednsopts[DNS_OPT_EDNSOPTIONS]; int count = 0; unsigned int flags; @@ -1292,6 +1292,7 @@ client_addopt(ns_client_t *client) { } else nsidp = ns_g_server->server_id; + INSIST(count < DNS_OPT_EDNSOPTIONS); ednsopts[count].code = DNS_OPT_NSID; ednsopts[count].length = strlen(nsidp); ednsopts[count].value = (unsigned char *)nsidp; diff --git a/lib/dns/include/dns/message.h b/lib/dns/include/dns/message.h index 6b2f39fc95..dc4c9a508d 100644 --- a/lib/dns/include/dns/message.h +++ b/lib/dns/include/dns/message.h @@ -107,6 +107,9 @@ #define DNS_OPT_NSID 0x0003 /*%< NSID opt code */ #define DNS_OPT_CLIENT_SUBNET 0x0008 /*%< client subnet opt code */ +/*%< The number of EDNS options we know about. */ +#define DNS_OPT_EDNSOPTIONS 3 + #define DNS_MESSAGE_REPLYPRESERVE (DNS_MESSAGEFLAG_RD|DNS_MESSAGEFLAG_CD) #define DNS_MESSAGEEXTFLAG_REPLYPRESERVE (DNS_MESSAGEEXTFLAG_DO) diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 72b03a4f76..7fe1055f6d 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -135,7 +135,6 @@ * Maximum EDNS0 input packet size. */ #define RECV_BUFFER_SIZE 4096 /* XXXRTH Constant. */ -#define EDNSOPTS 2 /*% * This defines the maximum number of timeouts we will permit before we @@ -1675,7 +1674,7 @@ resquery_send(resquery_t *query) { isc_boolean_t cleanup_cctx = ISC_FALSE; isc_boolean_t secure_domain; isc_boolean_t connecting = ISC_FALSE; - dns_ednsopt_t ednsopts[EDNSOPTS]; + dns_ednsopt_t ednsopts[DNS_OPT_EDNSOPTIONS]; unsigned ednsopt = 0; fctx = query->fctx; @@ -1860,7 +1859,7 @@ resquery_send(resquery_t *query) { if (peer != NULL) (void) dns_peer_getrequestnsid(peer, &reqnsid); if (reqnsid) { - INSIST(ednsopt < EDNSOPTS); + INSIST(ednsopt < DNS_OPT_EDNSOPTIONS); ednsopts[ednsopt].code = DNS_OPT_NSID; ednsopts[ednsopt].length = 0; ednsopts[ednsopt].value = NULL;