Added dns_use_edns0 main option.
authorPhil Pennock <pdp@exim.org>
Tue, 22 Mar 2011 13:37:32 +0000 (09:37 -0400)
committerPhil Pennock <pdp@exim.org>
Tue, 22 Mar 2011 13:37:32 +0000 (09:37 -0400)
Is int because need a "do not override default" option, but that stops
us from using the bool expansion logic and so we need to explicitly
set numbers. Should try to find a way around that.

doc/doc-docbook/spec.xfpt
doc/doc-txt/ChangeLog
doc/doc-txt/NewStuff
src/src/dns.c
src/src/globals.c
src/src/globals.h
src/src/readconf.c

index 0ea36fa50878b215a76a3f1501fdc03957d03251..5cfa344c05e302a199d9fadec09c3bac72d7a19d 100644 (file)
@@ -12669,6 +12669,7 @@ See also the &'Policy controls'& section above.
 .row &%dns_ipv4_lookup%&             "only v4 lookup for these domains"
 .row &%dns_retrans%&                 "parameter for resolver"
 .row &%dns_retry%&                   "parameter for resolver"
+.row &%dns_use_edns0%&               "parameter for resolver"
 .row &%hold_domains%&                "hold delivery for these domains"
 .row &%local_interfaces%&            "for routing checks"
 .row &%queue_domains%&               "no immediate delivery for these"
@@ -13301,6 +13302,19 @@ to set in them.
 See &%dns_retrans%& above.
 
 
+.new
+.option dns_use_edns0 main integer -1
+.cindex "DNS" "resolver options"
+.cindex "DNS" "EDNS0"
+If this option is set to a non-negative number then Exim will initialise the
+DNS resolver library to either use or not use EDNS0 extensions, overriding
+the system default. A value of 0 coerces EDNS0 off, a value of 1 coerces EDNS0
+on.
+
+If the resolver library does not support EDNS0 then this option has no effect.
+.wen
+
+
 .option drop_cr main boolean false
 This is an obsolete option that is now a no-op. It used to affect the way Exim
 handled CR and LF characters in incoming messages. What happens now is
index 14dac2946272889b1fe0b6715eb7959bcabdab59..7105e5fc644d230d8e442f22614f2a8324eca4cb 100644 (file)
@@ -13,6 +13,8 @@ PP/02 Harmonised TLS library version reporting; only show if debugging.
 
 PP/03 New openssl_options items: no_sslv2 no_sslv3 no_ticket no_tlsv1
 
+PP/04 New "dns_use_edns0" global option.
+
 
 Exim version 4.75
 -----------------
index b940afe349da8ec001874bd5accb7488798acedb..c205e9c98e88a565d87b480168beccd368841168 100644 (file)
@@ -9,6 +9,13 @@ test from the snapshots or the CVS before the documentation is updated. Once
 the documentation is updated, this file is reduced to a short list.
 
 
+Version 4.76
+------------
+
+ 1. The global option "dns_use_edns0" may be set to coerce EDNS0 usage on
+    or off in the resolver library.
+
+
 Version 4.75
 ------------
 
index dcafdb84aee1d197021d49e429c4b17098a23354..bfef69927649313d01bf45c234f8a7918aa61205 100644 (file)
@@ -180,6 +180,24 @@ _res.options |= (qualify_single? RES_DEFNAMES : 0) |
                 (search_parents? RES_DNSRCH : 0);
 if (dns_retrans > 0) _res.retrans = dns_retrans;
 if (dns_retry > 0) _res.retry = dns_retry;
+
+#ifdef RES_USE_EDNS0
+if (dns_use_edns0 >= 0)
+  {
+  if (dns_use_edns0)
+    _res.options |= RES_USE_EDNS0;
+  else
+    _res.options &= ~RES_USE_EDNS0;
+  DEBUG(D_resolver)
+    debug_printf("Coerced resolver EDNS0 support %s.\n",
+        dns_use_edns0 ? "on" : "off");
+  }
+#else
+if (dns_use_edns0 >= 0)
+  DEBUG(D_resolver)
+    debug_printf("Unable to %sset EDNS0 without resolver support.\n",
+        dns_use_edns0 ? "" : "un");
+#endif
 }
 
 
index 7b5a52554371fe0cc4c646ca36a701ec127ede4e..c7e6c2081cf6e8ce3a1a3894b8839af89f0391ce 100644 (file)
@@ -541,6 +541,7 @@ BOOL    dns_csa_use_reverse    = TRUE;
 uschar *dns_ipv4_lookup        = NULL;
 int     dns_retrans            = 0;
 int     dns_retry              = 0;
+int     dns_use_edns0          = -1; /* <0 = not coerced */
 uschar *dnslist_domain         = NULL;
 uschar *dnslist_matched        = NULL;
 uschar *dnslist_text           = NULL;
index c1806f070e795c5a4a608ac4277235ed362b95bc..3a1e53771ea511191590929b18bf88312dc0f7e7 100644 (file)
@@ -329,6 +329,7 @@ extern BOOL    dns_csa_use_reverse;    /* Check CSA in reverse DNS? (non-standar
 extern uschar *dns_ipv4_lookup;        /* For these domains, don't look for AAAA (or A6) */
 extern int     dns_retrans;            /* Retransmission time setting */
 extern int     dns_retry;              /* Number of retries */
+extern int     dns_use_edns0;          /* Coerce EDNS0 support on/off in resolver. */
 extern uschar *dnslist_domain;         /* DNS (black) list domain */
 extern uschar *dnslist_matched;        /* DNS (black) list matched key */
 extern uschar *dnslist_text;           /* DNS (black) list text message */
index f5e895ac65378fec5af29706d63c67bfc1ffe72c..7aa44cf8c6b6fcf1fde3911d01bda811c8a06002 100644 (file)
@@ -218,6 +218,7 @@ static optionlist optionlist_config[] = {
   { "dns_ipv4_lookup",          opt_stringptr,   &dns_ipv4_lookup },
   { "dns_retrans",              opt_time,        &dns_retrans },
   { "dns_retry",                opt_int,         &dns_retry },
+  { "dns_use_edns0",            opt_int,         &dns_use_edns0 },
  /* This option is now a no-op, retained for compability */
   { "drop_cr",                  opt_bool,        &drop_cr },
 /*********************************************************/