[apparmor] [PATCH 1/5] Merge profile and :namespace:profile parsing into a single rule. This also fixes a bug where the profile keyword was not allowed to proceed profiles with a namespace declaration.
Steve Beattie
steve at nxnw.org
Mon Nov 29 20:07:57 GMT 2010
On Tue, Nov 23, 2010 at 01:18:51AM -0800, John Johansen wrote:
> Signed-off-by: John Johansen <john.johansen at canonical.com>
Acked-By: Steve Beattie <sbeattie at ubuntu.com>
(Can you make sure parser/tst/simple_tests/profile/profile_ns_ok1.sd
gets an ending newline?)
> ---
> parser/parser_yacc.y | 48 +++++++--------------
> parser/tst/simple_tests/profile/profile_ns_ok1.sd | 35 +++++++++++++++
> 2 files changed, 51 insertions(+), 32 deletions(-)
>
> diff --git a/parser/parser_yacc.y b/parser/parser_yacc.y
> index bf9bf08..4c0da5a 100644
> --- a/parser/parser_yacc.y
> +++ b/parser/parser_yacc.y
> @@ -190,6 +190,7 @@ struct codomain *do_local_profile(struct codomain *cod, char *name, int mode, in
> %type <boolean> opt_audit_flag
> %type <boolean> opt_owner_flag
> %type <boolean> opt_profile_flag
> +%type <id> opt_namespace
> %type <transition> opt_named_transition
>
> %%
> @@ -210,19 +211,27 @@ opt_profile_flag: { /* nothing */ $$ = 0; }
> | TOK_PROFILE { $$ = 1; }
> | hat_start { $$ = 2; }
>
> -profile: opt_profile_flag TOK_ID flags TOK_OPEN rules TOK_CLOSE
> +opt_namespace: { /* nothing */ $$ = NULL; }
> +| TOK_COLON TOK_ID TOK_COLON { fprintf(stderr, "namespace %s\n", $2); $$ = $2; }
> +
> +profile: opt_profile_flag opt_namespace TOK_ID flags TOK_OPEN rules TOK_CLOSE
> {
> - struct codomain *cod = $5;
> - PDEBUG("Matched: id (%s) open rules close\n", $2);
> + struct codomain *cod = $6;
> + if ($2)
> + PDEBUG("Matched: id (%s://%s) open rules close\n", $2, $3);
> + else
> + PDEBUG("Matched: id (%s) open rules close\n", $3);
> +
> if (!cod) {
> yyerror(_("Memory allocation error."));
> }
>
> - if (!$1 && $2[0] != '/')
> - yyerror(_("Profile names must begin with a '/', or keyword 'profile' or 'hat'."));
> + if ($3[0] != '/' && !($1 || $2))
> + yyerror(_("Profile names must begin with a '/', namespace or keyword 'profile' or 'hat'."));
>
> - cod->name = $2;
> - cod->flags = $3;
> + cod->namespace = $2;
> + cod->name = $3;
> + cod->flags = $4;
> if (force_complain)
> cod->flags.complain = 1;
> if ($1 == 2)
> @@ -237,31 +246,6 @@ profile: opt_profile_flag TOK_ID flags TOK_OPEN rules TOK_CLOSE
> $$ = cod;
> };
>
> -profile: opt_profile_flag TOK_COLON TOK_ID TOK_COLON TOK_ID flags TOK_OPEN rules TOK_CLOSE
> - {
> - struct codomain *cod = $8;
> - PDEBUG("Matched: id (%s:%s) open rules close\n", $3, $5);
> - if (!cod) {
> - yyerror(_("Memory allocation error."));
> - }
> -
> - cod->namespace = $3;
> - cod->name = $5;
> - cod->flags = $6;
> - if (force_complain)
> - cod->flags.complain = 1;
> - if ($1 == 2)
> - cod->flags.hat = 1;
> -
> - post_process_nt_entries(cod);
> - PDEBUG("%s: flags='%s%s'\n",
> - $3,
> - cod->flags.complain ? "complain, " : "",
> - cod->flags.audit ? "audit" : "");
> -
> - $$ = cod;
> - };
> -
> preamble: { /* nothing */ }
> | preamble alias { /* nothing */ };
> | preamble varassign { /* nothing */ };
> diff --git a/parser/tst/simple_tests/profile/profile_ns_ok1.sd b/parser/tst/simple_tests/profile/profile_ns_ok1.sd
> index e3cc5e1..cc0f682 100644
> --- a/parser/tst/simple_tests/profile/profile_ns_ok1.sd
> +++ b/parser/tst/simple_tests/profile/profile_ns_ok1.sd
> @@ -17,3 +17,38 @@
> /bin/echo uxuxuxuxux,
> }
>
> +profile :foo:/does/not/exist2 {
> + #include <includes/base>
> +
> + /usr/X11R6/lib/lib*so* rrr,
> + /does/not/exist r,
> + /var/log/messages www,
> + /tmp/sd*.foo rwrwwrll,
> + /bin/cat pxpxpxpxpx,
> + /bin/ls ixixixix,
> + /bin/echo uxuxuxuxux,
> +}
> +
> +:foo:unattached {
> + #include <includes/base>
> +
> + /usr/X11R6/lib/lib*so* rrr,
> + /does/not/exist r,
> + /var/log/messages www,
> + /tmp/sd*.foo rwrwwrll,
> + /bin/cat pxpxpxpxpx,
> + /bin/ls ixixixix,
> + /bin/echo uxuxuxuxux,
> +}
> +
> +profile :foo:unattached {
> + #include <includes/base>
> +
> + /usr/X11R6/lib/lib*so* rrr,
> + /does/not/exist r,
> + /var/log/messages www,
> + /tmp/sd*.foo rwrwwrll,
> + /bin/cat pxpxpxpxpx,
> + /bin/ls ixixixix,
> + /bin/echo uxuxuxuxux,
> +}
> \ No newline at end of file
> --
> 1.7.1
>
>
> --
> AppArmor mailing list
> AppArmor at lists.ubuntu.com
> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
--
Steve Beattie
<sbeattie at ubuntu.com>
http://NxNW.org/~steve/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
Url : https://lists.ubuntu.com/archives/apparmor/attachments/20101129/fb47f42f/attachment.pgp
More information about the AppArmor
mailing list