summaryrefslogtreecommitdiff
path: root/util/configparser.y
diff options
context:
space:
mode:
Diffstat (limited to 'util/configparser.y')
-rw-r--r--util/configparser.y165
1 files changed, 135 insertions, 30 deletions
diff --git a/util/configparser.y b/util/configparser.y
index b650b810918b..c10a5f475d32 100644
--- a/util/configparser.y
+++ b/util/configparser.y
@@ -182,6 +182,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_CACHEDB_REDISHOST VAR_CACHEDB_REDISPORT VAR_CACHEDB_REDISTIMEOUT
%token VAR_CACHEDB_REDISEXPIRERECORDS VAR_CACHEDB_REDISPATH VAR_CACHEDB_REDISPASSWORD
%token VAR_CACHEDB_REDISLOGICALDB
+%token VAR_CACHEDB_REDISCOMMANDTIMEOUT VAR_CACHEDB_REDISCONNECTTIMEOUT
%token VAR_UDP_UPSTREAM_WITHOUT_DOWNSTREAM VAR_FOR_UPSTREAM
%token VAR_AUTH_ZONE VAR_ZONEFILE VAR_MASTER VAR_URL VAR_FOR_DOWNSTREAM
%token VAR_FALLBACK_ENABLED VAR_TLS_ADDITIONAL_PORT VAR_LOW_RTT VAR_LOW_RTT_PERMIL
@@ -202,16 +203,18 @@ extern struct config_parser_state* cfg_parser;
%token VAR_RPZ_SIGNAL_NXDOMAIN_RA VAR_INTERFACE_AUTOMATIC_PORTS VAR_EDE
%token VAR_INTERFACE_ACTION VAR_INTERFACE_VIEW VAR_INTERFACE_TAG
%token VAR_INTERFACE_TAG_ACTION VAR_INTERFACE_TAG_DATA
+%token VAR_QUIC_PORT VAR_QUIC_SIZE
%token VAR_PROXY_PROTOCOL_PORT VAR_STATISTICS_INHIBIT_ZERO
%token VAR_HARDEN_UNKNOWN_ADDITIONAL VAR_DISABLE_EDNS_DO VAR_CACHEDB_NO_STORE
%token VAR_LOG_DESTADDR VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED
-%token VAR_COOKIE_SECRET_FILE
+%token VAR_COOKIE_SECRET_FILE VAR_ITER_SCRUB_NS VAR_ITER_SCRUB_CNAME
+%token VAR_MAX_GLOBAL_QUOTA VAR_HARDEN_UNVERIFIED_GLUE VAR_LOG_TIME_ISO
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
-toplevelvar: serverstart contents_server | stubstart contents_stub |
- forwardstart contents_forward | pythonstart contents_py |
- rcstart contents_rc | dtstart contents_dt | viewstart contents_view |
+toplevelvar: serverstart contents_server | stub_clause |
+ forward_clause | pythonstart contents_py |
+ rcstart contents_rc | dtstart contents_dt | view_clause |
dnscstart contents_dnsc | cachedbstart contents_cachedb |
ipsetstart contents_ipset | authstart contents_auth |
rpzstart contents_rpz | dynlibstart contents_dl |
@@ -340,10 +343,21 @@ content_server: server_num_threads | server_verbosity | server_port |
server_edns_client_string_opcode | server_nsid |
server_zonemd_permissive_mode | server_max_reuse_tcp_queries |
server_tcp_reuse_timeout | server_tcp_auth_query_timeout |
+ server_quic_port | server_quic_size |
server_interface_automatic_ports | server_ede |
server_proxy_protocol_port | server_statistics_inhibit_zero |
server_harden_unknown_additional | server_disable_edns_do |
- server_log_destaddr | server_cookie_secret_file
+ server_log_destaddr | server_cookie_secret_file |
+ server_iter_scrub_ns | server_iter_scrub_cname | server_max_global_quota |
+ server_harden_unverified_glue | server_log_time_iso
+ ;
+stub_clause: stubstart contents_stub
+ {
+ /* stub end */
+ if(cfg_parser->cfg->stubs &&
+ !cfg_parser->cfg->stubs->name)
+ yyerror("stub-zone without name");
+ }
;
stubstart: VAR_STUB_ZONE
{
@@ -359,17 +373,19 @@ stubstart: VAR_STUB_ZONE
}
}
;
-contents_stub: content_stub contents_stub
- |
- {
- /* stub end */
- if(cfg_parser->cfg->stubs &&
- !cfg_parser->cfg->stubs->name)
- yyerror("stub-zone without name");
- };
+contents_stub: contents_stub content_stub
+ | ;
content_stub: stub_name | stub_host | stub_addr | stub_prime | stub_first |
stub_no_cache | stub_ssl_upstream | stub_tcp_upstream
;
+forward_clause: forwardstart contents_forward
+ {
+ /* forward end */
+ if(cfg_parser->cfg->forwards &&
+ !cfg_parser->cfg->forwards->name)
+ yyerror("forward-zone without name");
+ }
+ ;
forwardstart: VAR_FORWARD_ZONE
{
struct config_stub* s;
@@ -384,17 +400,19 @@ forwardstart: VAR_FORWARD_ZONE
}
}
;
-contents_forward: content_forward contents_forward
- |
- {
- /* forward end */
- if(cfg_parser->cfg->forwards &&
- !cfg_parser->cfg->forwards->name)
- yyerror("forward-zone without name");
- };
+contents_forward: contents_forward content_forward
+ | ;
content_forward: forward_name | forward_host | forward_addr | forward_first |
forward_no_cache | forward_ssl_upstream | forward_tcp_upstream
;
+view_clause: viewstart contents_view
+ {
+ /* view end */
+ if(cfg_parser->cfg->views &&
+ !cfg_parser->cfg->views->name)
+ yyerror("view without name");
+ }
+ ;
viewstart: VAR_VIEW
{
struct config_view* s;
@@ -409,14 +427,8 @@ viewstart: VAR_VIEW
}
}
;
-contents_view: content_view contents_view
- |
- {
- /* view end */
- if(cfg_parser->cfg->views &&
- !cfg_parser->cfg->views->name)
- yyerror("view without name");
- };
+contents_view: contents_view content_view
+ | ;
content_view: view_name | view_local_zone | view_local_data | view_first |
view_response_ip | view_response_ip_data | view_local_data_ptr
;
@@ -1199,6 +1211,26 @@ server_http_notls_downstream: VAR_HTTP_NOTLS_DOWNSTREAM STRING_ARG
else cfg_parser->cfg->http_notls_downstream = (strcmp($2, "yes")==0);
free($2);
};
+server_quic_port: VAR_QUIC_PORT STRING_ARG
+ {
+ OUTYY(("P(server_quic_port:%s)\n", $2));
+#ifndef HAVE_NGTCP2
+ log_warn("%s:%d: Unbound is not compiled with "
+ "ngtcp2. This is required to use DNS "
+ "over QUIC.", cfg_parser->filename, cfg_parser->line);
+#endif
+ if(atoi($2) == 0)
+ yyerror("port number expected");
+ else cfg_parser->cfg->quic_port = atoi($2);
+ free($2);
+ };
+server_quic_size: VAR_QUIC_SIZE STRING_ARG
+ {
+ OUTYY(("P(server_quic_size:%s)\n", $2));
+ if(!cfg_parse_memsize($2, &cfg_parser->cfg->quic_size))
+ yyerror("memory size expected");
+ free($2);
+ };
server_use_systemd: VAR_USE_SYSTEMD STRING_ARG
{
OUTYY(("P(server_use_systemd:%s)\n", $2));
@@ -1240,6 +1272,15 @@ server_log_time_ascii: VAR_LOG_TIME_ASCII STRING_ARG
free($2);
}
;
+server_log_time_iso: VAR_LOG_TIME_ISO STRING_ARG
+ {
+ OUTYY(("P(server_log_time_iso:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->log_time_iso = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_log_queries: VAR_LOG_QUERIES STRING_ARG
{
OUTYY(("P(server_log_queries:%s)\n", $2));
@@ -1805,6 +1846,16 @@ server_harden_glue: VAR_HARDEN_GLUE STRING_ARG
free($2);
}
;
+server_harden_unverified_glue: VAR_HARDEN_UNVERIFIED_GLUE STRING_ARG
+ {
+ OUTYY(("P(server_harden_unverified_glue:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->harden_unverified_glue =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
server_harden_dnssec_stripped: VAR_HARDEN_DNSSEC_STRIPPED STRING_ARG
{
OUTYY(("P(server_harden_dnssec_stripped:%s)\n", $2));
@@ -3819,7 +3870,8 @@ contents_cachedb: contents_cachedb content_cachedb
content_cachedb: cachedb_backend_name | cachedb_secret_seed |
redis_server_host | redis_server_port | redis_timeout |
redis_expire_records | redis_server_path | redis_server_password |
- cachedb_no_store | redis_logical_db | cachedb_check_when_serve_expired
+ cachedb_no_store | redis_logical_db | cachedb_check_when_serve_expired |
+ redis_command_timeout | redis_connect_timeout
;
cachedb_backend_name: VAR_CACHEDB_BACKEND STRING_ARG
{
@@ -3935,6 +3987,32 @@ redis_timeout: VAR_CACHEDB_REDISTIMEOUT STRING_ARG
free($2);
}
;
+redis_command_timeout: VAR_CACHEDB_REDISCOMMANDTIMEOUT STRING_ARG
+ {
+ #if defined(USE_CACHEDB) && defined(USE_REDIS)
+ OUTYY(("P(redis_command_timeout:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("redis command timeout value expected");
+ else cfg_parser->cfg->redis_command_timeout = atoi($2);
+ #else
+ OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
+ #endif
+ free($2);
+ }
+ ;
+redis_connect_timeout: VAR_CACHEDB_REDISCONNECTTIMEOUT STRING_ARG
+ {
+ #if defined(USE_CACHEDB) && defined(USE_REDIS)
+ OUTYY(("P(redis_connect_timeout:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("redis connect timeout value expected");
+ else cfg_parser->cfg->redis_connect_timeout = atoi($2);
+ #else
+ OUTYY(("P(Compiled without cachedb or redis, ignoring)\n"));
+ #endif
+ free($2);
+ }
+ ;
redis_expire_records: VAR_CACHEDB_REDISEXPIRERECORDS STRING_ARG
{
#if defined(USE_CACHEDB) && defined(USE_REDIS)
@@ -4006,6 +4084,33 @@ server_cookie_secret_file: VAR_COOKIE_SECRET_FILE STRING_ARG
cfg_parser->cfg->cookie_secret_file = $2;
}
;
+server_iter_scrub_ns: VAR_ITER_SCRUB_NS STRING_ARG
+ {
+ OUTYY(("P(server_iter_scrub_ns:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->iter_scrub_ns = atoi($2);
+ free($2);
+ }
+ ;
+server_iter_scrub_cname: VAR_ITER_SCRUB_CNAME STRING_ARG
+ {
+ OUTYY(("P(server_iter_scrub_cname:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->iter_scrub_cname = atoi($2);
+ free($2);
+ }
+ ;
+server_max_global_quota: VAR_MAX_GLOBAL_QUOTA STRING_ARG
+ {
+ OUTYY(("P(server_max_global_quota:%s)\n", $2));
+ if(atoi($2) == 0 && strcmp($2, "0") != 0)
+ yyerror("number expected");
+ else cfg_parser->cfg->max_global_quota = atoi($2);
+ free($2);
+ }
+ ;
ipsetstart: VAR_IPSET
{
OUTYY(("\nP(ipset:)\n"));