aboutsummaryrefslogtreecommitdiff
path: root/util/configparser.y
diff options
context:
space:
mode:
Diffstat (limited to 'util/configparser.y')
-rw-r--r--util/configparser.y167
1 files changed, 160 insertions, 7 deletions
diff --git a/util/configparser.y b/util/configparser.y
index 7240ee4bdd00..530e52881601 100644
--- a/util/configparser.y
+++ b/util/configparser.y
@@ -106,6 +106,7 @@ extern struct config_parser_state* cfg_parser;
%token VAR_PREFETCH_KEY VAR_SO_SNDBUF VAR_SO_REUSEPORT VAR_HARDEN_BELOW_NXDOMAIN
%token VAR_IGNORE_CD_FLAG VAR_LOG_QUERIES VAR_TCP_UPSTREAM VAR_SSL_UPSTREAM
%token VAR_SSL_SERVICE_KEY VAR_SSL_SERVICE_PEM VAR_SSL_PORT VAR_FORWARD_FIRST
+%token VAR_STUB_SSL_UPSTREAM VAR_FORWARD_SSL_UPSTREAM
%token VAR_STUB_FIRST VAR_MINIMAL_RESPONSES VAR_RRSET_ROUNDROBIN
%token VAR_MAX_UDP_SIZE VAR_DELAY_CLOSE
%token VAR_UNBLOCK_LAN_ZONES VAR_INSECURE_LAN_ZONES
@@ -125,15 +126,19 @@ extern struct config_parser_state* cfg_parser;
%token VAR_RATELIMIT VAR_RATELIMIT_SLABS VAR_RATELIMIT_SIZE
%token VAR_RATELIMIT_FOR_DOMAIN VAR_RATELIMIT_BELOW_DOMAIN VAR_RATELIMIT_FACTOR
%token VAR_CAPS_WHITELIST VAR_CACHE_MAX_NEGATIVE_TTL VAR_PERMIT_SMALL_HOLDDOWN
-%token VAR_QNAME_MINIMISATION VAR_IP_FREEBIND VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG
-%token VAR_ACCESS_CONTROL_TAG VAR_LOCAL_ZONE_OVERRIDE
-%token VAR_ACCESS_CONTROL_TAG_ACTION VAR_ACCESS_CONTROL_TAG_DATA
+%token VAR_QNAME_MINIMISATION VAR_QNAME_MINIMISATION_STRICT VAR_IP_FREEBIND
+%token VAR_DEFINE_TAG VAR_LOCAL_ZONE_TAG VAR_ACCESS_CONTROL_TAG
+%token VAR_LOCAL_ZONE_OVERRIDE VAR_ACCESS_CONTROL_TAG_ACTION
+%token VAR_ACCESS_CONTROL_TAG_DATA VAR_VIEW VAR_ACCESS_CONTROL_VIEW
+%token VAR_VIEW_FIRST VAR_SERVE_EXPIRED VAR_FAKE_DSA
+%token VAR_LOG_IDENTITY
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
toplevelvar: serverstart contents_server | stubstart contents_stub |
forwardstart contents_forward | pythonstart contents_py |
- rcstart contents_rc | dtstart contents_dt
+ rcstart contents_rc | dtstart contents_dt | viewstart
+ contents_view
;
/* server: declaration */
@@ -199,7 +204,9 @@ content_server: server_num_threads | server_verbosity | server_port |
server_ip_freebind | server_define_tag | server_local_zone_tag |
server_disable_dnssec_lame_check | server_access_control_tag |
server_local_zone_override | server_access_control_tag_action |
- server_access_control_tag_data
+ server_access_control_tag_data | server_access_control_view |
+ server_qname_minimisation_strict | server_serve_expired |
+ server_fake_dsa | server_log_identity
;
stubstart: VAR_STUB_ZONE
{
@@ -215,7 +222,8 @@ stubstart: VAR_STUB_ZONE
;
contents_stub: contents_stub content_stub
| ;
-content_stub: stub_name | stub_host | stub_addr | stub_prime | stub_first
+content_stub: stub_name | stub_host | stub_addr | stub_prime | stub_first |
+ stub_ssl_upstream
;
forwardstart: VAR_FORWARD_ZONE
{
@@ -231,7 +239,26 @@ forwardstart: VAR_FORWARD_ZONE
;
contents_forward: contents_forward content_forward
| ;
-content_forward: forward_name | forward_host | forward_addr | forward_first
+content_forward: forward_name | forward_host | forward_addr | forward_first |
+ forward_ssl_upstream
+ ;
+viewstart: VAR_VIEW
+ {
+ struct config_view* s;
+ OUTYY(("\nP(view:)\n"));
+ s = (struct config_view*)calloc(1, sizeof(struct config_view));
+ if(s) {
+ s->next = cfg_parser->cfg->views;
+ if(s->next && !s->next->name)
+ yyerror("view without name");
+ cfg_parser->cfg->views = s;
+ } else
+ yyerror("out of memory");
+ }
+ ;
+contents_view: contents_view content_view
+ | ;
+content_view: view_name | view_local_zone | view_local_data | view_first
;
server_num_threads: VAR_NUM_THREADS STRING_ARG
{
@@ -1160,6 +1187,26 @@ server_ignore_cd_flag: VAR_IGNORE_CD_FLAG STRING_ARG
free($2);
}
;
+server_serve_expired: VAR_SERVE_EXPIRED STRING_ARG
+ {
+ OUTYY(("P(server_serve_expired:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->serve_expired = (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
+server_fake_dsa: VAR_FAKE_DSA STRING_ARG
+ {
+ OUTYY(("P(server_fake_dsa:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else fake_dsa = (strcmp($2, "yes")==0);
+ if(fake_dsa)
+ log_warn("test option fake_dsa is enabled");
+ free($2);
+ }
+ ;
server_val_log_level: VAR_VAL_LOG_LEVEL STRING_ARG
{
OUTYY(("P(server_val_log_level:%s)\n", $2));
@@ -1422,6 +1469,17 @@ server_local_zone_override: VAR_LOCAL_ZONE_OVERRIDE STRING_ARG STRING_ARG STRING
}
}
;
+server_access_control_view: VAR_ACCESS_CONTROL_VIEW STRING_ARG STRING_ARG
+ {
+ OUTYY(("P(server_access_control_view:%s %s)\n", $2, $3));
+ if(!cfg_str2list_insert(&cfg_parser->cfg->acl_view,
+ $2, $3)) {
+ yyerror("out of memory");
+ free($2);
+ free($3);
+ }
+ }
+ ;
server_ratelimit: VAR_RATELIMIT STRING_ARG
{
OUTYY(("P(server_ratelimit:%s)\n", $2));
@@ -1497,6 +1555,16 @@ server_qname_minimisation: VAR_QNAME_MINIMISATION STRING_ARG
free($2);
}
;
+server_qname_minimisation_strict: VAR_QNAME_MINIMISATION_STRICT STRING_ARG
+ {
+ OUTYY(("P(server_qname_minimisation_strict:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->qname_minimisation_strict =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
stub_name: VAR_NAME STRING_ARG
{
OUTYY(("P(name:%s)\n", $2));
@@ -1530,6 +1598,16 @@ stub_first: VAR_STUB_FIRST STRING_ARG
free($2);
}
;
+stub_ssl_upstream: VAR_STUB_SSL_UPSTREAM STRING_ARG
+ {
+ OUTYY(("P(stub-ssl-upstream:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->stubs->ssl_upstream =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
stub_prime: VAR_STUB_PRIME STRING_ARG
{
OUTYY(("P(stub-prime:%s)\n", $2));
@@ -1573,6 +1651,73 @@ forward_first: VAR_FORWARD_FIRST STRING_ARG
free($2);
}
;
+forward_ssl_upstream: VAR_FORWARD_SSL_UPSTREAM STRING_ARG
+ {
+ OUTYY(("P(forward-ssl-upstream:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->forwards->ssl_upstream =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
+view_name: VAR_NAME STRING_ARG
+ {
+ OUTYY(("P(name:%s)\n", $2));
+ if(cfg_parser->cfg->views->name)
+ yyerror("view name override, there must be one "
+ "name for one view");
+ free(cfg_parser->cfg->views->name);
+ cfg_parser->cfg->views->name = $2;
+ }
+ ;
+view_local_zone: VAR_LOCAL_ZONE STRING_ARG STRING_ARG
+ {
+ OUTYY(("P(view_local_zone:%s %s)\n", $2, $3));
+ if(strcmp($3, "static")!=0 && strcmp($3, "deny")!=0 &&
+ strcmp($3, "refuse")!=0 && strcmp($3, "redirect")!=0 &&
+ strcmp($3, "transparent")!=0 && strcmp($3, "nodefault")!=0
+ && strcmp($3, "typetransparent")!=0
+ && strcmp($3, "always_transparent")!=0
+ && strcmp($3, "always_refuse")!=0
+ && strcmp($3, "always_nxdomain")!=0
+ && strcmp($3, "inform")!=0 && strcmp($3, "inform_deny")!=0)
+ yyerror("local-zone type: expected static, deny, "
+ "refuse, redirect, transparent, "
+ "typetransparent, inform, inform_deny, "
+ "always_transparent, always_refuse, "
+ "always_nxdomain or nodefault");
+ else if(strcmp($3, "nodefault")==0) {
+ if(!cfg_strlist_insert(&cfg_parser->cfg->views->
+ local_zones_nodefault, $2))
+ fatal_exit("out of memory adding local-zone");
+ free($3);
+ } else {
+ if(!cfg_str2list_insert(
+ &cfg_parser->cfg->views->local_zones,
+ $2, $3))
+ fatal_exit("out of memory adding local-zone");
+ }
+ }
+ ;
+view_local_data: VAR_LOCAL_DATA STRING_ARG
+ {
+ OUTYY(("P(view_local_data:%s)\n", $2));
+ if(!cfg_strlist_insert(&cfg_parser->cfg->views->local_data, $2)) {
+ fatal_exit("out of memory adding local-data");
+ free($2);
+ }
+ }
+ ;
+view_first: VAR_VIEW_FIRST STRING_ARG
+ {
+ OUTYY(("P(view-first:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->views->isfirst=(strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
rcstart: VAR_REMOTE_CONTROL
{
OUTYY(("\nP(remote-control:)\n"));
@@ -1788,6 +1933,14 @@ server_disable_dnssec_lame_check: VAR_DISABLE_DNSSEC_LAME_CHECK STRING_ARG
(strcmp($2, "yes")==0);
free($2);
}
+ ;
+server_log_identity: VAR_LOG_IDENTITY STRING_ARG
+ {
+ OUTYY(("P(server_log_identity:%s)\n", $2));
+ free(cfg_parser->cfg->log_identity);
+ cfg_parser->cfg->log_identity = $2;
+ }
+ ;
%%
/* parse helper routines could be here */