(type bin_t)
(type kernel_t)
(type security_t)
(type unlabeled_t)
(handleunknown allow)
(mls true)

(policycap open_perms)

(category c0)
(category c1)
(category c2)
(category c3)
(category c4)
(category c5)
(categoryalias cat0)
(categoryaliasactual cat0 c0)
(categoryset cats01 (c0 c1))
(categoryset cats02 (c2 c3))
(categoryset cats03 (range c0 c5))
(categoryset cats04 (not (range c0 c2)))
(categoryorder (cat0 c1 c2 c3))
(categoryorder (c3 c4 c5))

(sensitivity s0)
(sensitivity s1)
(sensitivity s2)
(sensitivity s3)
(sensitivityalias sens0)
(sensitivityaliasactual sens0 s0)
(sensitivityorder (s0 s1 s2 s3))

(sensitivitycategory s0 (cats03))
(sensitivitycategory s1 cats01)
(sensitivitycategory s1 (c2))
(sensitivitycategory s2 (cats01 cats02))
(sensitivitycategory s2 (range c4 c5))
(sensitivitycategory s3 (range c0 c5))

(level low (s0))
(level high (s3 (range c0 c3)))
(levelrange low_high (low high))
(levelrange lh1 ((s0 (c0)) (s2 (c0 c3))))
(levelrange lh2 (low (s2 (c0 c3))))
(levelrange lh3 ((s0 cats04) (s2 (range c0 c5))))
(levelrange lh4 ((s0) (s1)))

(block policy
	(class file (execute_no_trans entrypoint execmod open audit_access a b c d e))
	; order should be: file char b c a dir d e f
	(classorder (file char))
	(classorder (unordered dir))
	(classorder (unordered c a b d e f))
	(classorder (char b c a))

	(common file (ioctl read write create getattr setattr lock relabelfrom
			relabelto append unlink link rename execute swapon
			quotaon mounton))
	(classcommon file file)

	(classpermission file_rw)
	(classpermissionset file_rw (file (read write getattr setattr lock append)))

	;;(classpermission loop1)
	;;(classpermissionset loop1 ((loop2)))
	;;(classpermission loop2)
	;;(classpermissionset loop2 ((loop3)))
	;;(classpermission loop3)
	;;(classpermissionset loop3 ((loop1)))

	(class char (foo))
	(classcommon char file)

	(class dir ())
	(class a ())
	(class b ())
	(class c ())
	(class d ())
	(class e ())
	(class f ())
	(classcommon dir file)

	(classpermission char_w)
	(classpermissionset char_w (char (write setattr)))
	(classpermissionset char_w (file (open read getattr)))

	(classmap files (read))
	(classmapping files read
		(file (open read getattr)))
	(classmapping files read
		char_w)

	(type auditadm_t)
	(type console_t)
	(type console_device_t)
	(type user_tty_device_t)		
	(type device_t)
	(type getty_t)
	(type exec_t)
	(type bad_t)

	;;(allow console_t console_device_t file_rw)
	(allow console_t console_device_t (files (read)))

	(permissionx ioctl_test (ioctl files (and (range 0x1600 0x19FF) (not (range 0x1750 0x175F)))))
	(allowx console_t console_device_t ioctl_test)

	(boolean secure_mode false)
	(boolean console_login true)
	
	(sid kernel)
	(sid security)
	(sid unlabeled)
	(sidorder (kernel security))
	(sidorder (security unlabeled))
		
	(typeattribute exec_type)
	(typeattribute foo_type)
	(typeattribute bar_type)
	(typeattribute baz_type)
	(typeattribute not_bad_type)
	(typeattributeset exec_type (or bin_t kernel_t))
	(typeattributeset foo_type (and exec_type kernel_t))
	(typeattributeset bar_type (xor exec_type foo_type))
	(typeattributeset baz_type (not bin_t))
	(typeattributeset baz_type (and exec_type (and bar_type bin_t)))
	(typeattributeset not_bad_type (not bad_t))
	(typealias sbin_t)
	(typealiasactual sbin_t bin_t)
	(typepermissive device_t) 
	(typemember device_t bin_t file exec_t)
	(typetransition device_t console_t files console_device_t)

	(roleattribute exec_role)
	(roleattribute foo_role)
	(roleattribute bar_role)
	(roleattribute baz_role)
	(roleattribute foo_role_a)
	(roleattributeset exec_role (or user_r system_r))
	(roleattributeset foo_role_a (baz_r user_r system_r))
	(roleattributeset foo_role (and exec_role system_r))
	(roleattributeset bar_role (xor exec_role foo_role))
	(roleattributeset baz_role (not user_r))

	(rangetransition device_t console_t file low_high)
	(rangetransition device_t kernel_t file ((s0) (s3 (not c3))))

	(typetransition device_t console_t file "some_file" getty_t)
	
	(allow foo_type self (file (execute)))
	(allow bin_t device_t (file (execute)))

	;; Next two rules violate the neverallow rule that follows
	;;(allow bad_t not_bad_type (file (execute)))
	;;(allow bad_t exec_t (file (execute)))
	(neverallow bad_t not_bad_type (file (execute)))
			
	(booleanif secure_mode
		(true
			(auditallow device_t exec_t (file (read write)))
		)
	)

	(booleanif console_login
		(true
			(typechange auditadm_t console_device_t file user_tty_device_t)
			(allow getty_t console_device_t (file (getattr open read write append)))
		)
		(false
			(dontaudit getty_t console_device_t (file (getattr open read write append)))
		)
	)

	(booleanif (not (xor (eq secure_mode console_login) 
				(and (or secure_mode console_login) secure_mode ) ) )
		(true
			(allow bin_t exec_t (file (execute)))
		)
	)

	(tunable allow_execfile true)
	(tunable allow_userexec false)

	(tunableif (not (xor (eq allow_execfile allow_userexec)
				(and (or allow_execfile allow_userexec)
					(and allow_execfile allow_userexec) ) ) )
		(true
			(allow bin_t exec_t (file (execute)))
		)
	)

	(optional allow_rules 
		(allow user_t exec_t (bins (execute)))
	)

	(dontaudit device_t auditadm_t (file (read)))
	(auditallow device_t auditadm_t (file (open)))

	(user system_u)
	(user user_u)
	(user foo_u)
	(userprefix user_u user)
	(userprefix system_u user)

	(selinuxuser name user_u low_high)
	(selinuxuserdefault user_u ((s0 (c0)) (s3 (range c0 c3))))

	(role system_r)
	(role user_r)
	(role baz_r)

	(roletype system_r bin_t)
	(roletype system_r kernel_t)
	(roletype system_r security_t)
	(roletype system_r unlabeled_t)
	(roletype system_r exec_type)
	(roletype exec_role bin_t)
	(roletype exec_role exec_type)
	(roleallow system_r user_r)
	(roletransition system_r bin_t file user_r)

	(userrole foo_u foo_role)
	(userlevel foo_u low)

	(userattribute ua1)
	(userattribute ua2)
	(userattribute ua3)
	(userattribute ua4)
	(userattributeset ua1 (user_u system_u))
	(userattributeset ua2 (foo_u system_u))
	(userattributeset ua3 (and ua1 ua2))
	(user u5)
	(user u6)
	(userlevel u5 low)
	(userlevel u6 low)
	(userrange u5 low_high)
	(userrange u6 low_high)
	(userattributeset ua4 (u5 u6))
	(userrole ua4 foo_role_a)

	(userrange foo_u low_high)

	(userrole system_u system_r)
	(userlevel system_u low)
	(userrange system_u low_high)

	(userrole user_u user_r)
	(userlevel user_u (s0 (range c0 c2)))
	(userrange user_u (low high))

	(sidcontext kernel (system_u system_r kernel_t ((s0) high)))
	(sidcontext security (system_u system_r security_t (low (s3 (range c0 c3)))))
	(sidcontext unlabeled (system_u system_r unlabeled_t (low high)))

	(context system_u_bin_t_l2h (system_u system_r bin_t (low high)))

	(ipaddr ip_v4 192.25.35.200)
	(ipaddr netmask 192.168.1.1)
	(ipaddr ip_v6 2001:0DB8:AC10:FE01::)
	(ipaddr netmask_v6 2001:0DE0:DA88:2222::)

	(filecon "/usr/bin/foo" file system_u_bin_t_l2h)
	(filecon "/usr/bin/bar" file (system_u system_r kernel_t (low low)))
	(filecon "/usr/bin/baz" any ())
	(filecon "/usr/bin/aaa" any (system_u system_r kernel_t ((s0) (s3 (range c0 c2)))))
	(filecon "/usr/bin/bbb" any (system_u system_r kernel_t ((s0 (c0)) high)))
	(filecon "/usr/bin/ccc" any (system_u system_r kernel_t (low (s3 (cats01)))))
	(filecon "/usr/bin/ddd" any (system_u system_r kernel_t (low (s3 (cats01 cats02)))))
	(nodecon ip_v4 netmask system_u_bin_t_l2h)
	(nodecon ip_v6 netmask_v6 system_u_bin_t_l2h)
	(portcon udp 25 system_u_bin_t_l2h)
	(portcon tcp 22 system_u_bin_t_l2h)
	(portcon dccp (2048 2096) system_u_bin_t_l2h)
	(genfscon - "/usr/bin" system_u_bin_t_l2h)
	(netifcon eth0 system_u_bin_t_l2h system_u_bin_t_l2h) ;different contexts?
	(fsuse xattr ext3 system_u_bin_t_l2h)
	
	; XEN
	(pirqcon 256 system_u_bin_t_l2h)
	(iomemcon (0 255) system_u_bin_t_l2h)
	(ioportcon (22 22) system_u_bin_t_l2h)
	(pcidevicecon 345 system_u_bin_t_l2h)
	(devicetreecon "/this is/a/path" system_u_bin_t_l2h)

	(constrain (files (read)) (not (or (and (eq t1 exec_t) (eq t2 bin_t)) (eq r1 r2))))
	(constrain char_w (not (or (and (eq t1 exec_t) (eq t2 bin_t)) (eq r1 r2))))

	(constrain (file (read)) (or (and (eq t1 exec_t) (neq t2 bin_t) ) (eq u1 ua4) ) )
	(constrain (file (open)) (dom r1 r2))
	(constrain (file (open)) (domby r1 r2))
	(constrain (file (open)) (incomp r1 r2))

	(validatetrans file (eq t1 exec_t))

	(mlsconstrain (file (open)) (not (or (and (eq l1 l2) (eq u1 u2)) (eq r1 r2))))
	(mlsconstrain (file (open)) (or (and (eq l1 l2) (eq u1 u2)) (neq r1 r2)))
	(mlsconstrain (file (open)) (dom h1 l2))
	(mlsconstrain (file (open)) (domby l1 h2))
	(mlsconstrain (file (open)) (incomp l1 l2))

	(mlsvalidatetrans file (domby l1 h2))

	(macro test_mapping ((classpermission cps))
	       (allow bin_t auditadm_t cps))

	(call test_mapping ((file (read))))
	(call test_mapping ((files (read))))
	(call test_mapping (char_w))

	(defaultuser (file char) source)
	(defaultrole char target)
	(defaulttype (files) source)
	(defaultrange (file) target low)
	(defaultrange (char) source low-high)
)

(macro all ((type x))
	(allow x bin_t (policy.file (execute)))
	(allowx x bin_t (ioctl policy.file (range 0x1000 0x11FF)))
)
(call all (bin_t))

(block z
    (block ba
        (roletype r t)
        (blockabstract z.ba)))

(block test_ba
    (blockinherit z.ba)
    (role r)
    (type t))

(block bb
	(type t1)
	(type t2)
	(boolean b1 false)
	(tunable tun1 true)
	(macro m ((boolean b))
		(tunableif tun1
			(true
				(allow t1 t2 (policy.file (write))))
			(false
				(allow t1 t2 (policy.file (execute)))))
		(booleanif b
			(true
				(allow t1 t2 (policy.file (read))))))

	(call m (b1))
)

(in bb
	(tunableif bb.tun1
		(true
			(allow bb.t2 bb.t1 (policy.file (read write execute))))))
