- 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 4 August 2022: Wouter
- Fix ratelimit inconsistency, for ip-ratelimits the value is the - Fix ratelimit inconsistency, for ip-ratelimits the value is the
amount allowed, like for ratelimits. 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->errors = 0;
cfg_parser->cfg = cfg; cfg_parser->cfg = cfg;
cfg_parser->chroot = chroot; cfg_parser->chroot = chroot;
cfg_parser->started_toplevel = 0;
init_cfg_parse(); init_cfg_parse();
} }
@ -1800,6 +1801,9 @@ void ub_c_error_msg(const char* fmt, ...)
void ub_c_error(const char *str) void ub_c_error(const char *str)
{ {
cfg_parser->errors++; 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, fprintf(stderr, "%s:%d: error: %s\n", cfg_parser->filename,
cfg_parser->line, str); cfg_parser->line, str);
} }

View file

@ -1262,6 +1262,8 @@ struct config_parser_state {
struct config_file* cfg; struct config_file* cfg;
/** the current chroot dir (or NULL if none) */ /** the current chroot dir (or NULL if none) */
const char* chroot; 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 */ /** 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 /* Bison interface for Yacc-like parsers in C
@ -721,7 +721,7 @@ union YYSTYPE
char* str; char* str;
#line 725 "./util/configparser.h" #line 725 "util/configparser.h"
}; };
typedef union YYSTYPE YYSTYPE; typedef union YYSTYPE YYSTYPE;
@ -732,8 +732,6 @@ typedef union YYSTYPE YYSTYPE;
extern YYSTYPE yylval; extern YYSTYPE yylval;
int yyparse (void); int yyparse (void);
#endif /* !YY_YY_UTIL_CONFIGPARSER_H_INCLUDED */ #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 force_toplevel: VAR_FORCE_TOPLEVEL
{ {
OUTYY(("\nP(force-toplevel)\n")); OUTYY(("\nP(force-toplevel)\n"));
cfg_parser->started_toplevel = 0;
} }
; ;
/* server: declaration */ /* server: declaration */
serverstart: VAR_SERVER serverstart: VAR_SERVER
{ {
OUTYY(("\nP(server:)\n")); OUTYY(("\nP(server:)\n"));
cfg_parser->started_toplevel = 1;
} }
; ;
contents_server: contents_server content_server contents_server: contents_server content_server
@ -320,6 +322,7 @@ stubstart: VAR_STUB_ZONE
{ {
struct config_stub* s; struct config_stub* s;
OUTYY(("\nP(stub_zone:)\n")); OUTYY(("\nP(stub_zone:)\n"));
cfg_parser->started_toplevel = 1;
s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
if(s) { if(s) {
s->next = cfg_parser->cfg->stubs; s->next = cfg_parser->cfg->stubs;
@ -338,6 +341,7 @@ forwardstart: VAR_FORWARD_ZONE
{ {
struct config_stub* s; struct config_stub* s;
OUTYY(("\nP(forward_zone:)\n")); OUTYY(("\nP(forward_zone:)\n"));
cfg_parser->started_toplevel = 1;
s = (struct config_stub*)calloc(1, sizeof(struct config_stub)); s = (struct config_stub*)calloc(1, sizeof(struct config_stub));
if(s) { if(s) {
s->next = cfg_parser->cfg->forwards; s->next = cfg_parser->cfg->forwards;
@ -356,6 +360,7 @@ viewstart: VAR_VIEW
{ {
struct config_view* s; struct config_view* s;
OUTYY(("\nP(view:)\n")); OUTYY(("\nP(view:)\n"));
cfg_parser->started_toplevel = 1;
s = (struct config_view*)calloc(1, sizeof(struct config_view)); s = (struct config_view*)calloc(1, sizeof(struct config_view));
if(s) { if(s) {
s->next = cfg_parser->cfg->views; s->next = cfg_parser->cfg->views;
@ -376,6 +381,7 @@ authstart: VAR_AUTH_ZONE
{ {
struct config_auth* s; struct config_auth* s;
OUTYY(("\nP(auth_zone:)\n")); OUTYY(("\nP(auth_zone:)\n"));
cfg_parser->started_toplevel = 1;
s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
if(s) { if(s) {
s->next = cfg_parser->cfg->auths; s->next = cfg_parser->cfg->auths;
@ -474,6 +480,7 @@ rpzstart: VAR_RPZ
{ {
struct config_auth* s; struct config_auth* s;
OUTYY(("\nP(rpz:)\n")); OUTYY(("\nP(rpz:)\n"));
cfg_parser->started_toplevel = 1;
s = (struct config_auth*)calloc(1, sizeof(struct config_auth)); s = (struct config_auth*)calloc(1, sizeof(struct config_auth));
if(s) { if(s) {
s->next = cfg_parser->cfg->auths; s->next = cfg_parser->cfg->auths;
@ -3103,6 +3110,7 @@ view_first: VAR_VIEW_FIRST STRING_ARG
rcstart: VAR_REMOTE_CONTROL rcstart: VAR_REMOTE_CONTROL
{ {
OUTYY(("\nP(remote-control:)\n")); OUTYY(("\nP(remote-control:)\n"));
cfg_parser->started_toplevel = 1;
} }
; ;
contents_rc: contents_rc content_rc contents_rc: contents_rc content_rc
@ -3175,6 +3183,7 @@ rc_control_cert_file: VAR_CONTROL_CERT_FILE STRING_ARG
dtstart: VAR_DNSTAP dtstart: VAR_DNSTAP
{ {
OUTYY(("\nP(dnstap:)\n")); OUTYY(("\nP(dnstap:)\n"));
cfg_parser->started_toplevel = 1;
} }
; ;
contents_dt: contents_dt content_dt 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 pythonstart: VAR_PYTHON
{ {
OUTYY(("\nP(python:)\n")); OUTYY(("\nP(python:)\n"));
cfg_parser->started_toplevel = 1;
} }
; ;
contents_py: contents_py content_py contents_py: contents_py content_py
@ -3372,6 +3382,7 @@ py_script: VAR_PYTHON_SCRIPT STRING_ARG
dynlibstart: VAR_DYNLIB dynlibstart: VAR_DYNLIB
{ {
OUTYY(("\nP(dynlib:)\n")); OUTYY(("\nP(dynlib:)\n"));
cfg_parser->started_toplevel = 1;
} }
; ;
contents_dl: contents_dl content_dl 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 dnscstart: VAR_DNSCRYPT
{ {
OUTYY(("\nP(dnscrypt:)\n")); OUTYY(("\nP(dnscrypt:)\n"));
cfg_parser->started_toplevel = 1;
} }
; ;
contents_dnsc: contents_dnsc content_dnsc 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 cachedbstart: VAR_CACHEDB
{ {
OUTYY(("\nP(cachedb:)\n")); OUTYY(("\nP(cachedb:)\n"));
cfg_parser->started_toplevel = 1;
} }
; ;
contents_cachedb: contents_cachedb content_cachedb 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 ipsetstart: VAR_IPSET
{ {
OUTYY(("\nP(ipset:)\n")); OUTYY(("\nP(ipset:)\n"));
cfg_parser->started_toplevel = 1;
} }
; ;
contents_ipset: contents_ipset content_ipset contents_ipset: contents_ipset content_ipset