summaryrefslogtreecommitdiff
path: root/sbin/pfctl/parse.y
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2008-05-08 00:17:27 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2008-05-08 00:17:27 +0000
commitcf59c191343557ad8c794732e4924f766e166f22 (patch)
treef2901d70d56ef128e1996d25144326b2d2ca7a7a /sbin/pfctl/parse.y
parentafd8b494bd4048d83f529bb4c914c346caf218d3 (diff)
Bring back (in a more yacc friendly way) support for setting variables
to a sequence of strings and numbers, which get folded together into one string (and later, when used, is re-lexed) ok mpf
Diffstat (limited to 'sbin/pfctl/parse.y')
-rw-r--r--sbin/pfctl/parse.y36
1 files changed, 22 insertions, 14 deletions
diff --git a/sbin/pfctl/parse.y b/sbin/pfctl/parse.y
index 4d287440639..7edcc91bee6 100644
--- a/sbin/pfctl/parse.y
+++ b/sbin/pfctl/parse.y
@@ -1,4 +1,4 @@
-/* $OpenBSD: parse.y,v 1.540 2008/05/07 08:08:39 deraadt Exp $ */
+/* $OpenBSD: parse.y,v 1.541 2008/05/08 00:17:26 deraadt Exp $ */
/*
* Copyright (c) 2001 Markus Friedl. All rights reserved.
@@ -466,7 +466,8 @@ typedef struct {
%type <v.gid> gids gid_list gid_item
%type <v.route> route
%type <v.redirection> redirection redirpool
-%type <v.string> label string stringall tag anchorname
+%type <v.string> label stringall tag anchorname
+%type <v.string> string varstring numberstring
%type <v.keep_state> keep
%type <v.state_opt> state_opt_spec state_opt_list state_opt_item
%type <v.logquick> logquick quick log logopts logopt
@@ -670,7 +671,7 @@ stringall : STRING { $$ = $1; }
}
;
-string : string STRING {
+string : STRING string {
if (asprintf(&$$, "%s %s", $1, $2) == -1)
err(1, "string: asprintf");
free($1);
@@ -679,26 +680,33 @@ string : string STRING {
| STRING
;
-varset : STRING '=' string {
- if (pf->opts & PF_OPT_VERBOSE)
- printf("%s = \"%s\"\n", $1, $3);
- if (symset($1, $3, 0) == -1)
- err(1, "cannot store variable %s", $1);
+varstring : numberstring varstring {
+ if (asprintf(&$$, "%s %s", $1, $2) == -1)
+ err(1, "string: asprintf");
free($1);
- free($3);
+ free($2);
}
- | STRING '=' NUMBER {
+ | numberstring
+ ;
+
+numberstring : NUMBER {
char *s;
- if (asprintf(&s, "%lld", $3) == -1) {
+ if (asprintf(&s, "%lld", $1) == -1) {
yyerror("string: asprintf");
YYERROR;
}
+ $$ = s;
+ }
+ | STRING
+ ;
+
+varset : STRING '=' varstring {
if (pf->opts & PF_OPT_VERBOSE)
- printf("%s = \"%s\"\n", $1, s);
- if (symset($1, s, 0) == -1)
+ printf("%s = \"%s\"\n", $1, $3);
+ if (symset($1, $3, 0) == -1)
err(1, "cannot store variable %s", $1);
free($1);
- free(s);
+ free($3);
}
;