diff --git a/CHANGES b/CHANGES index 63e47632d2..78ac418a4b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +5094. [func] Add 'dig -r' to disable reading of .digrc. [GL !970] + 5093. [bug] Log lame qname-minimization servers only if they're really lame. [GL #671] diff --git a/bin/dig/dig.c b/bin/dig/dig.c index b7133803a3..f1de7d44c1 100644 --- a/bin/dig/dig.c +++ b/bin/dig/dig.c @@ -66,7 +66,7 @@ static char hexcookie[81]; static bool short_form = false, printcmd = true, plusquest = false, pluscomm = false, - ipv4only = false, ipv6only = false; + ipv4only = false, ipv6only = false, digrc = true; static uint32_t splitwidth = 0xffffffff; /*% opcode text */ @@ -157,6 +157,7 @@ help(void) { " -m (enable memory usage debugging)\n" " -p port (specify port number)\n" " -q name (specify query name)\n" +" -r (do not read ~/.digrc)\n" " -t type (specify query type)\n" " -u (display times in usec instead of msec)\n" " -x dot-notation (shortcut for reverse lookups)\n" @@ -1543,8 +1544,8 @@ plus_option(char *option, bool is_batchfile, /*% * #true returned if value was used */ -static const char *single_dash_opts = "46dhimnuv"; -static const char *dash_opts = "46bcdfhikmnpqtvyx"; +static const char *single_dash_opts = "46dhimnruv"; +static const char *dash_opts = "46bcdfhikmnpqrtvyx"; static bool dash_option(char *option, char *next, dig_lookup_t **lookup, bool *open_type_class, bool *need_clone, @@ -1615,6 +1616,10 @@ dash_option(char *option, char *next, dig_lookup_t **lookup, case 'n': /* deprecated */ break; + case 'r': + debug("digrc (late)"); + digrc = false; + break; case 'u': (*lookup)->use_usec = true; break; @@ -1841,11 +1846,23 @@ preparse_args(int argc, char **argv) { option = &rv[0][1]; while (strpbrk(option, single_dash_opts) == &option[0]) { switch (option[0]) { + case 'd': + /* For debugging early startup */ + debugging = true; + break; case 'm': memdebugging = true; isc_mem_debugging = ISC_MEM_DEBUGTRACE | ISC_MEM_DEBUGRECORD; break; + case 'r': + /* + * Must be done early, because ~/.digrc + * is read before command line parsing + */ + debug("digrc (early)"); + digrc = false; + break; case '4': if (ipv6only) fatal("only one of -4 and -6 allowed"); @@ -1939,8 +1956,9 @@ parse_args(bool is_batchfile, bool config_only, */ INSIST(batchfp == NULL); homedir = getenv("HOME"); - if (homedir != NULL) { + if (homedir != NULL && digrc) { unsigned int n; + debug("digrc (open)"); n = snprintf(rcfile, sizeof(rcfile), "%s/.digrc", homedir); if (n < sizeof(rcfile)) { diff --git a/bin/dig/dig.docbook b/bin/dig/dig.docbook index aa1bd3a38c..79fdee9ec7 100644 --- a/bin/dig/dig.docbook +++ b/bin/dig/dig.docbook @@ -131,9 +131,10 @@ It is possible to set per-user defaults for dig via - ${HOME}/.digrc. This file is read and - any options in it - are applied before the command line arguments. + ${HOME}/.digrc. This file is read and any + options in it are applied before the command line arguments. + The option disables this feature, for + scripts that need predictable behaviour. @@ -323,6 +324,16 @@ + + -r + + + Do not read options from ${HOME}/.digrc. + This is useful for scripts that need predictable behaviour. + + + + -t type