mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-08 12:18:42 +00:00
Conf: Use nonterminal bytestring instead of BYTETEXT
Nonterminal bytestring allows to provide expressions to be evaluated in places where BYTETEXT is used now: passwords, radv custom option. Based on the patch from Alexander Zubkov <green@qrator.net>, thanks!
This commit is contained in:
parent
0dbcc92726
commit
f411a19bb0
@ -117,9 +117,13 @@ CF_DECLS
|
||||
%type <mls> label_stack_start label_stack
|
||||
|
||||
%type <t> text opttext
|
||||
%type <bs> bytestring
|
||||
%type <s> symbol
|
||||
%type <kw> kw_sym
|
||||
|
||||
%type <v> bytestring_text
|
||||
%type <x> bytestring_expr
|
||||
|
||||
%nonassoc PREFIX_DUMMY
|
||||
%left AND OR
|
||||
%nonassoc '=' '<' '>' '~' GEQ LEQ NEQ NMA PO PC
|
||||
@ -395,6 +399,27 @@ opttext:
|
||||
| /* empty */ { $$ = NULL; }
|
||||
;
|
||||
|
||||
bytestring:
|
||||
BYTETEXT
|
||||
| bytestring_expr { $$ = cf_eval($1, T_BYTESTRING).val.bs; }
|
||||
;
|
||||
|
||||
bytestring_text:
|
||||
BYTETEXT { $$.type = T_BYTESTRING; $$.val.bs = $1; }
|
||||
| TEXT { $$.type = T_STRING; $$.val.s = $1; }
|
||||
| bytestring_expr {
|
||||
$$ = cf_eval($1, T_VOID);
|
||||
if (($$.type != T_BYTESTRING) && ($$.type != T_STRING))
|
||||
cf_error("Bytestring or string value expected");
|
||||
}
|
||||
;
|
||||
|
||||
bytestring_expr:
|
||||
symbol_value
|
||||
| term_bs
|
||||
| '(' term ')' { $$ = $2; }
|
||||
;
|
||||
|
||||
|
||||
CF_CODE
|
||||
|
||||
|
@ -546,10 +546,15 @@ password_item:
|
||||
|
||||
pass_key: PASSWORD | KEY;
|
||||
|
||||
password_item_begin:
|
||||
pass_key text { init_password_list(); init_password($2, strlen($2), password_id++); }
|
||||
| pass_key BYTETEXT { init_password_list(); init_password($2->data, $2->length, password_id++); }
|
||||
;
|
||||
password_item_begin: pass_key bytestring_text
|
||||
{
|
||||
init_password_list();
|
||||
if ($2.type == T_BYTESTRING)
|
||||
init_password($2.val.bs->data, $2.val.bs->length, password_id++);
|
||||
else if ($2.type == T_STRING)
|
||||
init_password($2.val.s, strlen($2.val.s), password_id++);
|
||||
else bug("Bad bytestring_text");
|
||||
};
|
||||
|
||||
password_item_params:
|
||||
/* empty */ { }
|
||||
|
@ -73,7 +73,7 @@ radv_proto_item:
|
||||
| PREFIX radv_prefix { add_tail(&RADV_CFG->pref_list, NODE this_radv_prefix); }
|
||||
| RDNSS { init_list(&radv_dns_list); } radv_rdnss { add_tail_list(&RADV_CFG->rdnss_list, &radv_dns_list); }
|
||||
| DNSSL { init_list(&radv_dns_list); } radv_dnssl { add_tail_list(&RADV_CFG->dnssl_list, &radv_dns_list); }
|
||||
| CUSTOM OPTION TYPE expr VALUE BYTETEXT { radv_add_to_custom_list(&RADV_CFG->custom_list, $4, $6); }
|
||||
| CUSTOM OPTION TYPE expr VALUE bytestring { radv_add_to_custom_list(&RADV_CFG->custom_list, $4, $6); }
|
||||
| TRIGGER net_ip6 { RADV_CFG->trigger = $2; }
|
||||
| PROPAGATE ROUTES bool { RADV_CFG->propagate_routes = $3; }
|
||||
;
|
||||
@ -138,7 +138,7 @@ radv_iface_item:
|
||||
| PREFIX radv_prefix { add_tail(&RADV_IFACE->pref_list, NODE this_radv_prefix); }
|
||||
| RDNSS { init_list(&radv_dns_list); } radv_rdnss { add_tail_list(&RADV_IFACE->rdnss_list, &radv_dns_list); }
|
||||
| DNSSL { init_list(&radv_dns_list); } radv_dnssl { add_tail_list(&RADV_IFACE->dnssl_list, &radv_dns_list); }
|
||||
| CUSTOM OPTION TYPE expr VALUE BYTETEXT { radv_add_to_custom_list(&RADV_IFACE->custom_list, $4, $6); }
|
||||
| CUSTOM OPTION TYPE expr VALUE bytestring { radv_add_to_custom_list(&RADV_IFACE->custom_list, $4, $6); }
|
||||
| RDNSS LOCAL bool { RADV_IFACE->rdnss_local = $3; }
|
||||
| DNSSL LOCAL bool { RADV_IFACE->dnssl_local = $3; }
|
||||
| CUSTOM OPTION LOCAL bool { RADV_IFACE->custom_local = $4; }
|
||||
|
Loading…
Reference in New Issue
Block a user