[apparmor] [PATCH 6/9] Update parsing of the 'hat' and 'profile' keyword to use SUB_NAME

John Johansen john.johansen at canonical.com
Wed Dec 28 03:01:49 UTC 2011


Change how we handle the parsing of the hat and profile keywords this allows
us to get rid of the SUB_NAME2 start condition because the the whitespace
that is allowed by these rules are now consumed by matching the keyword

Signed-off-by: John Johansen <john.johansen at canonical.com>
---
 parser/parser_lex.l  |   39 +++++++++------------------------------
 parser/parser_misc.c |    1 -
 2 files changed, 9 insertions(+), 31 deletions(-)

diff --git a/parser/parser_lex.l b/parser/parser_lex.l
index 5cb24fb..64b6a2e 100644
--- a/parser/parser_lex.l
+++ b/parser/parser_lex.l
@@ -186,7 +186,8 @@ IP		{NUMBER}\.{NUMBER}\.{NUMBER}\.{NUMBER}
 ALLOWED_QUOTED_ID 	[^\0"]|\\\"
 QUOTED_ID	\"{ALLOWED_QUOTED_ID}*\"
 
-HAT		hat[ \t]+
+HAT		hat{WS}*
+PROFILE		profile{WS}*
 KEYWORD         [[:alpha:]_]+
 VARIABLE_NAME	[[:alpha:]][[:alnum:]_]*
 SET_VAR_PREFIX  @
@@ -205,7 +206,6 @@ ARROW		->
 LT_EQUAL	<=
 
 %x SUB_NAME
-%x SUB_NAME2
 %x NETWORK_MODE
 %x FLAGS_MODE
 %x ASSIGN_MODE
@@ -269,30 +269,6 @@ LT_EQUAL	<=
 		}
 }
 
-<SUB_NAME2>{
-	({ID}+|{QUOTED_ID})	{
-			  /* Ugh, this is a gross hack. I used to use
-			   * {ID}+ to match all TOK_IDs, but that would
-			   * also match TOK_MODE + TOK_END_OF_RULE
-			   * without any spaces in between (because it's
-			   * a longer match). So now, when I want to
-			   * match any random string, I go into a
-			   * separate state. */
-			DUMP_PREPROCESS;
-			yylval.id = processid(yytext, yyleng);
-			PDEBUG("Found sub name: \"%s\"\n", yylval.id);
-			yy_pop_state();
-			return TOK_ID;
-		}
-
-	{WS}+	{ DUMP_PREPROCESS; /* Ignoring whitespace */ }
-	[^\n]	{
-			DUMP_PREPROCESS;
-			/* Something we didn't expect */
-			yyerror(_("Found unexpected character: '%s'"), yytext);
-		}
-}
-
 <FLAGS_MODE>{
 	{OPEN_PAREN}	{
 			DUMP_PREPROCESS;
@@ -535,10 +511,16 @@ LT_EQUAL	<=
 
 {HAT}			{
 			DUMP_PREPROCESS;
-			yy_push_state(SUB_NAME2);
+			yy_push_state(SUB_NAME);
 			return TOK_HAT;
 			}
 
+{PROFILE}		{
+			DUMP_PREPROCESS;
+			yy_push_state(SUB_NAME);
+			return TOK_PROFILE;
+			}
+
 {COLON}			{
 			DUMP_PREPROCESS;
 			PDEBUG("Found a colon\n");
@@ -564,9 +546,6 @@ LT_EQUAL	<=
 				PDEBUG("Found (var) id: \"%s\"\n", yylval.id);
 				return TOK_ID;
 				break;
-			case TOK_PROFILE:
-				yy_push_state(SUB_NAME2);
-				break;
 			case TOK_FLAGS:
 				yy_push_state(FLAGS_MODE);
 				break;
diff --git a/parser/parser_misc.c b/parser/parser_misc.c
index e438d4e..64030ab 100644
--- a/parser/parser_misc.c
+++ b/parser/parser_misc.c
@@ -74,7 +74,6 @@ static struct keyword_table keyword_table[] = {
 	{"subset",		TOK_SUBSET},
 	{"audit",		TOK_AUDIT},
 	{"deny",		TOK_DENY},
-	{"profile",		TOK_PROFILE},
 	{"set",			TOK_SET},
 	{"rlimit",		TOK_RLIMIT},
 	{"alias",		TOK_ALIAS},
-- 
1.7.7.3




More information about the AppArmor mailing list