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:
3
CHANGES
3
CHANGES
@@ -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.
|
||||||
|
|
||||||
|
@@ -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));
|
||||||
|
Reference in New Issue
Block a user