class infoflow
class infoflow2
class infoflow3
class infoflow4
class infoflow5
class infoflow6
class infoflow7

sid kernel
sid security

common infoflow
{
	low_w
	med_w
	hi_w
	low_r
	med_r
	hi_r
}

class infoflow
inherits infoflow

class infoflow2
inherits infoflow
{
	super_w
	super_r
}

class infoflow3
{
	null
}

class infoflow4
inherits infoflow

class infoflow5
inherits infoflow

class infoflow6
inherits infoflow

class infoflow7
inherits infoflow
{
	super_w
	super_r
	super_none
	super_both
	super_unmapped
}

sensitivity low_s;
sensitivity medium_s alias med;
sensitivity high_s;

dominance { low_s med high_s }

category here;
category there;
category elsewhere alias lost;

#level decl
level low_s:here.there;
level med:here, elsewhere;
level high_s:here.lost;

#some constraints
mlsconstrain infoflow hi_r ((l1 dom l2) or (t1 == mls_exempt));

attribute mls_exempt;

type system;
role system;
role system types system;

################################################################################
# Type enforcement declarations and rules

type test1a;
type test1b;
allow test1a test1b:infoflow hi_w;

################################################################################

# Roles for config tests:
role src;
role tgt;
role exempt_src1;
role exempt_tgt1;
role exempt_src2;
role exempt_tgt2;

role exempt_source_role;
role exempt_target_role;

# pass, exempt source
role source1;
role target1;
allow source1 target1;

# pass, exempt target
role source2;
role target2;
allow source2 target2;

# pass, expect source
role source3a;
role source3b;
role target3;
allow source3a target3;
allow source3b target3;

# pass, expect target
role source4;
role target4a;
role target4b;
allow source4 target4a;
allow source4 target4b;

# pass, expected and exempt sources
role source5a;
role source5b;
role target5;
allow source5a target5;
allow source5b target5;

# pass, expected and exempt targets
role source6;
role target6a;
role target6b;
allow source6 target6a;
allow source6 target6b;

# fail
role source7;
role target7a;
role target7b;
role target7c;
allow source7 target7a;
allow source7 target7b;
allow source7 target7c;

# fail, expect source
role source8;
role target8;

# fail, expect target
role source9;
role target9;

#users
user system roles system level med range low_s - high_s:here.lost;

#normal constraints
constrain infoflow hi_w (u1 == u2);

#isids
sid kernel system:system:system:medium_s:here
sid security system:system:system:high_s:lost

#fs_use
fs_use_trans devpts system:object_r:system:low_s;
fs_use_xattr ext3 system:object_r:system:low_s;
fs_use_task pipefs system:object_r:system:low_s;

#genfscon
genfscon proc / system:object_r:system:med
genfscon proc /sys system:object_r:system:low_s
genfscon selinuxfs / system:object_r:system:high_s:here.there

portcon tcp 80 system:object_r:system:low_s

netifcon eth0 system:object_r:system:low_s system:object_r:system:low_s

nodecon 127.0.0.1 255.255.255.255 system:object_r:system:low_s:here
nodecon ::1 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff system:object_r:system:low_s:here

