mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-14 09:09:59 -04:00
4501. [bug] Fix 'dig -4 -6'/'dig -6 -4' error handling. [RT #43259]
This commit is contained in:
parent
efb91beba1
commit
ee77245897
7 changed files with 73 additions and 27 deletions
2
CHANGES
2
CHANGES
|
|
@ -1,3 +1,5 @@
|
|||
4501. [bug] Fix 'dig -4 -6'/'dig -6 -4' error handling. [RT #43259]
|
||||
|
||||
4500. [bug] Support modifier I64 in isc__print_printf. [RT #43526]
|
||||
|
||||
4499. [port] MacOSX: silence deprecated function warning
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ static char domainopt[DNS_NAME_MAXTEXT];
|
|||
static isc_boolean_t short_form = ISC_FALSE, printcmd = ISC_TRUE,
|
||||
ip6_int = ISC_FALSE, plusquest = ISC_FALSE, pluscomm = ISC_FALSE,
|
||||
multiline = ISC_FALSE, nottl = ISC_FALSE, noclass = ISC_FALSE,
|
||||
onesoa = ISC_FALSE;
|
||||
onesoa = ISC_FALSE, ipv4only = ISC_FALSE, ipv6only = ISC_FALSE;
|
||||
static isc_uint32_t splitwidth = 0xffffffff;
|
||||
|
||||
/*% rrcomments are neither explicitly enabled nor disabled by default */
|
||||
|
|
@ -1540,11 +1540,22 @@ preparse_args(int argc, char **argv) {
|
|||
continue;
|
||||
option = &rv[0][1];
|
||||
while (strpbrk(option, single_dash_opts) == &option[0]) {
|
||||
if (option[0] == 'm') {
|
||||
switch (option[0]) {
|
||||
case 'm':
|
||||
memdebugging = ISC_TRUE;
|
||||
isc_mem_debugging = ISC_MEM_DEBUGTRACE |
|
||||
ISC_MEM_DEBUGRECORD;
|
||||
return;
|
||||
break;
|
||||
case '4':
|
||||
if (ipv6only)
|
||||
fatal("only one of -4 and -6 allowed");
|
||||
ipv4only = ISC_TRUE;
|
||||
break;
|
||||
case '6':
|
||||
if (ipv4only)
|
||||
fatal("only one of -4 and -6 allowed");
|
||||
ipv6only = ISC_TRUE;
|
||||
break;
|
||||
}
|
||||
option = &option[1];
|
||||
}
|
||||
|
|
@ -1906,13 +1917,17 @@ main(int argc, char **argv) {
|
|||
ISC_LIST_INIT(search_list);
|
||||
|
||||
debug("main()");
|
||||
preparse_args(argc, argv);
|
||||
progname = argv[0];
|
||||
preparse_args(argc, argv);
|
||||
result = isc_app_start();
|
||||
check_result(result, "isc_app_start");
|
||||
setup_libs();
|
||||
setup_system(ipv4only, ipv6only);
|
||||
parse_args(ISC_FALSE, ISC_FALSE, argc, argv);
|
||||
setup_system();
|
||||
if (keyfile[0] != 0)
|
||||
setup_file_key();
|
||||
else if (keysecret[0] != 0)
|
||||
setup_text_key();
|
||||
if (domainopt[0] != '\0') {
|
||||
set_search_domain(domainopt);
|
||||
usesearch = ISC_TRUE;
|
||||
|
|
|
|||
|
|
@ -934,7 +934,7 @@ requeue_lookup(dig_lookup_t *lookold, isc_boolean_t servers) {
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
void
|
||||
setup_text_key(void) {
|
||||
isc_result_t result;
|
||||
dns_name_t keyname;
|
||||
|
|
@ -1121,7 +1121,7 @@ read_confkey(void) {
|
|||
return (result);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
setup_file_key(void) {
|
||||
isc_result_t result;
|
||||
dst_key_t *dstkey = NULL;
|
||||
|
|
@ -1224,13 +1224,31 @@ create_search_list(lwres_conf_t *confdata) {
|
|||
* settings.
|
||||
*/
|
||||
void
|
||||
setup_system(void) {
|
||||
setup_system(isc_boolean_t ipv4only, isc_boolean_t ipv6only) {
|
||||
dig_searchlist_t *domain = NULL;
|
||||
lwres_result_t lwresult;
|
||||
unsigned int lwresflags;
|
||||
|
||||
debug("setup_system()");
|
||||
|
||||
if (ipv4only) {
|
||||
if (have_ipv4) {
|
||||
isc_net_disableipv6();
|
||||
have_ipv6 = ISC_FALSE;
|
||||
} else {
|
||||
fatal("can't find IPv4 networking");
|
||||
}
|
||||
}
|
||||
|
||||
if (ipv6only) {
|
||||
if (have_ipv6) {
|
||||
isc_net_disableipv4();
|
||||
have_ipv4 = ISC_FALSE;
|
||||
} else {
|
||||
fatal("can't find IPv6 networking");
|
||||
}
|
||||
}
|
||||
|
||||
lwresflags = LWRES_CONTEXT_SERVERMODE;
|
||||
if (have_ipv4)
|
||||
lwresflags |= LWRES_CONTEXT_USEIPV4;
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ static int seen_error = -1;
|
|||
static isc_boolean_t list_addresses = ISC_TRUE;
|
||||
static dns_rdatatype_t list_type = dns_rdatatype_a;
|
||||
static isc_boolean_t printed_server = ISC_FALSE;
|
||||
static isc_boolean_t ipv4only = ISC_FALSE, ipv6only = ISC_FALSE;
|
||||
|
||||
static const char *opcodetext[] = {
|
||||
"QUERY",
|
||||
|
|
@ -628,8 +629,16 @@ pre_parse_args(int argc, char **argv) {
|
|||
isc_mem_debugging |= ISC_MEM_DEBUGUSAGE;
|
||||
break;
|
||||
|
||||
case '4': break;
|
||||
case '6': break;
|
||||
case '4':
|
||||
if (ipv6only)
|
||||
fatal("only one of -4 and -6 allowed");
|
||||
ipv4only = ISC_TRUE;
|
||||
break;
|
||||
case '6':
|
||||
if (ipv4only)
|
||||
fatal("only one of -4 and -6 allowed");
|
||||
ipv6only = ISC_TRUE;
|
||||
break;
|
||||
case 'a': break;
|
||||
case 'c': break;
|
||||
case 'd': break;
|
||||
|
|
@ -823,18 +832,10 @@ parse_args(isc_boolean_t is_batchfile, int argc, char **argv) {
|
|||
/* Handled by pre_parse_args(). */
|
||||
break;
|
||||
case '4':
|
||||
if (have_ipv4) {
|
||||
isc_net_disableipv6();
|
||||
have_ipv6 = ISC_FALSE;
|
||||
} else
|
||||
fatal("can't find IPv4 networking");
|
||||
/* Handled by pre_parse_args(). */
|
||||
break;
|
||||
case '6':
|
||||
if (have_ipv6) {
|
||||
isc_net_disableipv4();
|
||||
have_ipv4 = ISC_FALSE;
|
||||
} else
|
||||
fatal("can't find IPv6 networking");
|
||||
/* Handled by pre_parse_args(). */
|
||||
break;
|
||||
case 's':
|
||||
lookup->servfail_stops = ISC_TRUE;
|
||||
|
|
@ -894,8 +895,12 @@ main(int argc, char **argv) {
|
|||
result = isc_app_start();
|
||||
check_result(result, "isc_app_start");
|
||||
setup_libs();
|
||||
setup_system(ipv4only, ipv6only);
|
||||
parse_args(ISC_FALSE, argc, argv);
|
||||
setup_system();
|
||||
if (keyfile[0] != 0)
|
||||
setup_file_key();
|
||||
else if (keysecret[0] != 0)
|
||||
setup_text_key();
|
||||
result = isc_app_onrun(mctx, global_task, onrun_callback, NULL);
|
||||
check_result(result, "isc_app_onrun");
|
||||
isc_app_run();
|
||||
|
|
|
|||
|
|
@ -331,7 +331,7 @@ void
|
|||
setup_libs(void);
|
||||
|
||||
void
|
||||
setup_system(void);
|
||||
setup_system(isc_boolean_t ipv4only, isc_boolean_t ipv6only);
|
||||
|
||||
isc_result_t
|
||||
parse_uint(isc_uint32_t *uip, const char *value, isc_uint32_t max,
|
||||
|
|
@ -416,6 +416,9 @@ void
|
|||
chase_sig(dns_message_t *msg);
|
||||
#endif
|
||||
|
||||
void setup_file_key(void);
|
||||
void setup_text_key(void);
|
||||
|
||||
ISC_LANG_ENDDECLS
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -914,9 +914,12 @@ main(int argc, char **argv) {
|
|||
setup_libs();
|
||||
progname = argv[0];
|
||||
|
||||
setup_system(ISC_FALSE, ISC_FALSE);
|
||||
parse_args(argc, argv);
|
||||
|
||||
setup_system();
|
||||
if (keyfile[0] != 0)
|
||||
setup_file_key();
|
||||
else if (keysecret[0] != 0)
|
||||
setup_text_key();
|
||||
if (domainopt[0] != '\0')
|
||||
set_search_domain(domainopt);
|
||||
if (in_use)
|
||||
|
|
|
|||
|
|
@ -344,9 +344,9 @@ if [ -n "${DELV}" -a -x "${DELV}" ] ; then
|
|||
test "${f:-0}" -eq 4 || ret=1
|
||||
if [ $ret != 0 ]; then echo "I:failed"; fi
|
||||
status=`expr $status + $ret`
|
||||
|
||||
echo "I:exit status: $status"
|
||||
[ $status -eq 0 ] || exit 1
|
||||
else
|
||||
echo "${DELV:-delv} is not available, so skipping these delv tests"
|
||||
fi
|
||||
|
||||
echo "I:exit status: $status"
|
||||
[ $status -eq 0 ] || exit 1
|
||||
|
|
|
|||
Loading…
Reference in a new issue