[apparmor] [PATCH 8/9] Convert FLAGS_MODE start condition to a generic list of values start cond
John Johansen
john.johansen at canonical.com
Wed Dec 28 03:01:51 UTC 2011
Signed-off-by: John Johansen <john.johansen at canonical.com>
---
parser/parser_lex.l | 41 ++++++++++++++++++++++++-----------------
parser/parser_misc.c | 2 --
parser/parser_yacc.y | 21 +++++++++------------
3 files changed, 33 insertions(+), 31 deletions(-)
diff --git a/parser/parser_lex.l b/parser/parser_lex.l
index 1d59f43..fc787c2 100644
--- a/parser/parser_lex.l
+++ b/parser/parser_lex.l
@@ -180,11 +180,13 @@ MODES {MODE_CHARS}+
WS [[:blank:]]
NUMBER [[:digit:]]+
ID [^ \t\n"!,]|(,[^ \t\n"!])
+LIST_VALUE_ID [^ \t\n"!,()]|([^ \t\n"!(),])
POST_VAR_ID [^ =\+\t\n"!,]|(,[^ =\+\t\n"!])
IP {NUMBER}\.{NUMBER}\.{NUMBER}\.{NUMBER}
ALLOWED_QUOTED_ID [^\0"]|\\\"
QUOTED_ID \"{ALLOWED_QUOTED_ID}*\"
+FLAGS flags{WS}*=?{WS}*
HAT hat{WS}*
PROFILE profile{WS}*
KEYWORD [[:alpha:]_]+
@@ -198,7 +200,7 @@ QPATHNAME \"(\/|{SET_VAR_PREFIX})([^\0"]|\\\")*\"
OPEN_PAREN \(
CLOSE_PAREN \)
-FLAGSEP \,
+COMMA \,
EQUALS =
ADD_ASSIGN \+=
ARROW ->
@@ -206,7 +208,7 @@ LT_EQUAL <=
%x SUB_NAME
%x NETWORK_MODE
-%x FLAGS_MODE
+%x LIST_VAL_MODE
%x ASSIGN_MODE
%x RLIMIT_MODE
%x CHANGE_PROFILE_MODE
@@ -268,37 +270,40 @@ LT_EQUAL <=
}
}
-<FLAGS_MODE>{
+<LIST_VAL_MODE>{
{OPEN_PAREN} {
DUMP_PREPROCESS;
- PDEBUG("FLag (\n");
+ PDEBUG("listval: )\n");
+ yy_push_state(LIST_VAL_MODE);
return TOK_OPENPAREN;
}
+
{CLOSE_PAREN} {
DUMP_PREPROCESS;
- PDEBUG("Flag )\n");
+ PDEBUG("listval: )\n");
yy_pop_state();
return TOK_CLOSEPAREN;
}
{WS}+ { DUMP_PREPROCESS; /* Eat whitespace */ }
- {FLAGSEP} {
+ {COMMA} {
DUMP_PREPROCESS;
- PDEBUG("Flag , \n");
- return TOK_FLAG_SEP;
+ PDEBUG("listval: , \n");
+ return TOK_COMMA;
}
{EQUALS} {
DUMP_PREPROCESS;
- PDEBUG("Flag = \n");
+ PDEBUG("listval: = \n");
return TOK_EQUALS;
}
- {KEYWORD} {
+
+ ({LIST_VALUE_ID}+|{QUOTED_ID}) {
DUMP_PREPROCESS;
- yylval.flag_id = strdup(yytext);
- PDEBUG("Found flag: \"%s\"\n", yylval.flag_id);
- return TOK_FLAG_ID;
+ yylval.id = processid(yytext, yyleng);
+ PDEBUG("listval: \"%s\"\n", yylval.id);
+ return TOK_ID;
}
[^\n] {
@@ -508,6 +513,11 @@ LT_EQUAL <=
return TOK_MODE;
}
+{FLAGS} {
+ DUMP_PREPROCESS;
+ return TOK_FLAGS;
+ }
+
{HAT} {
DUMP_PREPROCESS;
yy_push_state(SUB_NAME);
@@ -529,7 +539,7 @@ LT_EQUAL <=
{OPEN_PAREN} {
DUMP_PREPROCESS;
PDEBUG("FLag (\n");
- yy_push_state(FLAGS_MODE);
+ yy_push_state(LIST_VAL_MODE);
return TOK_OPENPAREN;
}
@@ -545,9 +555,6 @@ LT_EQUAL <=
PDEBUG("Found (var) id: \"%s\"\n", yylval.id);
return TOK_ID;
break;
- case TOK_FLAGS:
- yy_push_state(FLAGS_MODE);
- break;
case TOK_RLIMIT:
yy_push_state(RLIMIT_MODE);
break;
diff --git a/parser/parser_misc.c b/parser/parser_misc.c
index 64030ab..ebaa887 100644
--- a/parser/parser_misc.c
+++ b/parser/parser_misc.c
@@ -54,8 +54,6 @@ struct keyword_table {
};
static struct keyword_table keyword_table[] = {
- /* flags */
- {"flags", TOK_FLAGS},
/* network */
{"network", TOK_NETWORK},
/* misc keywords */
diff --git a/parser/parser_yacc.y b/parser/parser_yacc.y
index 1b169f0..7e28d37 100644
--- a/parser/parser_yacc.y
+++ b/parser/parser_yacc.y
@@ -112,6 +112,7 @@ void add_local_entry(struct codomain *cod);
%token TOK_PTRACE
%token TOK_OPENPAREN
%token TOK_CLOSEPAREN
+%token TOK_COMMA
/* rlimits */
%token TOK_RLIMIT
@@ -138,8 +139,6 @@ void add_local_entry(struct codomain *cod);
/* debug flag values */
%token TOK_FLAGS
-%token TOK_FLAG_SEP
-%token TOK_FLAG_ID
%union {
char *id;
@@ -176,7 +175,6 @@ void add_local_entry(struct codomain *cod);
%type <flags> flags
%type <flags> flagvals
%type <flags> flagval
-%type <flag_id> TOK_FLAG_ID
%type <cap> caps
%type <cap> capability
%type <cap> set_caps
@@ -191,6 +189,7 @@ void add_local_entry(struct codomain *cod);
%type <boolean> opt_audit_flag
%type <boolean> opt_owner_flag
%type <boolean> opt_profile_flag
+%type <boolean> opt_flags
%type <id> opt_namespace
%type <id> opt_id
%type <transition> opt_named_transition
@@ -397,17 +396,15 @@ flags: { /* nothing */
$$ = fv;
};
-flags: TOK_FLAGS TOK_EQUALS TOK_OPENPAREN flagvals TOK_CLOSEPAREN
- {
- $$ = $4;
- };
+opt_flags: { /* nothing */ $$ = 0; }
+ | TOK_FLAGS { $$ = 1; }
-flags: TOK_OPENPAREN flagvals TOK_CLOSEPAREN
+flags: opt_flags TOK_OPENPAREN flagvals TOK_CLOSEPAREN
{
- $$ = $2;
- }
+ $$ = $3;
+ };
-flagvals: flagvals TOK_FLAG_SEP flagval
+flagvals: flagvals TOK_COMMA flagval
{
$1.complain = $1.complain || $3.complain;
$1.audit = $1.audit || $3.audit;
@@ -434,7 +431,7 @@ flagvals: flagval
$$ = $1;
};
-flagval: TOK_FLAG_ID
+flagval: TOK_ID
{
struct flagval fv = { 0, 0, 0, 0 };
if (strcmp($1, "debug") == 0) {
--
1.7.7.3
More information about the AppArmor
mailing list