(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)
	(typemember exec_type self file exec_t)
	(typetransition device_t console_t files console_device_t)
	(typetransition device_t exec_type files console_device_t)
	(typetransition exec_type self files console_device_t)
	(typetransition exec_type self files "filename" console_device_t)
	(typechange console_device_t device_t file user_tty_device_t)
	(typechange exec_type device_t file user_tty_device_t)
	(typechange exec_type self file 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)
	(portcon sctp (1024 1035) 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)

	; InfiniBand
	(ibpkeycon fe80:: (0 0x10) system_u_bin_t_l2h)
	(ibpkeycon fe80::7629:afff:fe0f:8e5d (15 25) (system_u system_r kernel_t (low (s3 (cats01 cats02)))))
	(ibendportcon mlx5_0 1 system_u_bin_t_l2h)
	(ibendportcon mlx4_3 5 (system_u system_r kernel_t (low (s3 (cats01 cats02)))))

	(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))))))
