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