diff --git a/CHANGES b/CHANGES
index c7301607f1..0b5a2de328 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+3992. [func] DiG can now send queries without questions
+ (dig +header-only). [RT #37599]
+
3991. [func] Add the ability to buffer logging output by specifying
"buffered yes;" when defining a channel. [RT #26561]
diff --git a/bin/dig/dig.c b/bin/dig/dig.c
index 0b4045e338..2a00b058d8 100644
--- a/bin/dig/dig.c
+++ b/bin/dig/dig.c
@@ -230,6 +230,7 @@ help(void) {
" +[no]dnssec (Request DNSSEC records)\n"
" +[no]expire (Request time to expire)\n"
" +[no]nsid (Request Name Server ID)\n"
+" +[no]header-only (Send query without a question section)\n"
#ifdef ISC_PLATFORM_USESIT
" +[no]sit (Request a Source Identity Token)\n"
#endif
@@ -1017,6 +1018,10 @@ plus_option(char *option, isc_boolean_t is_batchfile,
FULLCHECK("fail");
lookup->servfail_stops = state;
break;
+ case 'h':
+ FULLCHECK("header-only");
+ lookup->header_only = state;
+ break;
case 'i':
switch (cmd[1]) {
case 'd': /* identify */
diff --git a/bin/dig/dig.docbook b/bin/dig/dig.docbook
index 5dfbe212df..24fba64ee2 100644
--- a/bin/dig/dig.docbook
+++ b/bin/dig/dig.docbook
@@ -622,6 +622,17 @@
+
+
+
+
+ Send a query with a DNS header without a question section.
+ The default is to add a question section. The query type
+ and query name are ignored when this is set.
+
+
+
+
diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c
index c9e048e20a..7d418804fd 100644
--- a/bin/dig/dighost.c
+++ b/bin/dig/dighost.c
@@ -786,6 +786,7 @@ make_empty_lookup(void) {
looknew->ednsflags = 0;
looknew->expire = ISC_FALSE;
looknew->nsid = ISC_FALSE;
+ looknew->header_only = ISC_FALSE;
#ifdef ISC_PLATFORM_USESIT
looknew->sit = ISC_FALSE;
#endif
@@ -881,6 +882,7 @@ clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers) {
looknew->ednsflags = lookold->ednsflags;
looknew->expire = lookold->expire;
looknew->nsid = lookold->nsid;
+ looknew->header_only = lookold->header_only;
#ifdef ISC_PLATFORM_USESIT
looknew->sit = lookold->sit;
looknew->sitvalue = lookold->sitvalue;
@@ -2431,8 +2433,9 @@ setup_lookup(dig_lookup_t *lookup) {
}
}
- add_question(lookup->sendmsg, lookup->name, lookup->rdclass,
- lookup->rdtype);
+ if (!lookup->header_only)
+ add_question(lookup->sendmsg, lookup->name, lookup->rdclass,
+ lookup->rdtype);
/* add_soa */
if (lookup->rdtype == dns_rdatatype_ixfr)
diff --git a/bin/dig/include/dig/dig.h b/bin/dig/include/dig/dig.h
index 97e1e7b00c..435e8d539c 100644
--- a/bin/dig/include/dig/dig.h
+++ b/bin/dig/include/dig/dig.h
@@ -135,7 +135,8 @@ struct dig_lookup {
#ifdef ISC_PLATFORM_USESIT
sit,
#endif
- nsid; /*% Name Server ID (RFC 5001) */
+ nsid, /*% Name Server ID (RFC 5001) */
+ header_only;
#ifdef DIG_SIGCHASE
isc_boolean_t sigchase;
#if DIG_SIGCHASE_TD
diff --git a/doc/arm/notes.xml b/doc/arm/notes.xml
index bf1c982b21..52480d4e04 100644
--- a/doc/arm/notes.xml
+++ b/doc/arm/notes.xml
@@ -127,6 +127,12 @@
yet-to-be-defined EDNS flags in DNS requests.
+
+
+ dig +header-only can now be used to send
+ queries without a question section.
+
+
dig +ttlunits causes dig