# FLASK

#
# Define the security object classes 
#

class security
class process
class system
class capability

# file-related classes
class filesystem
class file
class dir
class fd
class lnk_file
class chr_file
class blk_file
class sock_file
class fifo_file

# network-related classes
class socket
class tcp_socket
class udp_socket
class rawip_socket
class node
class netif
class netlink_socket
class packet_socket
class key_socket
class unix_stream_socket
class unix_dgram_socket

# sysv-ipc-related clases
class sem
class msg
class msgq
class shm
class ipc

# FLASK
# FLASK

#
# Define initial security identifiers 
#

sid kernel


# FLASK
#
# Define common prefixes for access vectors
#
# common common_name { permission_name ... }


#
# Define a common prefix for file access vectors.
#

common file
{
	ioctl
	read
	write
	create
	getattr
	setattr
	lock
	relabelfrom
	relabelto
	append
	unlink
	link
	rename
	execute
	swapon
	quotaon
	mounton
}


#
# Define a common prefix for socket access vectors.
#

common socket
{
# inherited from file
	ioctl
	read
	write
	create
	getattr
	setattr
	lock
	relabelfrom
	relabelto
	append
# socket-specific
	bind
	connect
	listen
	accept
	getopt
	setopt
	shutdown
	recvfrom
	sendto
	recv_msg
	send_msg
	name_bind
}	

#
# Define a common prefix for ipc access vectors.
#

common ipc
{
	create
	destroy
	getattr
	setattr
	read
	write
	associate
	unix_read
	unix_write
}

#
# Define the access vectors.
#
# class class_name [ inherits common_name ] { permission_name ... }


#
# Define the access vector interpretation for file-related objects.
#

class filesystem
{
	mount
	remount
	unmount
	getattr
	relabelfrom
	relabelto
	transition
	associate
	quotamod
	quotaget
}

class dir
inherits file
{
	add_name
	remove_name
	reparent
	search
	rmdir
}

class file
inherits file
{
	execute_no_trans
	entrypoint
}

class lnk_file
inherits file

class chr_file
inherits file

class blk_file
inherits file

class sock_file
inherits file

class fifo_file
inherits file

class fd
{
	use
}


#
# Define the access vector interpretation for network-related objects.
#

class socket
inherits socket

class tcp_socket
inherits socket
{
	connectto
	newconn
	acceptfrom
}

class udp_socket
inherits socket

class rawip_socket
inherits socket

class node 
{
	tcp_recv
	tcp_send
	udp_recv
	udp_send
	rawip_recv
	rawip_send
	enforce_dest
}

class netif
{
	tcp_recv
	tcp_send
	udp_recv
	udp_send
	rawip_recv
	rawip_send
}

class netlink_socket
inherits socket

class packet_socket
inherits socket

class key_socket
inherits socket

class unix_stream_socket
inherits socket
{
	connectto
	newconn
	acceptfrom
}

class unix_dgram_socket
inherits socket


#
# Define the access vector interpretation for process-related objects
#

class process
{
	fork
	transition
	sigchld # commonly granted from child to parent
	sigkill # cannot be caught or ignored
	sigstop # cannot be caught or ignored
	signull # for kill(pid, 0)
	signal  # all other signals
	ptrace
	getsched
	setsched
	getsession
	getpgid
	setpgid
	getcap
	setcap
	share
}


#
# Define the access vector interpretation for ipc-related objects
#

class ipc
inherits ipc

class sem
inherits ipc

class msgq
inherits ipc
{
	enqueue
}

class msg
{
	send
	receive
}

class shm
inherits ipc
{
	lock
}


#
# Define the access vector interpretation for the security server. 
#

class security
{
	compute_av
	transition_sid
	member_sid
	sid_to_context
	context_to_sid
	load_policy
	get_sids
	change_sid
	get_user_sids
}


#
# Define the access vector interpretation for system operations.
#

class system
{
	ipc_info
	avc_toggle
	nfsd_control
	bdflush
	syslog_read
	syslog_mod
	syslog_console
	ichsid
}

#
# Define the access vector interpretation for controlling capabilities
#

class capability
{
	# The capabilities are defined in include/linux/capability.h
	# Care should be taken to ensure that these are consistent with
	# those definitions. (Order matters)

	chown           
	dac_override    
	dac_read_search 
	fowner          
	fsetid          
	kill            
	setgid           
	setuid           
	setpcap          
	linux_immutable  
	net_bind_service 
	net_broadcast    
	net_admin        
	net_raw          
	ipc_lock         
	ipc_owner        
	sys_module       
	sys_rawio        
	sys_chroot       
	sys_ptrace       
	sys_pacct        
	sys_admin        
	sys_boot         
	sys_nice         
	sys_resource     
	sys_time         
	sys_tty_config  
	mknod
	lease
}

ifdef(`enable_mls',`
sensitivity s0;

#
# Define the ordering of the sensitivity levels (least to greatest)
#
dominance { s0 }


#
# Define the categories
#
# Each category has a name and zero or more aliases.
#
category c0; category c1; category c2; category c3;
category c4; category c5; category c6; category c7;
category c8; category c9; category c10; category c11;
category c12; category c13; category c14; category c15;
category c16; category c17; category c18; category c19;
category c20; category c21; category c22; category c23;

level s0:c0.c23;

mlsconstrain file { write setattr append unlink link rename ioctl lock execute relabelfrom }
	( h1 dom h2 );
')

####################################
####################################
#####################################
# TE RULES
attribute domain;
attribute system;
attribute foo;
attribute num;
attribute num_exec;
attribute files;

# Type - attribute mapping test
# Shorthand tests
# 1 = types in base, 2 = types in mod, 3 = types in both
# 4 = types in optional in base, 5 = types in optional in mod
# 6 = types in optional in both
# 7 = types in disabled optional in base
# 8 = types in disabled optional in module
# 9 = types in disabled optional in both
# 10 = types in enabled optional in base, disabled optional in module
# 11 = types in disabled optional in base, enabled optional in module
attribute attr_check_base_1;
attribute attr_check_base_2;
attribute attr_check_base_3;
attribute attr_check_base_4;
attribute attr_check_base_5;
attribute attr_check_base_6;
attribute attr_check_base_7;
attribute attr_check_base_8;
attribute attr_check_base_9;
attribute attr_check_base_10;
attribute attr_check_base_11;
optional {
	require {
		type module_t;
	}
	attribute attr_check_base_optional_1;
	attribute attr_check_base_optional_2;
	attribute attr_check_base_optional_3;
	attribute attr_check_base_optional_4;
	attribute attr_check_base_optional_5;
	attribute attr_check_base_optional_6;
	attribute attr_check_base_optional_8;
}
optional {
	require {
		type does_not_exist_t;
	}
	attribute attr_check_base_optional_disabled_5;
	attribute attr_check_base_optional_disabled_8;
}

type net_foo_t, foo;
type sys_foo_t, foo, system;
role system_r;
role system_r types sys_foo_t;

type user_t, domain;
role user_r;
role user_r types user_t;

type sysadm_t, domain, system;
role sysadm_r;
role sysadm_r types sysadm_t;

type system_t, domain, system, foo;
role system_r types { system_t sys_foo_t };

type file_t;
type file_exec_t, files;
type fs_t;
type base_optional_1;
type base_optional_2;

allow sysadm_t file_exec_t: file { execute read write ioctl lock entrypoint };

optional {
	require {
		type base_optional_1, base_optional_2;
	}
	allow base_optional_1 base_optional_2 : file { read write };
}

# Type - attribute mapping test
type base_t;
type attr_check_base_1_1_t, attr_check_base_1;
type attr_check_base_1_2_t;
typeattribute attr_check_base_1_2_t attr_check_base_1;
type attr_check_base_3_1_t, attr_check_base_3;
type attr_check_base_3_2_t;
typeattribute attr_check_base_3_2_t attr_check_base_3;
optional {
	require {
		attribute attr_check_base_4;
	}
	type attr_check_base_4_1_t, attr_check_base_4;
	type attr_check_base_4_2_t;
	typeattribute attr_check_base_4_2_t attr_check_base_4;
}
optional {
	require {
		type module_t;
	}
	type attr_check_base_6_1_t, attr_check_base_6;
	type attr_check_base_6_2_t;
	typeattribute attr_check_base_6_2_t attr_check_base_6;
}
optional {
	require {
		type does_not_exist_t;
	}
	type attr_check_base_7_1_t, attr_check_base_7;
	type attr_check_base_7_2_t;
	typeattribute attr_check_base_7_2_t attr_check_base_7;
}
optional {
	require {
		type does_not_exist_t;
	}
	type attr_check_base_9_1_t, attr_check_base_9;
	type attr_check_base_9_2_t;
	typeattribute attr_check_base_9_2_t attr_check_base_9;
}
optional {
	require {
		type module_t;
	}
	type attr_check_base_10_1_t, attr_check_base_10;
	type attr_check_base_10_2_t;
	typeattribute attr_check_base_10_2_t attr_check_base_10;
}
optional {
	require {
		type does_not_exist_t;
	}
	type attr_check_base_11_1_t, attr_check_base_11;
	type attr_check_base_11_2_t;
	typeattribute attr_check_base_11_2_t attr_check_base_11;
}
#optional {
#	require {
#		attribute attr_check_base_optional_4;
#	}
#	type attr_check_base_optional_4_1_t, attr_check_base_optional_4;
#	type attr_check_base_optional_4_2_t;
#	typeattribute attr_check_base_optional_4_2_t attr_check_base_optional_4;
#}
#optional {
#	require {
#		attribute attr_check_base_optional_6;
#	}
#	type attr_check_base_optional_6_1_t, attr_check_base_optional_6;
#	type attr_check_base_optional_6_2_t;
#	typeattribute attr_check_base_optional_6_2_t attr_check_base_optional_6;
#}
optional {
	require {
		attribute attr_check_mod_4;
	}
	type attr_check_mod_4_1_t, attr_check_mod_4;
	type attr_check_mod_4_2_t;
	typeattribute attr_check_mod_4_2_t attr_check_mod_4;
}
optional {
	require {
		attribute attr_check_mod_6;
	}
	type attr_check_mod_6_1_t, attr_check_mod_6;
	type attr_check_mod_6_2_t;
	typeattribute attr_check_mod_6_2_t attr_check_mod_6;
}
optional {
	require {
		type does_not_exist_t;
		attribute attr_check_mod_7;
	}
	type attr_check_mod_7_1_t, attr_check_mod_7;
	type attr_check_mod_7_2_t;
	typeattribute attr_check_mod_7_2_t attr_check_mod_7;
}
optional {
	require {
		type does_not_exist_t;
		attribute attr_check_mod_9;
	}
	type attr_check_mod_9_1_t, attr_check_mod_9;
	type attr_check_mod_9_2_t;
	typeattribute attr_check_mod_9_2_t attr_check_mod_9;
}
optional {
	require {
		attribute attr_check_mod_10;
	}
	type attr_check_mod_10_1_t, attr_check_mod_10;
	type attr_check_mod_10_2_t;
	typeattribute attr_check_mod_10_2_t attr_check_mod_10;
}
optional {
	require {
		type does_not_exist_t;
		attribute attr_check_mod_11;
	}
	type attr_check_mod_11_1_t, attr_check_mod_11;
	type attr_check_mod_11_2_t;
	typeattribute attr_check_mod_11_2_t attr_check_mod_11;
}
optional {
	require {
		attribute attr_check_mod_optional_4;
	}
	type attr_check_mod_optional_4_1_t, attr_check_mod_optional_4;
	type attr_check_mod_optional_4_2_t;
	typeattribute attr_check_mod_optional_4_2_t attr_check_mod_optional_4;
}
optional {
	require {
		attribute attr_check_mod_optional_6;
	}
	type attr_check_mod_optional_6_1_t, attr_check_mod_optional_6;
	type attr_check_mod_optional_6_2_t;
	typeattribute attr_check_mod_optional_6_2_t attr_check_mod_optional_6;
}
optional {
	require {
		type does_not_exist_t;
		attribute attr_check_mod_optional_7;
	}
	type attr_check_mod_optional_7_1_t, attr_check_mod_optional_7;
	type attr_check_mod_optional_7_2_t;
	typeattribute attr_check_mod_optional_7_2_t attr_check_mod_optional_7;
}
optional {
	require {
		attribute attr_check_mod_optional_disabled_4;
	}
	type attr_check_mod_optional_disabled_4_1_t, attr_check_mod_optional_disabled_4;
	type attr_check_mod_optional_disabled_4_2_t;
	typeattribute attr_check_mod_optional_disabled_4_2_t attr_check_mod_optional_disabled_4;
}
optional {
	require {
		type does_not_exist_t;
		attribute attr_check_mod_optional_disabled_7;
	}
	type attr_check_mod_optional_disabled_7_1_t, attr_check_mod_optional_disabled_7;
	type attr_check_mod_optional_disabled_7_2_t;
	typeattribute attr_check_mod_optional_disabled_7_2_t attr_check_mod_optional_disabled_7;
}

#####################################
# Role Allow
allow user_r sysadm_r;

####################################
# Booleans
bool allow_ypbind true;
bool secure_mode false;
bool allow_execheap false;
bool allow_execmem true;
bool allow_execmod false;
bool allow_execstack true;
bool optional_bool_1 true;
bool optional_bool_2 false;

#####################################
# users
gen_user(system_u,, system_r, s0, s0 - s0:c0.c23)
gen_user(root,, user_r sysadm_r, s0, s0 - s0:c0.c23)
gen_user(joe,, user_r, s0, s0 - s0:c0.c23)

#####################################
# constraints


####################################
#line 1 "initial_sid_contexts"

sid kernel	gen_context(system_u:system_r:sys_foo_t, s0)


############################################
#line 1 "fs_use"
#
fs_use_xattr ext2 gen_context(system_u:object_r:fs_t, s0);
fs_use_xattr ext3 gen_context(system_u:object_r:fs_t, s0);
fs_use_xattr reiserfs gen_context(system_u:object_r:fs_t, s0);


genfscon proc /				gen_context(system_u:object_r:sys_foo_t, s0)


####################################
#line 1 "net_contexts"

#portcon tcp 21 system_u:object_r:net_foo_t:s0

#netifcon lo system_u:object_r:net_foo_t system_u:object_r:net_foo_t:s0

#
#nodecon 127.0.0.1 255.255.255.255 system_u:object_r:net_foo_t:s0

nodecon ::1 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF gen_context(system_u:object_r:net_foo_t, s0)




