From: David Caplan <dac@tresys.com>
To: Stephen Smalley <sds@epoch.ncsc.mil>
Cc: Russell Coker <russell@coker.com.au>, SE Linux <selinux@tycho.nsa.gov>
Subject: Re: specifying groups of types
Date: Tue, 14 Oct 2003 14:56:36 -0400 [thread overview]
Message-ID: <3F8C46E4.1030403@tresys.com> (raw)
In-Reply-To: <1066134168.5054.11.camel@moss-spartans.epoch.ncsc.mil>
[-- Attachment #1: Type: text/plain, Size: 1980 bytes --]
Russell,
Here's a quick hack that appears to work. It turns off the type (or
list of types if used on an attribute) when building the bitmap of types
for a rule. The syntax is to use a '-' in front of a type or attribute
name.
allow some_domain { file_type -shadow_t -null_device_t -exec_type}:...
The proper way to do this is in the yacc parsing section. All I did was
allow '-' as the first character of an identifier (policy_scan.l) and
handle the subtraction of the type/attribute in
policy_parse.y:set_types(). The danger is that types (and anything
using the identifier definition) can be declared with '-' as the first
character and cause problems. The advantage, in theory, is that
wherever a list of types/attributes is processed, the '-' notation can
be used to turn off types. So, you should also be able to do something
like:
allow { auth -crond_t } file_type:...
Types/attributes are processed in order, and subsequent allow rules can
also override the subtraction.
I'd recommend trying this out and if you find it useful change the parse
rules. I tested it on some real basic policy, so it may cause other
unintended problems. I'm throwing it out more as a starting point
rather than something intended to be integrated into checkpolicy.
David
Stephen Smalley wrote:
> On Sat, 2003-10-11 at 00:35, Russell Coker wrote:
>
>>Following a discussion on IRC, it occurs to me that it would be handy to have
>>the following in the policy language:
>>allow some_domain { file_type !shadow_t }:...
>>
>>So we can specify everything in file_type except for shadow_t.
>
>
> Yes, although I'm not sure about the notation; might be better to
> provide a set difference operator, e.g.
> file_type - shadow_t
>
> Are you offering to implement this enhancement to checkpolicy?
>
--
__________________________________
David Caplan 410 290 1411 x105
dac@tresys.com
Tresys Technology, LLC
8840 Stanford Blvd., Suite 2100
Columbia, MD 21045
[-- Attachment #2: checkpolicy.patch --]
[-- Type: text/plain, Size: 2637 bytes --]
diff -ruN checkpolicy.old/policy_parse.y checkpolicy/policy_parse.y
--- checkpolicy.old/policy_parse.y 2003-10-15 07:15:18.431551648 -0400
+++ checkpolicy/policy_parse.y 2003-10-15 07:19:00.550784392 -0400
@@ -1,6 +1,10 @@
/*
* Author : Stephen Smalley, <sds@epoch.ncsc.mil>
+ *
+ * Modified October 14, 2003 David Caplan, <dac@tresys.com>
+ * - allow exclusion of types and attributes in type/attribute lists
+ *
*/
/* FLASK */
@@ -1660,10 +1664,11 @@
{
type_datum_t *t;
int i;
+ int add = TRUE;
if (strcmp(id, "*") == 0) {
/* set all types */
- for (i = 0; i < policydbp->p_types.nprim; i++)
+ for (i = 0; i < policydbp->p_types.nprim; i++)
ebitmap_set_bit(set, i, TRUE);
free(id);
return 0;
@@ -1674,14 +1679,27 @@
for (i = 0; i < policydbp->p_types.nprim; i++) {
if (ebitmap_get_bit(set, i))
ebitmap_set_bit(set, i, FALSE);
- else
+ else
ebitmap_set_bit(set, i, TRUE);
}
free(id);
return 0;
}
- t = hashtab_search(policydbp->p_types.table, id);
+ /* see if we want to exclude type/attribute */
+ if (id[0] == '-') {
+ if (strlen(id) == 1) {
+ sprintf(errormsg, "illegal identifier %s", id);
+ yyerror(errormsg);
+ free(id);
+ return -1;
+ }
+ add = FALSE;
+ t = hashtab_search(policydbp->p_types.table, id+1);
+ } else {
+ t = hashtab_search(policydbp->p_types.table, id);
+ }
+
if (!t) {
sprintf(errormsg, "unknown type %s", id);
yyerror(errormsg);
@@ -1693,12 +1711,13 @@
/* set all types with this attribute */
for (i = ebitmap_startbit(&t->types); i < ebitmap_length(&t->types); i++) {
if (!ebitmap_get_bit(&t->types, i))
- continue;
- ebitmap_set_bit(set, i, TRUE);
+ continue;
+ /* set or clear bit depending on add */
+ ebitmap_set_bit(set, i, add);
}
} else {
- /* set one type */
- ebitmap_set_bit(set, t->value - 1, TRUE);
+ /* set or clear (depending on add) one type */
+ ebitmap_set_bit(set, t->value - 1, add);
}
free(id);
diff -ruN checkpolicy.old/policy_scan.l checkpolicy/policy_scan.l
--- checkpolicy.old/policy_scan.l 2003-10-15 07:15:18.426552408 -0400
+++ checkpolicy/policy_scan.l 2003-10-15 07:10:39.149009048 -0400
@@ -127,7 +127,7 @@
t2 |
T2 { return(T2); }
"/"({letter}|{digit}|_|"."|"-"|"/")* { return(PATH); }
-{letter}({letter}|{digit}|_)* { return(IDENTIFIER); }
+({letter}|"-")({letter}|{digit}|_)* { return(IDENTIFIER); }
{letter}({letter}|{digit}|_|"."|"-")* { return(USER_IDENTIFIER); }
{digit}{digit}* { return(NUMBER); }
#[^\n]* { /* delete comments */ }
next prev parent reply other threads:[~2003-10-14 18:55 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-11 4:35 specifying groups of types Russell Coker
2003-10-14 12:22 ` Stephen Smalley
2003-10-14 18:56 ` David Caplan [this message]
2003-10-16 5:07 ` Chris PeBenito
2003-11-02 17:43 ` Chris PeBenito
2003-11-03 13:53 ` Stephen Smalley
2003-11-03 13:55 ` David Caplan
2004-01-15 14:31 ` Stephen Smalley
2004-01-16 16:50 ` Karl MacMillan
2004-01-16 18:17 ` Stephen Smalley
2004-01-16 18:36 ` Karl MacMillan
2004-01-16 18:48 ` Stephen Smalley
2004-01-16 21:03 ` Trival relabel Problem Thomas DuBuisson
2004-01-16 21:14 ` Stephen Smalley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3F8C46E4.1030403@tresys.com \
--to=dac@tresys.com \
--cc=russell@coker.com.au \
--cc=sds@epoch.ncsc.mil \
--cc=selinux@tycho.nsa.gov \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.