Adam Tkac 28d0a5
diff -up bind-9.5.0b2/lib/dns/view.c.edns bind-9.5.0b2/lib/dns/view.c
Adam Tkac 28d0a5
--- bind-9.5.0b2/lib/dns/view.c.edns	2007-06-19 01:47:42.000000000 +0200
Adam Tkac 28d0a5
+++ bind-9.5.0b2/lib/dns/view.c	2008-02-12 13:35:36.000000000 +0100
Adam Tkac 578bd3
@@ -179,6 +179,7 @@ dns_view_create(isc_mem_t *mctx, dns_rda
Adam Tkac 578bd3
 	view->flush = ISC_FALSE;
Adam Tkac 578bd3
 	view->dlv = NULL;
Adam Tkac 578bd3
 	view->maxudp = 0;
Adam Tkac 578bd3
+	view->edns = ISC_TRUE;
Adam Tkac 578bd3
 	dns_fixedname_init(&view->dlv_fixed);
Adam Tkac 578bd3
 
Adam Tkac 578bd3
 	result = dns_order_create(view->mctx, &view->order);
Adam Tkac 28d0a5
diff -up bind-9.5.0b2/lib/dns/resolver.c.edns bind-9.5.0b2/lib/dns/resolver.c
Adam Tkac 28d0a5
--- bind-9.5.0b2/lib/dns/resolver.c.edns	2008-01-18 00:46:37.000000000 +0100
Adam Tkac 28d0a5
+++ bind-9.5.0b2/lib/dns/resolver.c	2008-02-12 13:50:04.000000000 +0100
Adam Tkac 28d0a5
@@ -1514,10 +1514,12 @@ resquery_send(resquery_t *query) {
Adam Tkac 28d0a5
 	 * The ADB does not know about servers with "edns no".  Check this,
Adam Tkac 28d0a5
 	 * and then inform the ADB for future use.
Adam Tkac 28d0a5
 	 */
Adam Tkac 28d0a5
-	if ((query->addrinfo->flags & DNS_FETCHOPT_NOEDNS0) == 0 &&
Adam Tkac 28d0a5
-	    peer != NULL &&
Adam Tkac 28d0a5
-	    dns_peer_getsupportedns(peer, &useedns) == ISC_R_SUCCESS &&
Adam Tkac 28d0a5
-	    !useedns)
Adam Tkac 28d0a5
+	if (((query->addrinfo->flags & DNS_FETCHOPT_NOEDNS0) == 0 ||
Adam Tkac 28d0a5
+	      (query->options & DNS_FETCHOPT_NOEDNS0) == 0) &&
Adam Tkac 28d0a5
+	    (!(res->view->edns) ||
Adam Tkac 28d0a5
+	     (peer != NULL &&
Adam Tkac 28d0a5
+	      dns_peer_getsupportedns(peer, &useedns) == ISC_R_SUCCESS &&
Adam Tkac 28d0a5
+	      !useedns)))
Adam Tkac 28d0a5
 	{
Adam Tkac 28d0a5
 		query->options |= DNS_FETCHOPT_NOEDNS0;
Adam Tkac 28d0a5
 		dns_adb_changeflags(fctx->adb,
Adam Tkac 28d0a5
diff -up bind-9.5.0b2/lib/dns/include/dns/view.h.edns bind-9.5.0b2/lib/dns/include/dns/view.h
Adam Tkac 28d0a5
--- bind-9.5.0b2/lib/dns/include/dns/view.h.edns	2007-06-19 01:47:42.000000000 +0200
Adam Tkac 28d0a5
+++ bind-9.5.0b2/lib/dns/include/dns/view.h	2008-02-12 13:35:36.000000000 +0100
Adam Tkac 578bd3
@@ -137,6 +137,7 @@ struct dns_view {
Adam Tkac 578bd3
 	dns_name_t *			dlv;
Adam Tkac 578bd3
 	dns_fixedname_t			dlv_fixed;
Adam Tkac 578bd3
 	isc_uint16_t			maxudp;
Adam Tkac 578bd3
+	isc_boolean_t			edns;
Adam Tkac 578bd3
 
Adam Tkac 578bd3
 	/*
Adam Tkac 578bd3
 	 * Configurable data for server use only,
Adam Tkac 28d0a5
diff -up bind-9.5.0b2/lib/isccfg/namedconf.c.edns bind-9.5.0b2/lib/isccfg/namedconf.c
Adam Tkac 28d0a5
--- bind-9.5.0b2/lib/isccfg/namedconf.c.edns	2008-01-22 01:31:00.000000000 +0100
Adam Tkac 28d0a5
+++ bind-9.5.0b2/lib/isccfg/namedconf.c	2008-02-12 13:35:36.000000000 +0100
Adam Tkac 578bd3
@@ -618,6 +618,7 @@ options_clauses[] = {
Adam Tkac 578bd3
 	{ "deallocate-on-exit", &cfg_type_boolean, CFG_CLAUSEFLAG_OBSOLETE },
Adam Tkac 578bd3
 	{ "directory", &cfg_type_qstring, CFG_CLAUSEFLAG_CALLBACK },
Adam Tkac 578bd3
 	{ "dump-file", &cfg_type_qstring, 0 },
Adam Tkac 578bd3
+	{ "edns", &cfg_type_boolean, 0 },
Adam Tkac 578bd3
 	{ "fake-iquery", &cfg_type_boolean, CFG_CLAUSEFLAG_OBSOLETE },
Adam Tkac 578bd3
 	{ "files", &cfg_type_size, 0 },
Adam Tkac 578bd3
 	{ "has-old-clients", &cfg_type_boolean, CFG_CLAUSEFLAG_OBSOLETE },
Adam Tkac 28d0a5
diff -up bind-9.5.0b2/doc/misc/options.edns bind-9.5.0b2/doc/misc/options
Adam Tkac 28d0a5
--- bind-9.5.0b2/doc/misc/options.edns	2008-01-22 02:45:23.000000000 +0100
Adam Tkac 28d0a5
+++ bind-9.5.0b2/doc/misc/options	2008-02-12 13:35:36.000000000 +0100
Adam Tkac a6e705
@@ -97,6 +97,7 @@ options {
Adam Tkac a6e705
             <integer>] | <ipv4_address> [port <integer>] | <ipv6_address>
Adam Tkac a6e705
             [port <integer>] ); ... };
Adam Tkac 578bd3
         dump-file <quoted_string>;
Adam Tkac 578bd3
+	edns <boolean>;
Adam Tkac a6e705
         edns-udp-size <integer>;
Adam Tkac a6e705
         empty-contact <string>;
Adam Tkac a6e705
         empty-server <string>;
Adam Tkac 28d0a5
diff -up bind-9.5.0b2/bin/named/config.c.edns bind-9.5.0b2/bin/named/config.c
Adam Tkac 28d0a5
--- bind-9.5.0b2/bin/named/config.c.edns	2008-01-23 00:27:35.000000000 +0100
Adam Tkac 28d0a5
+++ bind-9.5.0b2/bin/named/config.c	2008-02-12 13:35:36.000000000 +0100
Adam Tkac 578bd3
@@ -137,6 +137,7 @@ options {\n\
Adam Tkac 578bd3
 	acache-enable no;\n\
Adam Tkac 578bd3
 	acache-cleaning-interval 60;\n\
Adam Tkac a6e705
 	max-acache-size 16M;\n\
Adam Tkac 578bd3
+	edns yes;\n\
Adam Tkac 578bd3
 	dnssec-enable yes;\n\
Adam Tkac 578bd3
 	dnssec-validation no; /* Make yes for 9.5. */ \n\
Adam Tkac 578bd3
 	dnssec-accept-expired no;\n\
Adam Tkac 28d0a5
diff -up bind-9.5.0b2/bin/named/server.c.edns bind-9.5.0b2/bin/named/server.c
Adam Tkac 28d0a5
--- bind-9.5.0b2/bin/named/server.c.edns	2008-01-24 03:29:56.000000000 +0100
Adam Tkac 28d0a5
+++ bind-9.5.0b2/bin/named/server.c	2008-02-12 13:52:25.000000000 +0100
Adam Tkac 28d0a5
@@ -1667,6 +1667,11 @@ configure_view(dns_view_t *view, const c
Adam Tkac 578bd3
 					max_clients_per_query);
Adam Tkac 28d0a5
 
Adam Tkac 28d0a5
 	obj = NULL;
Adam Tkac 578bd3
+	result = ns_config_get(maps, "edns", &obj);
Adam Tkac 578bd3
+	INSIST(result == ISC_R_SUCCESS);
Adam Tkac 578bd3
+	view->edns = cfg_obj_asboolean(obj);
Adam Tkac 578bd3
+
Adam Tkac 28d0a5
+	obj = NULL;
Adam Tkac 578bd3
 	result = ns_config_get(maps, "dnssec-enable", &obj);
Adam Tkac 578bd3
 	INSIST(result == ISC_R_SUCCESS);
Adam Tkac 28d0a5
 	view->enablednssec = cfg_obj_asboolean(obj);
Adam Tkac 28d0a5
diff -up bind-9.5.0b2/bin/named/named.conf.5.edns bind-9.5.0b2/bin/named/named.conf.5
Adam Tkac 28d0a5
--- bind-9.5.0b2/bin/named/named.conf.5.edns	2007-10-22 00:15:32.000000000 +0200
Adam Tkac 28d0a5
+++ bind-9.5.0b2/bin/named/named.conf.5	2008-02-12 13:35:36.000000000 +0100
Adam Tkac 578bd3
@@ -160,6 +160,7 @@ options {
Adam Tkac 578bd3
 	datasize \fIsize\fR;
Adam Tkac 578bd3
 	directory \fIquoted_string\fR;
Adam Tkac 578bd3
 	dump\-file \fIquoted_string\fR;
Adam Tkac 578bd3
+	edns \fIboolean\fR;
Adam Tkac 578bd3
 	files \fIsize\fR;
Adam Tkac 578bd3
 	heartbeat\-interval \fIinteger\fR;
Adam Tkac 578bd3
 	host\-statistics \fIboolean\fR; // not implemented