From f274cbeaed0e4c5fdbde9f5c30833d7f1da37cd3 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Thu, 30 Oct 2014 11:42:02 +1100 Subject: [PATCH] 3992. [func] DiG can now send queries without questions (dig +header-only). [RT #37599] --- CHANGES | 3 +++ bin/dig/dig.c | 5 +++++ bin/dig/dig.docbook | 11 +++++++++++ bin/dig/dighost.c | 7 +++++-- bin/dig/include/dig/dig.h | 3 ++- doc/arm/notes.xml | 6 ++++++ 6 files changed, 32 insertions(+), 3 deletions(-) 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