mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 06:25:31 +00:00
2353. [func] Add support for Name Server ID (RFC 5001).
'dig +nsid' requests NSID from server. 'request-nsid yes;' causes recursive server to send NSID requests to upstream servers. Server responds to NSID requests with the string configured by 'server-id' option. [RT #17091]
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: peer.c,v 1.29 2007/06/19 23:47:16 tbox Exp $ */
|
||||
/* $Id: peer.c,v 1.30 2008/04/03 02:01:08 marka Exp $ */
|
||||
|
||||
/*! \file */
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#define SUPPORT_EDNS_BIT 5
|
||||
#define SERVER_UDPSIZE_BIT 6
|
||||
#define SERVER_MAXUDP_BIT 7
|
||||
#define REQUEST_NSID_BIT 8
|
||||
|
||||
static void
|
||||
peerlist_delete(dns_peerlist_t **list);
|
||||
@@ -146,7 +147,7 @@ dns_peerlist_addpeer(dns_peerlist_t *peers, dns_peer_t *peer) {
|
||||
ISC_LIST_INSERTBEFORE(peers->elements, p, peer, next);
|
||||
else
|
||||
ISC_LIST_APPEND(peers->elements, peer, next);
|
||||
|
||||
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
@@ -213,7 +214,7 @@ dns_peer_new(isc_mem_t *mem, isc_netaddr_t *addr, dns_peer_t **peerptr) {
|
||||
isc_result_t
|
||||
dns_peer_newprefix(isc_mem_t *mem, isc_netaddr_t *addr, unsigned int prefixlen,
|
||||
dns_peer_t **peerptr)
|
||||
{
|
||||
{
|
||||
dns_peer_t *peer;
|
||||
|
||||
REQUIRE(peerptr != NULL);
|
||||
@@ -415,6 +416,32 @@ dns_peer_getsupportedns(dns_peer_t *peer, isc_boolean_t *retval) {
|
||||
return (ISC_R_NOTFOUND);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns_peer_setrequestnsid(dns_peer_t *peer, isc_boolean_t newval) {
|
||||
isc_boolean_t existed;
|
||||
|
||||
REQUIRE(DNS_PEER_VALID(peer));
|
||||
|
||||
existed = DNS_BIT_CHECK(REQUEST_NSID_BIT, &peer->bitflags);
|
||||
|
||||
peer->request_nsid = newval;
|
||||
DNS_BIT_SET(REQUEST_NSID_BIT, &peer->bitflags);
|
||||
|
||||
return (existed ? ISC_R_EXISTS : ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns_peer_getrequestnsid(dns_peer_t *peer, isc_boolean_t *retval) {
|
||||
REQUIRE(DNS_PEER_VALID(peer));
|
||||
REQUIRE(retval != NULL);
|
||||
|
||||
if (DNS_BIT_CHECK(REQUEST_NSID_BIT, &peer->bitflags)) {
|
||||
*retval = peer->request_nsid;
|
||||
return (ISC_R_SUCCESS);
|
||||
} else
|
||||
return (ISC_R_NOTFOUND);
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
dns_peer_settransfers(dns_peer_t *peer, isc_uint32_t newval) {
|
||||
isc_boolean_t existed;
|
||||
@@ -544,7 +571,7 @@ dns_peer_settransfersource(dns_peer_t *peer,
|
||||
}
|
||||
if (transfer_source != NULL) {
|
||||
peer->transfer_source = isc_mem_get(peer->mem,
|
||||
sizeof(*peer->transfer_source));
|
||||
sizeof(*peer->transfer_source));
|
||||
if (peer->transfer_source == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
|
||||
@@ -577,7 +604,7 @@ dns_peer_setnotifysource(dns_peer_t *peer,
|
||||
}
|
||||
if (notify_source != NULL) {
|
||||
peer->notify_source = isc_mem_get(peer->mem,
|
||||
sizeof(*peer->notify_source));
|
||||
sizeof(*peer->notify_source));
|
||||
if (peer->notify_source == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
|
||||
@@ -608,7 +635,7 @@ dns_peer_setquerysource(dns_peer_t *peer, const isc_sockaddr_t *query_source) {
|
||||
}
|
||||
if (query_source != NULL) {
|
||||
peer->query_source = isc_mem_get(peer->mem,
|
||||
sizeof(*peer->query_source));
|
||||
sizeof(*peer->query_source));
|
||||
if (peer->query_source == NULL)
|
||||
return (ISC_R_NOMEMORY);
|
||||
|
||||
@@ -649,11 +676,11 @@ dns_peer_getudpsize(dns_peer_t *peer, isc_uint16_t *udpsize) {
|
||||
REQUIRE(udpsize != NULL);
|
||||
|
||||
if (DNS_BIT_CHECK(SERVER_UDPSIZE_BIT, &peer->bitflags)) {
|
||||
*udpsize = peer->udpsize;
|
||||
return (ISC_R_SUCCESS);
|
||||
} else {
|
||||
return (ISC_R_NOTFOUND);
|
||||
}
|
||||
*udpsize = peer->udpsize;
|
||||
return (ISC_R_SUCCESS);
|
||||
} else {
|
||||
return (ISC_R_NOTFOUND);
|
||||
}
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
@@ -677,9 +704,9 @@ dns_peer_getmaxudp(dns_peer_t *peer, isc_uint16_t *maxudp) {
|
||||
REQUIRE(maxudp != NULL);
|
||||
|
||||
if (DNS_BIT_CHECK(SERVER_MAXUDP_BIT, &peer->bitflags)) {
|
||||
*maxudp = peer->maxudp;
|
||||
return (ISC_R_SUCCESS);
|
||||
} else {
|
||||
return (ISC_R_NOTFOUND);
|
||||
}
|
||||
*maxudp = peer->maxudp;
|
||||
return (ISC_R_SUCCESS);
|
||||
} else {
|
||||
return (ISC_R_NOTFOUND);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user