- Fix #734 [FR] enable unbound-checkconf to detect more (basic)

errors.
This commit is contained in:
W.C.A. Wijngaards 2022-08-05 14:41:05 +02:00
parent fbe8e3b0b2
commit ef57f8bd51
7 changed files with 2763 additions and 3414 deletions

View file

@ -1,3 +1,7 @@
5 August 2022: Wouter
- Fix #734 [FR] enable unbound-checkconf to detect more (basic)
errors.
4 August 2022: Wouter
- Fix ratelimit inconsistency, for ip-ratelimits the value is the
amount allowed, like for ratelimits.

View file

@ -1302,6 +1302,7 @@ create_cfg_parser(struct config_file* cfg, char* filename, const char* chroot)
cfg_parser->errors = 0;
cfg_parser->cfg = cfg;
cfg_parser->chroot = chroot;
cfg_parser->started_toplevel = 0;
init_cfg_parse();
}
@ -1800,6 +1801,9 @@ void ub_c_error_msg(const char* fmt, ...)
void ub_c_error(const char *str)
{
cfg_parser->errors++;
if(strcmp(str, "syntax error")==0 && cfg_parser->started_toplevel ==0)
str = "syntax error, is there no section start after an "
"include-toplevel directive perhaps.";
fprintf(stderr, "%s:%d: error: %s\n", cfg_parser->filename,
cfg_parser->line, str);
}

View file

@ -1262,6 +1262,8 @@ struct config_parser_state {
struct config_file* cfg;
/** the current chroot dir (or NULL if none) */
const char* chroot;
/** if we are started in a toplevel, or not, after a force_toplevel */
int started_toplevel;
};
/** global config parser object used during config parsing */

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
/* A Bison parser, made by GNU Bison 3.8.2. */
/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison interface for Yacc-like parsers in C
@ -721,7 +721,7 @@ union YYSTYPE
char* str;
#line 725 "./util/configparser.h"
#line 725 "util/configparser.h"
};
typedef union YYSTYPE YYSTYPE;
@ -732,8 +732,6 @@ typedef union YYSTYPE YYSTYPE;
extern YYSTYPE yylval;
int yyparse (void);
#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */

View file

@ -204,12 +204,14 @@ toplevelvar: serverstart contents_server | stubstart contents_stub |
force_toplevel: VAR_FORCE_TOPLEVEL
{
OUTYY(("\nP(force-toplevel)\n"));
cfg_parser->started_toplevel = 0;
}
;
/* server: declaration */
serverstart: VAR_SERVER
{
OUTYY(("\nP(server:)\n"));
cfg_parser->started_toplevel = 1;
}
;
contents_server: contents_server content_server
@ -320,6 +322,7 @@ stubstart: VAR_STUB_ZONE
{
struct config_stub* s;
OUTYY(("\nP(stub_zone:)\n"));
cfg_parser->started_toplevel = 1;
s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
if(s) {
s->next = cfg_parser->cfg->stubs;
@ -338,6 +341,7 @@ forwardstart: VAR_FORWARD_ZONE
{
struct config_stub* s;
OUTYY(("\nP(forward_zone:)\n"));
cfg_parser->started_toplevel = 1;
s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
if(s) {
s->next = cfg_parser->cfg->forwards;
@ -356,6 +360,7 @@ viewstart: VAR_VIEW
{
struct config_view* s;
OUTYY(("\nP(view:)\n"));
cfg_parser->started_toplevel = 1;
s = (struct config_view*)calloc(1, sizeof(struct config_view));
if(s) {
s->next = cfg_parser->cfg->views;
@ -376,6 +381,7 @@ authstart: VAR_AUTH_ZONE
{
struct config_auth* s;
OUTYY(("\nP(auth_zone:)\n"));
cfg_parser->started_toplevel = 1;
s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
if(s) {
s->next = cfg_parser->cfg->auths;
@ -474,6 +480,7 @@ rpzstart: VAR_RPZ
{
struct config_auth* s;
OUTYY(("\nP(rpz:)\n"));
cfg_parser->started_toplevel = 1;
s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
if(s) {
s->next = cfg_parser->cfg->auths;
@ -3103,6 +3110,7 @@ view_first: VAR_VIEW_FIRST STRING_ARG
rcstart: VAR_REMOTE_CONTROL
{
OUTYY(("\nP(remote-control:)\n"));
cfg_parser->started_toplevel = 1;
}
;
contents_rc: contents_rc content_rc
@ -3175,6 +3183,7 @@ rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG
dtstart: VAR_DNSTAP
{
OUTYY(("\nP(dnstap:)\n"));
cfg_parser->started_toplevel = 1;
}
;
contents_dt: contents_dt content_dt
@ -3357,6 +3366,7 @@ dt_dnstap_log_forwarder_response_messages: VAR_DNSTAP_LOG_FORWARDER_RESPONSE_MES
pythonstart: VAR_PYTHON
{
OUTYY(("\nP(python:)\n"));
cfg_parser->started_toplevel = 1;
}
;
contents_py: contents_py content_py
@ -3372,6 +3382,7 @@ py_script: VAR_PYTHON_SCRIPT STRING_ARG
dynlibstart: VAR_DYNLIB
{
OUTYY(("\nP(dynlib:)\n"));
cfg_parser->started_toplevel = 1;
}
;
contents_dl: contents_dl content_dl
@ -3421,6 +3432,7 @@ server_response_ip_data: VAR_RESPONSE_IP_DATA STRING_ARG STRING_ARG
dnscstart: VAR_DNSCRYPT
{
OUTYY(("\nP(dnscrypt:)\n"));
cfg_parser->started_toplevel = 1;
}
;
contents_dnsc: contents_dnsc content_dnsc
@ -3530,6 +3542,7 @@ dnsc_dnscrypt_nonce_cache_slabs: VAR_DNSCRYPT_NONCE_CACHE_SLABS STRING_ARG
cachedbstart: VAR_CACHEDB
{
OUTYY(("\nP(cachedb:)\n"));
cfg_parser->started_toplevel = 1;
}
;
contents_cachedb: contents_cachedb content_cachedb
@ -3629,6 +3642,7 @@ server_tcp_connection_limit: VAR_TCP_CONNECTION_LIMIT STRING_ARG STRING_ARG
ipsetstart: VAR_IPSET
{
OUTYY(("\nP(ipset:)\n"));
cfg_parser->started_toplevel = 1;
}
;
contents_ipset: contents_ipset content_ipset