+3813. [func] "host" now recognizes the "timeout", "attempts" and
+ "debug" options when set in /etc/resolv.conf.
+ (Thanks to Adam Tkac at RedHat.) [RT #21885]
+
3812. [func] Dig now supports sending arbitary EDNS options from
the command line (+ednsopt=code[:value]). [RT #35584]
result = isc_app_start();
check_result(result, "isc_app_start");
setup_libs();
- parse_args(ISC_FALSE, ISC_FALSE, argc, argv);
setup_system();
+ parse_args(ISC_FALSE, ISC_FALSE, argc, argv);
if (domainopt[0] != '\0') {
set_search_domain(domainopt);
usesearch = ISC_TRUE;
showsearch = ISC_FALSE,
qr = ISC_FALSE,
is_dst_up = ISC_FALSE,
- keep_open = ISC_FALSE;
+ keep_open = ISC_FALSE,
+ verbose = ISC_FALSE;
in_port_t port = 53;
unsigned int timeout = 0;
unsigned int extrabytes;
}
}
+ if (lwconf->resdebug) {
+ verbose = ISC_TRUE;
+ debug("verbose is on");
+ }
if (ndots == -1) {
ndots = lwconf->ndots;
debug("ndots is %d.", ndots);
}
+ if (lwconf->attempts) {
+ tries = lwconf->attempts + 1;
+ if (tries < 2)
+ tries = 2;
+ debug("tries is %d.", tries);
+ }
+ if (lwconf->timeout) {
+ timeout = lwconf->timeout;
+ debug("timeout is %d.", timeout);
+ }
/* If user doesn't specify server use nameservers from resolv.conf. */
if (ISC_LIST_EMPTY(server_list))
lookup->servfail_stops = ISC_FALSE;
lookup->comments = ISC_FALSE;
+ short_form = !verbose;
while ((c = isc_commandline_parse(argc, argv, optstring)) != -1) {
switch (c) {
result = isc_app_start();
check_result(result, "isc_app_start");
setup_libs();
- parse_args(ISC_FALSE, argc, argv);
setup_system();
+ parse_args(ISC_FALSE, argc, argv);
result = isc_app_onrun(mctx, global_task, onrun_callback, NULL);
check_result(result, "isc_app_onrun");
isc_app_run();
options are equivalent. They have been provided for backwards
compatibility. In previous versions, the <option>-d</option> option
switched on debugging traces and <option>-v</option> enabled verbose
- output.
+ output. Verbose output can also be enabled by setting the
+ <parameter>debug</parameter> option in
+ <filename>/etc/resolv.conf</filename>.
</para>
<para>
indicates
how many times <command>host</command> will repeat a query
that does
- not get answered. The default number of retries is 1. If
+ not get answered. If
<parameter>number</parameter> is negative or zero, the
number of
- retries will default to 1.
+ retries will default to 1. The default value is 1, or
+ the value of the <parameter>attempts</parameter> option in
+ <filename>/etc/resolv.conf</filename>, if set.
</para>
<para>
will
effectively wait forever for a reply. The time to wait for a response
will be set to the number of seconds given by the hardware's maximum
- value for an integer quantity.
+ value for an integer quantity. By default, <command>host</command>
+ will wait for 5 seconds for UDP responses and 10 seconds for TCP
+ connections. These defaults can be overridden by the
+ <parameter>timeout</parameter> option in
+ <filename>/etc/resolv.conf</filename>.
</para>
<para>
extern char *progname;
extern int tries;
extern int fatalexit;
+extern isc_boolean_t verbose;
#ifdef WITH_IDN
extern int idnoptions;
#endif
setup_libs();
progname = argv[0];
- parse_args(argc, argv);
-
setup_system();
+ parse_args(argc, argv);
if (domainopt[0] != '\0')
set_search_domain(domainopt);
if (in_use)
lwres_uint8_t resdebug; /*%< non-zero if 'options debug' set */
lwres_uint8_t ndots; /*%< set to n in 'options ndots:n' */
lwres_uint8_t no_tld_query; /*%< non-zero if 'options no_tld_query' */
+ lwres_int32_t attempts; /*%< set to n in 'options attempts:n' */
+ lwres_int32_t timeout; /*%< set to n in 'options timeout:n' */
} lwres_conf_t;
#define LWRES_ADDRTYPE_V4 0x00000001U /*%< ipv4 */
confdata->resdebug = 0;
confdata->ndots = 1;
confdata->no_tld_query = 0;
+ confdata->attempts = 0;
+ confdata->timeout = 0;
for (i = 0; i < LWRES_CONFMAXNAMESERVERS; i++)
lwres_resetaddr(&confdata->nameservers[i]);
confdata->resdebug = 0;
confdata->ndots = 1;
confdata->no_tld_query = 0;
+ confdata->attempts = 0;
+ confdata->timeout = 0;
}
static lwres_result_t
lwres_conf_parseoption(lwres_context_t *ctx, FILE *fp) {
int delim;
long ndots;
+ long attempts;
+ long timeout;
char *p;
char word[LWRES_CONFMAXLINELEN];
lwres_conf_t *confdata;
confdata->resdebug = 1;
} else if (strcmp("no_tld_query", word) == 0) {
confdata->no_tld_query = 1;
+ } else if (strcmp("debug", word) == 0) {
+ confdata->resdebug = 1;
} else if (strncmp("ndots:", word, 6) == 0) {
ndots = strtol(word + 6, &p, 10);
if (*p != '\0') /* Bad string. */
if (ndots < 0 || ndots > 0xff) /* Out of range. */
return (LWRES_R_FAILURE);
confdata->ndots = (lwres_uint8_t)ndots;
+ } else if (strncmp("timeout:", word, 8) == 0) {
+ timeout = strtol(word + 8, &p, 10);
+ if (*p != '\0') /* Bad string. */
+ return (LWRES_R_FAILURE);
+ confdata->timeout = (lwres_int32_t)timeout;
+ } else if (strncmp("attempts:", word, 9) == 0) {
+ attempts = strtol(word + 9, &p, 10);
+ if (*p != '\0') /* Bad string. */
+ return (LWRES_R_FAILURE);
+ if (attempts < 0) /* Out of range. */
+ return (LWRES_R_FAILURE);
+ confdata->attempts = (lwres_int32_t)attempts;
}
if (delim == EOF || delim == '\n')
if (confdata->no_tld_query)
fprintf(fp, "options no_tld_query\n");
+ if (confdata->attempts)
+ fprintf(fp, "options attempts:%d\n", confdata->attempts);
+
+ if (confdata->timeout)
+ fprintf(fp, "options timeout:%d\n", confdata->timeout);
+
return (LWRES_R_SUCCESS);
}