On Thu, Mar 22, 2012 at 11:44:55AM -0700, John Johansen wrote: > Signed-off-by: John Johansen <john.johan...@canonical.com> > --- > parser/parser.h | 3 ++- > parser/parser_lex.l | 17 +++++++++++++++++ > parser/parser_misc.c | 4 +++- > parser/parser_yacc.y | 15 +++++++++++++-- > parser/tst/simple_tests/mount/in_1.sd | 7 +++++++ > parser/tst/simple_tests/mount/in_1.sd~ | 7 +++++++ > parser/tst/simple_tests/mount/in_2.sd | 7 +++++++ > parser/tst/simple_tests/mount/in_2.sd~ | 7 +++++++ > parser/tst/simple_tests/mount/in_3.sd | 7 +++++++ > parser/tst/simple_tests/mount/in_3.sd~ | 7 +++++++ > parser/tst/simple_tests/mount/in_4.sd | 7 +++++++ > parser/tst/simple_tests/mount/in_4.sd~ | 7 +++++++
Note that you ended up adding in_[1-4].sd~ ; acked with the provision that you remove these. > 12 files changed, 91 insertions(+), 4 deletions(-) > create mode 100644 parser/tst/simple_tests/mount/in_1.sd > create mode 100644 parser/tst/simple_tests/mount/in_1.sd~ > create mode 100644 parser/tst/simple_tests/mount/in_2.sd > create mode 100644 parser/tst/simple_tests/mount/in_2.sd~ > create mode 100644 parser/tst/simple_tests/mount/in_3.sd > create mode 100644 parser/tst/simple_tests/mount/in_3.sd~ > create mode 100644 parser/tst/simple_tests/mount/in_4.sd > create mode 100644 parser/tst/simple_tests/mount/in_4.sd~ > > diff --git a/parser/parser.h b/parser/parser.h > index 799d44b..fa2d191 100644 > --- a/parser/parser.h > +++ b/parser/parser.h > @@ -62,6 +62,7 @@ struct value_list { > > struct cond_entry { > char *name; > + int eq; /* where equals was used in specifying list */ > struct value_list *vals; > > struct cond_entry *next; > @@ -316,7 +317,7 @@ extern struct value_list *new_value_list(char *value); > extern struct value_list *dup_value_list(struct value_list *list); > extern void free_value_list(struct value_list *list); > extern void print_value_list(struct value_list *list); > -extern struct cond_entry *new_cond_entry(char *name, struct value_list > *list); > +extern struct cond_entry *new_cond_entry(char *name, int eq, struct > value_list *list); > extern void free_cond_entry(struct cond_entry *ent); > extern void print_cond_entry(struct cond_entry *ent); > extern char *processid(char *string, int len); > diff --git a/parser/parser_lex.l b/parser/parser_lex.l > index b5627ad..529c079 100644 > --- a/parser/parser_lex.l > +++ b/parser/parser_lex.l > @@ -280,6 +280,18 @@ LT_EQUAL <= > yy_push_state(EXTCOND_MODE); > return TOK_CONDID; > } > + {VARIABLE_NAME}/{WS}*in { > + /* we match to 'in' in the lexer so that > + * we can switch scanner state. By the time > + * the parser see the 'in' it may be to late > + * as bison may have requested the next > + * token from the scanner > + */ > + PDEBUG("conditional %s=\n", yytext); > + yylval.id = processid(yytext, yyleng); > + yy_push_state(EXTCOND_MODE); > + return TOK_CONDID; > + } > } > > <SUB_ID>{ > @@ -384,6 +396,11 @@ LT_EQUAL <= > return TOK_OPENPAREN; > } > > + in { > + DUMP_PREPROCESS; > + return TOK_IN; > + } > + > [^\n] { > DUMP_PREPROCESS; > /* Something we didn't expect */ > diff --git a/parser/parser_misc.c b/parser/parser_misc.c > index 7ff6348..9d2fc4b 100644 > --- a/parser/parser_misc.c > +++ b/parser/parser_misc.c > @@ -84,6 +84,7 @@ static struct keyword_table keyword_table[] = { > {"umount", TOK_UMOUNT}, > {"unmount", TOK_UMOUNT}, > {"pivot_root", TOK_PIVOTROOT}, > + {"in", TOK_IN}, > /* terminate */ > {NULL, 0} > }; > @@ -1025,12 +1026,13 @@ void print_value_list(struct value_list *list) > } > } > > -struct cond_entry *new_cond_entry(char *name, struct value_list *list) > +struct cond_entry *new_cond_entry(char *name, int eq, struct value_list > *list) > { > struct cond_entry *ent = calloc(1, sizeof(struct cond_entry)); > if (ent) { > ent->name = name; > ent->vals = list; > + ent->eq = eq; > } > > return ent; > diff --git a/parser/parser_yacc.y b/parser/parser_yacc.y > index 65cf365..a79be85 100644 > --- a/parser/parser_yacc.y > +++ b/parser/parser_yacc.y > @@ -121,6 +121,7 @@ void add_local_entry(struct codomain *cod); > %token TOK_REMOUNT > %token TOK_UMOUNT > %token TOK_PIVOTROOT > +%token TOK_IN > > /* rlimits */ > %token TOK_RLIMIT > @@ -1072,7 +1073,7 @@ cond: TOK_CONDID TOK_EQUALS TOK_VALUE > struct value_list *value = new_value_list($3); > if (!value) > yyerror(_("Memory allocation error.")); > - ent = new_cond_entry($1, value); > + ent = new_cond_entry($1, 1, value); > if (!ent) { > free_value_list(value); > yyerror(_("Memory allocation error.")); > @@ -1082,7 +1083,17 @@ cond: TOK_CONDID TOK_EQUALS TOK_VALUE > > cond: TOK_CONDID TOK_EQUALS TOK_OPENPAREN valuelist TOK_CLOSEPAREN > { > - struct cond_entry *ent = new_cond_entry($1, $4); > + struct cond_entry *ent = new_cond_entry($1, 1, $4); > + > + if (!ent) > + yyerror(_("Memory allocation error.")); > + $$ = ent; > + } > + > + > +cond: TOK_CONDID TOK_IN TOK_OPENPAREN valuelist TOK_CLOSEPAREN > + { > + struct cond_entry *ent = new_cond_entry($1, 0, $4); > > if (!ent) > yyerror(_("Memory allocation error.")); > diff --git a/parser/tst/simple_tests/mount/in_1.sd > b/parser/tst/simple_tests/mount/in_1.sd > new file mode 100644 > index 0000000..076d5dc > --- /dev/null > +++ b/parser/tst/simple_tests/mount/in_1.sd > @@ -0,0 +1,7 @@ > +# > +#=Description basic mount rule > +#=EXRESULT PASS > +# > +/usr/bin/foo { > + mount options in (rw) -> /foo, > +} > diff --git a/parser/tst/simple_tests/mount/in_1.sd~ > b/parser/tst/simple_tests/mount/in_1.sd~ > new file mode 100644 > index 0000000..3b552f7 > --- /dev/null > +++ b/parser/tst/simple_tests/mount/in_1.sd~ > @@ -0,0 +1,7 @@ > +# > +#=Description basic mount rule > +#=EXRESULT PASS > +# > +/usr/bin/foo { > + mount options=(rw) -> /foo, > +} > diff --git a/parser/tst/simple_tests/mount/in_2.sd > b/parser/tst/simple_tests/mount/in_2.sd > new file mode 100644 > index 0000000..5bf4beb > --- /dev/null > +++ b/parser/tst/simple_tests/mount/in_2.sd > @@ -0,0 +1,7 @@ > +# > +#=Description basic mount rule > +#=EXRESULT PASS > +# > +/usr/bin/foo { > + mount options in (rw, ro) -> /foo, > +} > diff --git a/parser/tst/simple_tests/mount/in_2.sd~ > b/parser/tst/simple_tests/mount/in_2.sd~ > new file mode 100644 > index 0000000..12c21aa > --- /dev/null > +++ b/parser/tst/simple_tests/mount/in_2.sd~ > @@ -0,0 +1,7 @@ > +# > +#=Description basic mount rule > +#=EXRESULT PASS > +# > +/usr/bin/foo { > + mount options=(rw, ro) -> /foo, > +} > diff --git a/parser/tst/simple_tests/mount/in_3.sd > b/parser/tst/simple_tests/mount/in_3.sd > new file mode 100644 > index 0000000..cd5bae5 > --- /dev/null > +++ b/parser/tst/simple_tests/mount/in_3.sd > @@ -0,0 +1,7 @@ > +# > +#=Description basic mount rule > +#=EXRESULT PASS > +# > +/usr/bin/foo { > + mount options in (rw ro) -> /foo, > +} > diff --git a/parser/tst/simple_tests/mount/in_3.sd~ > b/parser/tst/simple_tests/mount/in_3.sd~ > new file mode 100644 > index 0000000..08aa1bb > --- /dev/null > +++ b/parser/tst/simple_tests/mount/in_3.sd~ > @@ -0,0 +1,7 @@ > +# > +#=Description basic mount rule > +#=EXRESULT PASS > +# > +/usr/bin/foo { > + mount options=(rw ro) -> /foo, > +} > diff --git a/parser/tst/simple_tests/mount/in_4.sd > b/parser/tst/simple_tests/mount/in_4.sd > new file mode 100644 > index 0000000..8acaa88 > --- /dev/null > +++ b/parser/tst/simple_tests/mount/in_4.sd > @@ -0,0 +1,7 @@ > +# > +#=Description basic mount rule > +#=EXRESULT PASS > +# > +/usr/bin/foo { > + mount options in (rw ro) fstype=procfs -> /foo, > +} > diff --git a/parser/tst/simple_tests/mount/in_4.sd~ > b/parser/tst/simple_tests/mount/in_4.sd~ > new file mode 100644 > index 0000000..96a93a2 > --- /dev/null > +++ b/parser/tst/simple_tests/mount/in_4.sd~ > @@ -0,0 +1,7 @@ > +# > +#=Description basic mount rule > +#=EXRESULT PASS > +# > +/usr/bin/foo { > + mount options=(rw ro) fstype=procfs -> /foo, > +} > -- > 1.7.9.1 > > > -- > AppArmor mailing list > AppArmor@lists.ubuntu.com > Modify settings or unsubscribe at: > https://lists.ubuntu.com/mailman/listinfo/apparmor -- Steve Beattie <sbeat...@ubuntu.com> http://NxNW.org/~steve/
signature.asc
Description: Digital signature
-- AppArmor mailing list AppArmor@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor