2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-02 15:45:25 +00:00

327. [bug] rndc.conf parser wasn't correctly recognising an IP

address where a host specification was required.
This commit is contained in:
James Brister
2000-07-11 20:13:09 +00:00
parent 838f13fbdc
commit f4d9f465cd
2 changed files with 49 additions and 44 deletions

View File

@@ -1,3 +1,6 @@
327. [bug] rndc.conf parser wasn't correctly recognising an IP
address where a host specification was required.
326. [func] 'keys' in an 'inet' control statement is now 326. [func] 'keys' in an 'inet' control statement is now
required and must have at least one item in it. required and must have at least one item in it.

View File

@@ -15,7 +15,7 @@
* SOFTWARE. * SOFTWARE.
*/ */
/* $Id: confndc.c,v 1.20 2000/07/10 11:27:11 tale Exp $ */ /* $Id: confndc.c,v 1.21 2000/07/11 20:13:09 brister Exp $ */
/* /*
** options { ** options {
@@ -144,51 +144,39 @@ static struct keywordtoken misc_tokens[] = {
static isc_result_t static isc_result_t parse_file(ndcpcontext *pctx, dns_c_ndcctx_t **context);
parse_file(ndcpcontext *pctx, dns_c_ndcctx_t **context);
static isc_result_t static isc_result_t parse_statement(ndcpcontext *pctx);
parse_statement(ndcpcontext *pctx); static isc_result_t parse_options(ndcpcontext *pctx, dns_c_ndcopts_t **opts);
static isc_result_t static isc_result_t parse_serverstmt(ndcpcontext *pctx, dns_c_ndcserver_t **server);
parse_options(ndcpcontext *pctx, dns_c_ndcopts_t **opts); static isc_result_t parse_keystmt(ndcpcontext *pctx, dns_c_kdeflist_t *keys);
static isc_result_t
parse_serverstmt(ndcpcontext *pctx, dns_c_ndcserver_t **server);
static isc_result_t
parse_keystmt(ndcpcontext *pctx, dns_c_kdeflist_t *keys);
static const char * static const char * keyword2str(isc_int32_t val);
keyword2str(isc_int32_t val); static isc_boolean_t eat(ndcpcontext *pctx, isc_uint32_t token);
static isc_boolean_t static isc_boolean_t eat_eos(ndcpcontext *pctx);
eat(ndcpcontext *pctx, isc_uint32_t token); static isc_boolean_t eat_lbrace(ndcpcontext *pctx);
static isc_boolean_t static isc_boolean_t eat_rbrace(ndcpcontext *pctx);
eat_eos(ndcpcontext *pctx);
static isc_boolean_t
eat_lbrace(ndcpcontext *pctx);
static isc_boolean_t
eat_rbrace(ndcpcontext *pctx);
static isc_boolean_t static isc_boolean_t looking_at(ndcpcontext *pctx, isc_uint32_t token);
looking_at(ndcpcontext *pctx, isc_uint32_t token); static isc_boolean_t looking_at_anystring(ndcpcontext *pctx);
static isc_boolean_t
looking_at_anystring(ndcpcontext *pctx);
static isc_result_t static isc_boolean_t looking_at_stringoripaddr(ndcpcontext *pctx);
parser_setup(ndcpcontext *pctx, isc_mem_t *mem, const char *filename);
static void
parser_complain(isc_boolean_t is_warning, isc_boolean_t print_last_token, static isc_result_t parser_setup(ndcpcontext *pctx, isc_mem_t *mem,
ndcpcontext *pctx, const char *format, va_list args); const char *filename);
static void static void parser_complain(isc_boolean_t is_warning,
parser_error(ndcpcontext *pctx, isc_boolean_t lasttoken, const char *fmt, ...); isc_boolean_t print_last_token,
static void ndcpcontext *pctx, const char *format,
parser_warn(ndcpcontext *pctx, isc_boolean_t lasttoken, const char *fmt, ...); va_list args);
static isc_boolean_t static void parser_error(ndcpcontext *pctx, isc_boolean_t lasttoken,
is_ip6addr(const char *string, struct in6_addr *addr); const char *fmt, ...);
static isc_boolean_t static void parser_warn(ndcpcontext *pctx, isc_boolean_t lasttoken,
is_ip4addr(const char *string, struct in_addr *addr); const char *fmt, ...);
static isc_result_t static isc_boolean_t is_ip6addr(const char *string, struct in6_addr *addr);
getnexttoken(ndcpcontext *pctx); static isc_boolean_t is_ip4addr(const char *string, struct in_addr *addr);
static void static isc_result_t getnexttoken(ndcpcontext *pctx);
syntax_error(ndcpcontext *pctx, isc_uint32_t keyword); static void syntax_error(ndcpcontext *pctx, isc_uint32_t keyword);
/* *********************************************************************** */ /* *********************************************************************** */
@@ -950,7 +938,7 @@ parse_options(ndcpcontext *pctx, dns_c_ndcopts_t **opts) {
switch (option) { switch (option) {
case L_DEFAULT_SERVER: case L_DEFAULT_SERVER:
if (!looking_at_anystring(pctx)) if (!looking_at_stringoripaddr(pctx))
return (result); return (result);
result = dns_c_ndcopts_setdefserver(newopts, result = dns_c_ndcopts_setdefserver(newopts,
@@ -1067,7 +1055,7 @@ parse_serverstmt(ndcpcontext *pctx, dns_c_ndcserver_t **server) {
break; break;
case L_HOST: case L_HOST:
if (!looking_at_anystring(pctx)) { if (!looking_at_stringoripaddr(pctx)) {
result = ISC_R_FAILURE; result = ISC_R_FAILURE;
goto done; goto done;
} }
@@ -1347,6 +1335,20 @@ looking_at_anystring(ndcpcontext *pctx) {
return (ISC_TRUE); return (ISC_TRUE);
} }
static isc_boolean_t
looking_at_stringoripaddr(ndcpcontext *pctx) {
if (pctx->currtok != L_STRING && pctx->currtok != L_QSTRING &&
pctx->currtok != L_IP4ADDR && pctx->currtok != L_IP6ADDR) {
parser_error(pctx, ISC_TRUE,
"expected a hostname or an ip address");
return (ISC_FALSE);
}
return (ISC_TRUE);
}
static isc_boolean_t static isc_boolean_t
eat_lbrace(ndcpcontext *pctx) { eat_lbrace(ndcpcontext *pctx) {
return (eat(pctx, L_LBRACE)); return (eat(pctx, L_LBRACE));