mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-03 08:05:21 +00:00
1714. [bug] dig/host/nslookup were only trying the first
address when a nameserver was specified by name. [RT #12286]
This commit is contained in:
4
CHANGES
4
CHANGES
@@ -1,3 +1,7 @@
|
|||||||
|
1714. [bug] dig/host/nslookup were only trying the first
|
||||||
|
address when a nameserver was specified by name.
|
||||||
|
[RT #12286]
|
||||||
|
|
||||||
1713. [placeholder] rt12375
|
1713. [placeholder] rt12375
|
||||||
|
|
||||||
1712. [bug] Missing FULLCHECK for "trusted-key" in dig.
|
1712. [bug] Missing FULLCHECK for "trusted-key" in dig.
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: dig.c,v 1.195 2004/09/03 03:55:20 marka Exp $ */
|
/* $Id: dig.c,v 1.196 2004/09/06 01:24:42 marka Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -41,6 +41,8 @@
|
|||||||
#include <dns/rdataclass.h>
|
#include <dns/rdataclass.h>
|
||||||
#include <dns/result.h>
|
#include <dns/result.h>
|
||||||
|
|
||||||
|
#include <bind9/getaddresses.h>
|
||||||
|
|
||||||
#include <dig/dig.h>
|
#include <dig/dig.h>
|
||||||
|
|
||||||
extern ISC_LIST(dig_lookup_t) lookup_list;
|
extern ISC_LIST(dig_lookup_t) lookup_list;
|
||||||
@@ -54,6 +56,7 @@ extern ISC_LIST(dig_searchlist_t) search_list;
|
|||||||
isc_buffer_putstr(b, s); \
|
isc_buffer_putstr(b, s); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define DIG_MAX_ADDRESSES 20
|
||||||
|
|
||||||
extern isc_boolean_t have_ipv4, have_ipv6, specified_source,
|
extern isc_boolean_t have_ipv4, have_ipv6, specified_source,
|
||||||
usesearch, qr;
|
usesearch, qr;
|
||||||
@@ -83,6 +86,7 @@ extern isc_boolean_t debugging, memdebugging;
|
|||||||
static char *batchname = NULL;
|
static char *batchname = NULL;
|
||||||
static FILE *batchfp = NULL;
|
static FILE *batchfp = NULL;
|
||||||
static char *argv0;
|
static char *argv0;
|
||||||
|
static int addresscount = 0;
|
||||||
|
|
||||||
static char domainopt[DNS_NAME_MAXTEXT];
|
static char domainopt[DNS_NAME_MAXTEXT];
|
||||||
|
|
||||||
@@ -627,6 +631,15 @@ printgreeting(int argc, char **argv, dig_lookup_t *lookup) {
|
|||||||
remaining = sizeof(lookup->cmdline) -
|
remaining = sizeof(lookup->cmdline) -
|
||||||
strlen(lookup->cmdline) - 1;
|
strlen(lookup->cmdline) - 1;
|
||||||
strncat(lookup->cmdline, "\n", remaining);
|
strncat(lookup->cmdline, "\n", remaining);
|
||||||
|
if (first && addresscount != 0) {
|
||||||
|
snprintf(append, sizeof(append),
|
||||||
|
"; (%d server%s found)\n",
|
||||||
|
addresscount,
|
||||||
|
addresscount > 1 ? "s" : "");
|
||||||
|
strncat(lookup->cmdline, append, remaining);
|
||||||
|
remaining = sizeof(lookup->cmdline) -
|
||||||
|
strlen(lookup->cmdline) - 1;
|
||||||
|
}
|
||||||
if (first) {
|
if (first) {
|
||||||
snprintf(append, sizeof(append),
|
snprintf(append, sizeof(append),
|
||||||
";; global options: %s %s\n",
|
";; global options: %s %s\n",
|
||||||
@@ -1069,8 +1082,7 @@ static const char *single_dash_opts = "46dhimnv";
|
|||||||
static const char *dash_opts = "46bcdfhikmnptvyx";
|
static const char *dash_opts = "46bcdfhikmnptvyx";
|
||||||
static isc_boolean_t
|
static isc_boolean_t
|
||||||
dash_option(char *option, char *next, dig_lookup_t **lookup,
|
dash_option(char *option, char *next, dig_lookup_t **lookup,
|
||||||
isc_boolean_t *open_type_class, isc_boolean_t *firstarg,
|
isc_boolean_t *open_type_class)
|
||||||
int argc, char **argv)
|
|
||||||
{
|
{
|
||||||
char opt, *value, *ptr;
|
char opt, *value, *ptr;
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
@@ -1275,10 +1287,6 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
|
|||||||
if (!(*lookup)->rdclassset)
|
if (!(*lookup)->rdclassset)
|
||||||
(*lookup)->rdclass = dns_rdataclass_in;
|
(*lookup)->rdclass = dns_rdataclass_in;
|
||||||
(*lookup)->new_search = ISC_TRUE;
|
(*lookup)->new_search = ISC_TRUE;
|
||||||
if (*lookup && *firstarg) {
|
|
||||||
printgreeting(argc, argv, *lookup);
|
|
||||||
*firstarg = ISC_FALSE;
|
|
||||||
}
|
|
||||||
ISC_LIST_APPEND(lookup_list, *lookup, link);
|
ISC_LIST_APPEND(lookup_list, *lookup, link);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Invalid IP address %s\n", value);
|
fprintf(stderr, "Invalid IP address %s\n", value);
|
||||||
@@ -1325,13 +1333,36 @@ preparse_args(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
getaddresses(dig_lookup_t *lookup, const char *host) {
|
||||||
|
isc_result_t result;
|
||||||
|
isc_sockaddr_t sockaddrs[DIG_MAX_ADDRESSES];
|
||||||
|
isc_netaddr_t netaddr;
|
||||||
|
unsigned int count, i;
|
||||||
|
dig_server_t *srv;
|
||||||
|
char tmp[ISC_NETADDR_FORMATSIZE];
|
||||||
|
|
||||||
|
result = bind9_getaddresses(host, 0, sockaddrs,
|
||||||
|
DIG_MAX_ADDRESSES, &count);
|
||||||
|
if (result != ISC_R_SUCCESS)
|
||||||
|
fatal("couldn't get address for '%s': %s",
|
||||||
|
host, isc_result_totext(result));
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
isc_netaddr_fromsockaddr(&netaddr, &sockaddrs[i]);
|
||||||
|
isc_netaddr_format(&netaddr, tmp, sizeof(tmp));
|
||||||
|
srv = make_server(tmp, host);
|
||||||
|
ISC_LIST_APPEND(lookup->my_server_list, srv, link);
|
||||||
|
}
|
||||||
|
addresscount = count;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
|
parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
|
||||||
int argc, char **argv) {
|
int argc, char **argv) {
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
isc_textregion_t tr;
|
isc_textregion_t tr;
|
||||||
isc_boolean_t firstarg = ISC_TRUE;
|
isc_boolean_t firstarg = ISC_TRUE;
|
||||||
dig_server_t *srv = NULL;
|
|
||||||
dig_lookup_t *lookup = NULL;
|
dig_lookup_t *lookup = NULL;
|
||||||
dns_rdatatype_t rdtype;
|
dns_rdatatype_t rdtype;
|
||||||
dns_rdataclass_t rdclass;
|
dns_rdataclass_t rdclass;
|
||||||
@@ -1411,24 +1442,20 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
|
|||||||
if (strncmp(rv[0], "%", 1) == 0)
|
if (strncmp(rv[0], "%", 1) == 0)
|
||||||
break;
|
break;
|
||||||
if (strncmp(rv[0], "@", 1) == 0) {
|
if (strncmp(rv[0], "@", 1) == 0) {
|
||||||
srv = make_server(&rv[0][1]);
|
getaddresses(lookup, &rv[0][1]);
|
||||||
ISC_LIST_APPEND(lookup->my_server_list,
|
|
||||||
srv, link);
|
|
||||||
} else if (rv[0][0] == '+') {
|
} else if (rv[0][0] == '+') {
|
||||||
plus_option(&rv[0][1], is_batchfile,
|
plus_option(&rv[0][1], is_batchfile,
|
||||||
lookup);
|
lookup);
|
||||||
} else if (rv[0][0] == '-') {
|
} else if (rv[0][0] == '-') {
|
||||||
if (rc <= 1) {
|
if (rc <= 1) {
|
||||||
if (dash_option(&rv[0][1], NULL,
|
if (dash_option(&rv[0][1], NULL,
|
||||||
&lookup, &open_type_class,
|
&lookup, &open_type_class)) {
|
||||||
&firstarg, argc, argv)) {
|
|
||||||
rc--;
|
rc--;
|
||||||
rv++;
|
rv++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (dash_option(&rv[0][1], rv[1],
|
if (dash_option(&rv[0][1], rv[1],
|
||||||
&lookup, &open_type_class,
|
&lookup, &open_type_class)) {
|
||||||
&firstarg, argc, argv)) {
|
|
||||||
rc--;
|
rc--;
|
||||||
rv++;
|
rv++;
|
||||||
}
|
}
|
||||||
@@ -1499,10 +1526,6 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
|
|||||||
if (!config_only) {
|
if (!config_only) {
|
||||||
lookup = clone_lookup(default_lookup,
|
lookup = clone_lookup(default_lookup,
|
||||||
ISC_TRUE);
|
ISC_TRUE);
|
||||||
if (firstarg) {
|
|
||||||
printgreeting(argc, argv, lookup);
|
|
||||||
firstarg = ISC_FALSE;
|
|
||||||
}
|
|
||||||
strncpy(lookup->textname, rv[0],
|
strncpy(lookup->textname, rv[0],
|
||||||
sizeof(lookup->textname));
|
sizeof(lookup->textname));
|
||||||
lookup->textname[sizeof(lookup->textname)-1]=0;
|
lookup->textname[sizeof(lookup->textname)-1]=0;
|
||||||
@@ -1569,6 +1592,9 @@ parse_args(isc_boolean_t is_batchfile, isc_boolean_t config_only,
|
|||||||
firstarg = ISC_FALSE;
|
firstarg = ISC_FALSE;
|
||||||
}
|
}
|
||||||
ISC_LIST_APPEND(lookup_list, lookup, link);
|
ISC_LIST_APPEND(lookup_list, lookup, link);
|
||||||
|
} else if (!config_only && firstarg) {
|
||||||
|
printgreeting(argc, argv, lookup);
|
||||||
|
firstarg = ISC_FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: dighost.c,v 1.264 2004/06/30 23:47:48 marka Exp $ */
|
/* $Id: dighost.c,v 1.265 2004/09/06 01:24:43 marka Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Notice to programmers: Do not use this code as an example of how to
|
* Notice to programmers: Do not use this code as an example of how to
|
||||||
@@ -290,6 +290,8 @@ struct_tk_list tk_list = { {NULL, NULL, NULL, NULL, NULL}, 0};
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define DIG_MAX_ADDRESSES 20
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Apply and clear locks at the event level in global task.
|
* Apply and clear locks at the event level in global task.
|
||||||
* Can I get rid of these using shutdown events? XXX
|
* Can I get rid of these using shutdown events? XXX
|
||||||
@@ -493,7 +495,7 @@ check_result(isc_result_t result, const char *msg) {
|
|||||||
* of finding the answer the user is looking for
|
* of finding the answer the user is looking for
|
||||||
*/
|
*/
|
||||||
dig_server_t *
|
dig_server_t *
|
||||||
make_server(const char *servname) {
|
make_server(const char *servname, const char *userarg) {
|
||||||
dig_server_t *srv;
|
dig_server_t *srv;
|
||||||
|
|
||||||
REQUIRE(servname != NULL);
|
REQUIRE(servname != NULL);
|
||||||
@@ -504,10 +506,13 @@ make_server(const char *servname) {
|
|||||||
fatal("memory allocation failure in %s:%d",
|
fatal("memory allocation failure in %s:%d",
|
||||||
__FILE__, __LINE__);
|
__FILE__, __LINE__);
|
||||||
strncpy(srv->servername, servname, MXNAME);
|
strncpy(srv->servername, servname, MXNAME);
|
||||||
|
strncpy(srv->userarg, userarg, MXNAME);
|
||||||
srv->servername[MXNAME-1] = 0;
|
srv->servername[MXNAME-1] = 0;
|
||||||
|
srv->userarg[MXNAME-1] = 0;
|
||||||
ISC_LINK_INIT(srv, link);
|
ISC_LINK_INIT(srv, link);
|
||||||
return (srv);
|
return (srv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
addr2af(int lwresaddrtype)
|
addr2af(int lwresaddrtype)
|
||||||
{
|
{
|
||||||
@@ -525,6 +530,7 @@ addr2af(int lwresaddrtype)
|
|||||||
|
|
||||||
return (af);
|
return (af);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a copy of the server list from the lwres configuration structure.
|
* Create a copy of the server list from the lwres configuration structure.
|
||||||
* The dest list must have already had ISC_LIST_INIT applied.
|
* The dest list must have already had ISC_LIST_INIT applied.
|
||||||
@@ -542,11 +548,12 @@ copy_server_list(lwres_conf_t *confdata, dig_serverlist_t *dest) {
|
|||||||
|
|
||||||
lwres_net_ntop(af, confdata->nameservers[i].address,
|
lwres_net_ntop(af, confdata->nameservers[i].address,
|
||||||
tmp, sizeof(tmp));
|
tmp, sizeof(tmp));
|
||||||
newsrv = make_server(tmp);
|
newsrv = make_server(tmp, tmp);
|
||||||
ISC_LINK_INIT(newsrv, link);
|
ISC_LINK_INIT(newsrv, link);
|
||||||
ISC_LIST_ENQUEUE(*dest, newsrv, link);
|
ISC_LIST_ENQUEUE(*dest, newsrv, link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
flush_server_list(void) {
|
flush_server_list(void) {
|
||||||
dig_server_t *s, *ps;
|
dig_server_t *s, *ps;
|
||||||
@@ -560,18 +567,35 @@ flush_server_list(void) {
|
|||||||
isc_mem_free(mctx, ps);
|
isc_mem_free(mctx, ps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
set_nameserver(char *opt) {
|
set_nameserver(char *opt) {
|
||||||
|
isc_result_t result;
|
||||||
|
isc_sockaddr_t sockaddrs[DIG_MAX_ADDRESSES];
|
||||||
|
isc_netaddr_t netaddr;
|
||||||
|
unsigned int count, i;
|
||||||
dig_server_t *srv;
|
dig_server_t *srv;
|
||||||
|
char tmp[ISC_NETADDR_FORMATSIZE];
|
||||||
|
|
||||||
if (opt == NULL)
|
if (opt == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
result = bind9_getaddresses(opt, 0, sockaddrs,
|
||||||
|
DIG_MAX_ADDRESSES, &count);
|
||||||
|
if (result != ISC_R_SUCCESS)
|
||||||
|
fatal("couldn't get address for '%s': %s",
|
||||||
|
opt, isc_result_totext(result));
|
||||||
|
|
||||||
flush_server_list();
|
flush_server_list();
|
||||||
srv = make_server(opt);
|
|
||||||
if (srv == NULL)
|
for (i = 0; i < count; i++) {
|
||||||
fatal("memory allocation failure");
|
isc_netaddr_fromsockaddr(&netaddr, &sockaddrs[i]);
|
||||||
ISC_LIST_INITANDAPPEND(server_list, srv, link);
|
isc_netaddr_format(&netaddr, tmp, sizeof(tmp));
|
||||||
|
srv = make_server(tmp, opt);
|
||||||
|
if (srv == NULL)
|
||||||
|
fatal("memory allocation failure");
|
||||||
|
ISC_LIST_APPEND(server_list, srv, link);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static isc_result_t
|
static isc_result_t
|
||||||
@@ -613,7 +637,7 @@ clone_server_list(dig_serverlist_t src, dig_serverlist_t *dest) {
|
|||||||
debug("clone_server_list()");
|
debug("clone_server_list()");
|
||||||
srv = ISC_LIST_HEAD(src);
|
srv = ISC_LIST_HEAD(src);
|
||||||
while (srv != NULL) {
|
while (srv != NULL) {
|
||||||
newsrv = make_server(srv->servername);
|
newsrv = make_server(srv->servername, srv->userarg);
|
||||||
ISC_LINK_INIT(newsrv, link);
|
ISC_LINK_INIT(newsrv, link);
|
||||||
ISC_LIST_ENQUEUE(*dest, newsrv, link);
|
ISC_LIST_ENQUEUE(*dest, newsrv, link);
|
||||||
srv = ISC_LIST_NEXT(srv, link);
|
srv = ISC_LIST_NEXT(srv, link);
|
||||||
@@ -1436,7 +1460,7 @@ followup_lookup(dns_message_t *msg, dig_query_t *query, dns_section_t section)
|
|||||||
query->lookup->ns_search_only;
|
query->lookup->ns_search_only;
|
||||||
lookup->trace_root = ISC_FALSE;
|
lookup->trace_root = ISC_FALSE;
|
||||||
}
|
}
|
||||||
srv = make_server(namestr);
|
srv = make_server(namestr, namestr);
|
||||||
debug("adding server %s", srv->servername);
|
debug("adding server %s", srv->servername);
|
||||||
ISC_LIST_APPEND(lookup->my_server_list, srv, link);
|
ISC_LIST_APPEND(lookup->my_server_list, srv, link);
|
||||||
dns_rdata_reset(&rdata);
|
dns_rdata_reset(&rdata);
|
||||||
@@ -1800,6 +1824,7 @@ setup_lookup(dig_lookup_t *lookup) {
|
|||||||
query->first_rr_serial = 0;
|
query->first_rr_serial = 0;
|
||||||
query->second_rr_serial = 0;
|
query->second_rr_serial = 0;
|
||||||
query->servname = serv->servername;
|
query->servname = serv->servername;
|
||||||
|
query->userarg = serv->userarg;
|
||||||
query->rr_count = 0;
|
query->rr_count = 0;
|
||||||
query->msg_count = 0;
|
query->msg_count = 0;
|
||||||
ISC_LINK_INIT(query, link);
|
ISC_LINK_INIT(query, link);
|
||||||
@@ -3688,7 +3713,7 @@ prepare_lookup(dns_name_t *name)
|
|||||||
dns_rdata_reset(&aaaa);
|
dns_rdata_reset(&aaaa);
|
||||||
|
|
||||||
|
|
||||||
srv = make_server(namestr);
|
srv = make_server(namestr, namestr);
|
||||||
|
|
||||||
ISC_LIST_APPEND(lookup->my_server_list,
|
ISC_LIST_APPEND(lookup->my_server_list,
|
||||||
srv, link);
|
srv, link);
|
||||||
@@ -3718,7 +3743,7 @@ prepare_lookup(dns_name_t *name)
|
|||||||
printf("ns name: %s\n", namestr);
|
printf("ns name: %s\n", namestr);
|
||||||
|
|
||||||
|
|
||||||
srv = make_server(namestr);
|
srv = make_server(namestr, namestr);
|
||||||
|
|
||||||
ISC_LIST_APPEND(lookup->my_server_list,
|
ISC_LIST_APPEND(lookup->my_server_list,
|
||||||
srv, link);
|
srv, link);
|
||||||
@@ -3730,7 +3755,7 @@ prepare_lookup(dns_name_t *name)
|
|||||||
printf("ns name: ");
|
printf("ns name: ");
|
||||||
dns_name_print(&ns.name, stdout);
|
dns_name_print(&ns.name, stdout);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
srv = make_server(namestr);
|
srv = make_server(namestr, namestr);
|
||||||
|
|
||||||
ISC_LIST_APPEND(lookup->my_server_list, srv, link);
|
ISC_LIST_APPEND(lookup->my_server_list, srv, link);
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: host.c,v 1.97 2004/04/13 02:54:14 marka Exp $ */
|
/* $Id: host.c,v 1.98 2004/09/06 01:24:43 marka Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
@@ -386,7 +386,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
|
|||||||
char sockstr[ISC_SOCKADDR_FORMATSIZE];
|
char sockstr[ISC_SOCKADDR_FORMATSIZE];
|
||||||
|
|
||||||
printf("Using domain server:\n");
|
printf("Using domain server:\n");
|
||||||
printf("Name: %s\n", query->servname);
|
printf("Name: %s\n", query->userarg);
|
||||||
isc_sockaddr_format(&query->sockaddr, sockstr,
|
isc_sockaddr_format(&query->sockaddr, sockstr,
|
||||||
sizeof(sockstr));
|
sizeof(sockstr));
|
||||||
printf("Address: %s\n", sockstr);
|
printf("Address: %s\n", sockstr);
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: dig.h,v 1.85 2004/06/19 02:23:36 sra Exp $ */
|
/* $Id: dig.h,v 1.86 2004/09/06 01:24:44 marka Exp $ */
|
||||||
|
|
||||||
#ifndef DIG_H
|
#ifndef DIG_H
|
||||||
#define DIG_H
|
#define DIG_H
|
||||||
@@ -192,6 +192,7 @@ struct dig_query {
|
|||||||
isc_uint32_t msg_count;
|
isc_uint32_t msg_count;
|
||||||
isc_uint32_t rr_count;
|
isc_uint32_t rr_count;
|
||||||
char *servname;
|
char *servname;
|
||||||
|
char *userarg;
|
||||||
isc_bufferlist_t sendlist,
|
isc_bufferlist_t sendlist,
|
||||||
recvlist,
|
recvlist,
|
||||||
lengthlist;
|
lengthlist;
|
||||||
@@ -209,6 +210,7 @@ struct dig_query {
|
|||||||
|
|
||||||
struct dig_server {
|
struct dig_server {
|
||||||
char servername[MXNAME];
|
char servername[MXNAME];
|
||||||
|
char userarg[MXNAME];
|
||||||
ISC_LINK(dig_server_t) link;
|
ISC_LINK(dig_server_t) link;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -272,7 +274,7 @@ dig_lookup_t *
|
|||||||
clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers);
|
clone_lookup(dig_lookup_t *lookold, isc_boolean_t servers);
|
||||||
|
|
||||||
dig_server_t *
|
dig_server_t *
|
||||||
make_server(const char *servname);
|
make_server(const char *servname, const char *userarg);
|
||||||
|
|
||||||
void
|
void
|
||||||
flush_server_list(void);
|
flush_server_list(void);
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: nslookup.c,v 1.106 2004/08/19 07:02:42 marka Exp $ */
|
/* $Id: nslookup.c,v 1.107 2004/09/06 01:24:43 marka Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
@@ -402,7 +402,7 @@ printmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {
|
|||||||
debug("printmessage()");
|
debug("printmessage()");
|
||||||
|
|
||||||
isc_sockaddr_format(&query->sockaddr, servtext, sizeof(servtext));
|
isc_sockaddr_format(&query->sockaddr, servtext, sizeof(servtext));
|
||||||
printf("Server:\t\t%s\n", query->servname);
|
printf("Server:\t\t%s\n", query->userarg);
|
||||||
printf("Address:\t%s\n", servtext);
|
printf("Address:\t%s\n", servtext);
|
||||||
|
|
||||||
puts("");
|
puts("");
|
||||||
@@ -461,7 +461,7 @@ show_settings(isc_boolean_t full, isc_boolean_t serv_only) {
|
|||||||
get_address(srv->servername, port, &sockaddr);
|
get_address(srv->servername, port, &sockaddr);
|
||||||
isc_sockaddr_format(&sockaddr, sockstr, sizeof(sockstr));
|
isc_sockaddr_format(&sockaddr, sockstr, sizeof(sockstr));
|
||||||
printf("Default server: %s\nAddress: %s\n",
|
printf("Default server: %s\nAddress: %s\n",
|
||||||
srv->servername, sockstr);
|
srv->userarg, sockstr);
|
||||||
if (!full)
|
if (!full)
|
||||||
return;
|
return;
|
||||||
srv = ISC_LIST_NEXT(srv, link);
|
srv = ISC_LIST_NEXT(srv, link);
|
||||||
@@ -738,7 +738,9 @@ get_next_command(void) {
|
|||||||
setoption(arg);
|
setoption(arg);
|
||||||
else if ((strcasecmp(ptr, "server") == 0) ||
|
else if ((strcasecmp(ptr, "server") == 0) ||
|
||||||
(strcasecmp(ptr, "lserver") == 0)) {
|
(strcasecmp(ptr, "lserver") == 0)) {
|
||||||
|
isc_app_block();
|
||||||
set_nameserver(arg);
|
set_nameserver(arg);
|
||||||
|
isc_app_unblock();
|
||||||
show_settings(ISC_TRUE, ISC_TRUE);
|
show_settings(ISC_TRUE, ISC_TRUE);
|
||||||
} else if (strcasecmp(ptr, "exit") == 0) {
|
} else if (strcasecmp(ptr, "exit") == 0) {
|
||||||
in_use = ISC_FALSE;
|
in_use = ISC_FALSE;
|
||||||
|
Reference in New Issue
Block a user