summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/confbase.Y20
-rw-r--r--proto/rpki/config.Y30
2 files changed, 35 insertions, 15 deletions
diff --git a/conf/confbase.Y b/conf/confbase.Y
index f8d24415..a6b4b1ee 100644
--- a/conf/confbase.Y
+++ b/conf/confbase.Y
@@ -121,7 +121,7 @@ CF_DECLS
%type <s> symbol
%type <kw> kw_sym
-%type <v> bytestring_text
+%type <v> bytestring_text text_or_ipa
%type <x> bytestring_expr
%nonassoc PREFIX_DUMMY
@@ -399,6 +399,24 @@ opttext:
| /* empty */ { $$ = NULL; }
;
+text_or_ipa:
+ TEXT { $$.type = T_STRING; $$.val.s = $1; }
+ | IP4 { $$.type = T_IP; $$.val.ip = ipa_from_ip4($1); }
+ | IP6 { $$.type = T_IP; $$.val.ip = ipa_from_ip6($1); }
+ | CF_SYM_KNOWN {
+ if (($1->class == (SYM_CONSTANT | T_STRING)) ||
+ ($1->class == (SYM_CONSTANT | T_IP)))
+ $$ = *($1->val);
+ else
+ cf_error("String or IP constant expected");
+ }
+ | '(' term ')' {
+ $$ = cf_eval($2, T_VOID);
+ if (($$.type != T_BYTESTRING) && ($$.type != T_STRING))
+ cf_error("Bytestring or string value expected");
+ }
+ ;
+
bytestring:
BYTETEXT
| bytestring_expr { $$ = cf_eval($1, T_BYTESTRING).val.bs; }
diff --git a/proto/rpki/config.Y b/proto/rpki/config.Y
index d6d326b8..c28cab7a 100644
--- a/proto/rpki/config.Y
+++ b/proto/rpki/config.Y
@@ -89,20 +89,22 @@ rpki_keep_interval:
rpki_proto_item_port: PORT expr { check_u16($2); RPKI_CFG->port = $2; };
-rpki_cache_addr:
- text {
- rpki_check_unused_hostname();
- RPKI_CFG->hostname = $1;
- }
- | ipa {
- rpki_check_unused_hostname();
- RPKI_CFG->ip = $1;
- /* Ensure hostname is filled */
- char *hostname = cfg_allocz(INET6_ADDRSTRLEN + 1);
- bsnprintf(hostname, INET6_ADDRSTRLEN+1, "%I", RPKI_CFG->ip);
- RPKI_CFG->hostname = hostname;
- }
- ;
+rpki_cache_addr: text_or_ipa
+{
+ rpki_check_unused_hostname();
+ if ($1.type == T_STRING)
+ RPKI_CFG->hostname = $1.val.s;
+ else if ($1.type == T_IP)
+ {
+ RPKI_CFG->ip = $1.val.ip;
+
+ /* Ensure hostname is filled */
+ char *hostname = cfg_allocz(INET6_ADDRSTRLEN + 1);
+ bsnprintf(hostname, INET6_ADDRSTRLEN+1, "%I", RPKI_CFG->ip);
+ RPKI_CFG->hostname = hostname;
+ }
+ else bug("Bad text_or_ipa");
+};
rpki_transport:
TCP rpki_transport_tcp_init