mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-02 07:35:26 +00:00
1120. [bug] dig only accept valid abbreviations of +options.
This commit is contained in:
2
CHANGES
2
CHANGES
@@ -1,3 +1,5 @@
|
|||||||
|
1120. [bug] dig only accept valid abbreviations of +options.
|
||||||
|
|
||||||
1109. [bug] nsupdate accepted illegal ttl values.
|
1109. [bug] nsupdate accepted illegal ttl values.
|
||||||
|
|
||||||
1108. [bug] On Win32 rndc was hanging when named was not running.
|
1108. [bug] On Win32 rndc was hanging when named was not running.
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: dig.c,v 1.169 2001/10/31 20:39:37 gson Exp $ */
|
/* $Id: dig.c,v 1.170 2001/11/07 05:40:48 marka Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -635,18 +635,36 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
cmd += 2;
|
cmd += 2;
|
||||||
state = ISC_FALSE;
|
state = ISC_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define FULLCHECK(A) \
|
||||||
|
do { \
|
||||||
|
size_t _l = strlen(cmd); \
|
||||||
|
if (_l >= sizeof(A) || strncasecmp(cmd, A, _l) != 0) \
|
||||||
|
goto invalid_option; \
|
||||||
|
} while (0)
|
||||||
|
#define FULLCHECK2(A, B) \
|
||||||
|
do { \
|
||||||
|
size_t _l = strlen(cmd); \
|
||||||
|
if ((_l >= sizeof(A) || strncasecmp(cmd, A, _l) != 0) && \
|
||||||
|
(_l >= sizeof(B) || strncasecmp(cmd, B, _l) != 0)) \
|
||||||
|
goto invalid_option; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
switch (cmd[0]) {
|
switch (cmd[0]) {
|
||||||
case 'a':
|
case 'a':
|
||||||
switch (cmd[1]) {
|
switch (cmd[1]) {
|
||||||
case 'a': /* aaflag */
|
case 'a': /* aaflag */
|
||||||
|
FULLCHECK("aaflag");
|
||||||
lookup->aaonly = state;
|
lookup->aaonly = state;
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
switch (cmd[2]) {
|
switch (cmd[2]) {
|
||||||
case 'd': /* additional */
|
case 'd': /* additional */
|
||||||
|
FULLCHECK("additional");
|
||||||
lookup->section_additional = state;
|
lookup->section_additional = state;
|
||||||
break;
|
break;
|
||||||
case 'f': /* adflag */
|
case 'f': /* adflag */
|
||||||
|
FULLCHECK("adflag");
|
||||||
lookup->adflag = state;
|
lookup->adflag = state;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -654,6 +672,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'l': /* all */
|
case 'l': /* all */
|
||||||
|
FULLCHECK("all");
|
||||||
lookup->section_question = state;
|
lookup->section_question = state;
|
||||||
lookup->section_authority = state;
|
lookup->section_authority = state;
|
||||||
lookup->section_answer = state;
|
lookup->section_answer = state;
|
||||||
@@ -663,9 +682,11 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
printcmd = state;
|
printcmd = state;
|
||||||
break;
|
break;
|
||||||
case 'n': /* answer */
|
case 'n': /* answer */
|
||||||
|
FULLCHECK("answer");
|
||||||
lookup->section_answer = state;
|
lookup->section_answer = state;
|
||||||
break;
|
break;
|
||||||
case 'u': /* authority */
|
case 'u': /* authority */
|
||||||
|
FULLCHECK("authority");
|
||||||
lookup->section_authority = state;
|
lookup->section_authority = state;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -675,9 +696,11 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
case 'b':
|
case 'b':
|
||||||
switch (cmd[1]) {
|
switch (cmd[1]) {
|
||||||
case 'e':/* besteffort */
|
case 'e':/* besteffort */
|
||||||
|
FULLCHECK("besteffort");
|
||||||
lookup->besteffort = state;
|
lookup->besteffort = state;
|
||||||
break;
|
break;
|
||||||
case 'u':/* bufsize */
|
case 'u':/* bufsize */
|
||||||
|
FULLCHECK("bufsize");
|
||||||
if (value == NULL)
|
if (value == NULL)
|
||||||
goto need_value;
|
goto need_value;
|
||||||
if (!state)
|
if (!state)
|
||||||
@@ -694,12 +717,15 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
case 'c':
|
case 'c':
|
||||||
switch (cmd[1]) {
|
switch (cmd[1]) {
|
||||||
case 'd':/* cdflag */
|
case 'd':/* cdflag */
|
||||||
|
FULLCHECK("cdflag");
|
||||||
lookup->cdflag = state;
|
lookup->cdflag = state;
|
||||||
break;
|
break;
|
||||||
case 'm': /* cmd */
|
case 'm': /* cmd */
|
||||||
|
FULLCHECK("cmd");
|
||||||
printcmd = state;
|
printcmd = state;
|
||||||
break;
|
break;
|
||||||
case 'o': /* comments */
|
case 'o': /* comments */
|
||||||
|
FULLCHECK("comments");
|
||||||
lookup->comments = state;
|
lookup->comments = state;
|
||||||
if (lookup == default_lookup)
|
if (lookup == default_lookup)
|
||||||
pluscomm = state;
|
pluscomm = state;
|
||||||
@@ -711,12 +737,15 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
case 'd':
|
case 'd':
|
||||||
switch (cmd[1]) {
|
switch (cmd[1]) {
|
||||||
case 'e': /* defname */
|
case 'e': /* defname */
|
||||||
|
FULLCHECK("defname");
|
||||||
usesearch = state;
|
usesearch = state;
|
||||||
break;
|
break;
|
||||||
case 'n': /* dnssec */
|
case 'n': /* dnssec */
|
||||||
|
FULLCHECK("dnssec");
|
||||||
lookup->dnssec = state;
|
lookup->dnssec = state;
|
||||||
break;
|
break;
|
||||||
case 'o': /* domain */
|
case 'o': /* domain */
|
||||||
|
FULLCHECK("domain");
|
||||||
if (value == NULL)
|
if (value == NULL)
|
||||||
goto need_value;
|
goto need_value;
|
||||||
if (!state)
|
if (!state)
|
||||||
@@ -729,24 +758,29 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'f': /* fail */
|
case 'f': /* fail */
|
||||||
|
FULLCHECK("fail");
|
||||||
lookup->servfail_stops = state;
|
lookup->servfail_stops = state;
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
switch (cmd[1]) {
|
switch (cmd[1]) {
|
||||||
case 'd': /* identify */
|
case 'd': /* identify */
|
||||||
|
FULLCHECK("identify");
|
||||||
lookup->identify = state;
|
lookup->identify = state;
|
||||||
break;
|
break;
|
||||||
case 'g': /* ignore */
|
case 'g': /* ignore */
|
||||||
default: /* Inherets default for compatibility */
|
default: /* Inherets default for compatibility */
|
||||||
|
FULLCHECK("ignore");
|
||||||
lookup->ignore = ISC_TRUE;
|
lookup->ignore = ISC_TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'm': /* multiline */
|
case 'm': /* multiline */
|
||||||
|
FULLCHECK("multiline");
|
||||||
multiline = state;
|
multiline = state;
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
switch (cmd[1]) {
|
switch (cmd[1]) {
|
||||||
case 'd': /* ndots */
|
case 'd': /* ndots */
|
||||||
|
FULLCHECK("ndots");
|
||||||
if (value == NULL)
|
if (value == NULL)
|
||||||
goto need_value;
|
goto need_value;
|
||||||
if (!state)
|
if (!state)
|
||||||
@@ -754,6 +788,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
ndots = parse_uint(value, "ndots", MAXNDOTS);
|
ndots = parse_uint(value, "ndots", MAXNDOTS);
|
||||||
break;
|
break;
|
||||||
case 's': /* nssearch */
|
case 's': /* nssearch */
|
||||||
|
FULLCHECK("nssearch");
|
||||||
lookup->ns_search_only = state;
|
lookup->ns_search_only = state;
|
||||||
if (state) {
|
if (state) {
|
||||||
lookup->trace_root = ISC_TRUE;
|
lookup->trace_root = ISC_TRUE;
|
||||||
@@ -776,9 +811,11 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
case 'q':
|
case 'q':
|
||||||
switch (cmd[1]) {
|
switch (cmd[1]) {
|
||||||
case 'r': /* qr */
|
case 'r': /* qr */
|
||||||
|
FULLCHECK("qr");
|
||||||
qr = state;
|
qr = state;
|
||||||
break;
|
break;
|
||||||
case 'u': /* question */
|
case 'u': /* question */
|
||||||
|
FULLCHECK("question");
|
||||||
lookup->section_question = state;
|
lookup->section_question = state;
|
||||||
if (lookup == default_lookup)
|
if (lookup == default_lookup)
|
||||||
plusquest = state;
|
plusquest = state;
|
||||||
@@ -792,9 +829,11 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
case 'e':
|
case 'e':
|
||||||
switch (cmd[2]) {
|
switch (cmd[2]) {
|
||||||
case 'c': /* recurse */
|
case 'c': /* recurse */
|
||||||
|
FULLCHECK("recurse");
|
||||||
lookup->recurse = state;
|
lookup->recurse = state;
|
||||||
break;
|
break;
|
||||||
case 't': /* retry / retries */
|
case 't': /* retry / retries */
|
||||||
|
FULLCHECK2("retry", "retries");
|
||||||
if (value == NULL)
|
if (value == NULL)
|
||||||
goto need_value;
|
goto need_value;
|
||||||
if (!state)
|
if (!state)
|
||||||
@@ -814,9 +853,11 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
case 's':
|
case 's':
|
||||||
switch (cmd[1]) {
|
switch (cmd[1]) {
|
||||||
case 'e': /* search */
|
case 'e': /* search */
|
||||||
|
FULLCHECK("search");
|
||||||
usesearch = state;
|
usesearch = state;
|
||||||
break;
|
break;
|
||||||
case 'h': /* short */
|
case 'h': /* short */
|
||||||
|
FULLCHECK("short");
|
||||||
short_form = state;
|
short_form = state;
|
||||||
if (state) {
|
if (state) {
|
||||||
printcmd = ISC_FALSE;
|
printcmd = ISC_FALSE;
|
||||||
@@ -829,6 +870,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 't': /* stats */
|
case 't': /* stats */
|
||||||
|
FULLCHECK("stats");
|
||||||
lookup->stats = state;
|
lookup->stats = state;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -838,10 +880,12 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
case 't':
|
case 't':
|
||||||
switch (cmd[1]) {
|
switch (cmd[1]) {
|
||||||
case 'c': /* tcp */
|
case 'c': /* tcp */
|
||||||
|
FULLCHECK("tcp");
|
||||||
if (!is_batchfile)
|
if (!is_batchfile)
|
||||||
lookup->tcp_mode = state;
|
lookup->tcp_mode = state;
|
||||||
break;
|
break;
|
||||||
case 'i': /* timeout */
|
case 'i': /* timeout */
|
||||||
|
FULLCHECK("timeout");
|
||||||
if (value == NULL)
|
if (value == NULL)
|
||||||
goto need_value;
|
goto need_value;
|
||||||
if (!state)
|
if (!state)
|
||||||
@@ -853,6 +897,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
case 'r':
|
case 'r':
|
||||||
switch (cmd[2]) {
|
switch (cmd[2]) {
|
||||||
case 'a': /* trace */
|
case 'a': /* trace */
|
||||||
|
FULLCHECK("trace");
|
||||||
lookup->trace = state;
|
lookup->trace = state;
|
||||||
lookup->trace_root = state;
|
lookup->trace_root = state;
|
||||||
if (state) {
|
if (state) {
|
||||||
@@ -866,6 +911,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'i': /* tries */
|
case 'i': /* tries */
|
||||||
|
FULLCHECK("tries");
|
||||||
if (value == NULL)
|
if (value == NULL)
|
||||||
goto need_value;
|
goto need_value;
|
||||||
if (!state)
|
if (!state)
|
||||||
@@ -884,6 +930,7 @@ plus_option(char *option, isc_boolean_t is_batchfile,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
|
FULLCHECK("vc");
|
||||||
if (!is_batchfile)
|
if (!is_batchfile)
|
||||||
lookup->tcp_mode = state;
|
lookup->tcp_mode = state;
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user