1ec3d1a
## <summary>Milter mail filters</summary>
1ec3d1a
1ec3d1a
########################################
1ec3d1a
## <summary>
1ec3d1a
##	Create a set of derived types for various
1ec3d1a
##	mail filter applications using the milter interface.
1ec3d1a
## </summary>
1ec3d1a
## <param name="milter_name">
1ec3d1a
##	<summary>
1ec3d1a
##	The name to be used for deriving type names.
1ec3d1a
##	</summary>
1ec3d1a
## </param>
1ec3d1a
#
1ec3d1a
template(`milter_template',`
1ec3d1a
	# attributes common to all milters
1ec3d1a
	gen_require(`
1ec3d1a
		attribute milter_data_type, milter_domains;
1ec3d1a
	')
1ec3d1a
1ec3d1a
	type $1_milter_t, milter_domains;
1ec3d1a
	type $1_milter_exec_t;
1ec3d1a
	init_daemon_domain($1_milter_t, $1_milter_exec_t)
1ec3d1a
	role system_r types $1_milter_t;
1ec3d1a
1ec3d1a
	# Type for the milter data (e.g. the socket used to communicate with the MTA)
1ec3d1a
	type $1_milter_data_t, milter_data_type;
1ec3d1a
	files_pid_file($1_milter_data_t)
1ec3d1a
1ec3d1a
	# Allow communication with MTA over a unix-domain socket
1ec3d1a
	# Note: usage with TCP sockets requires additional policy
Chris PeBenito 9401ae1
Chris PeBenito 9401ae1
	allow $1_milter_t self:fifo_file rw_fifo_file_perms;
bde701d
86184cf
	# Allow communication with MTA over a TCP socket
Chris PeBenito df863be
	allow $1_milter_t self:tcp_socket create_stream_socket_perms;
86184cf
Chris PeBenito 9401ae1
	# Allow communication with MTA over a unix-domain socket
1ec3d1a
	manage_sock_files_pattern($1_milter_t, $1_milter_data_t, $1_milter_data_t)
1ec3d1a
1ec3d1a
	# Create other data files and directories in the data directory
1ec3d1a
	manage_files_pattern($1_milter_t, $1_milter_data_t, $1_milter_data_t)
1ec3d1a
1ec3d1a
	kernel_dontaudit_read_system_state($1_milter_t)
bde701d
Chris PeBenito df863be
	corenet_tcp_bind_generic_node($1_milter_t)
Chris PeBenito df863be
	corenet_tcp_bind_milter_port($1_milter_t)
Chris PeBenito df863be
Chris PeBenito 9401ae1
	files_read_etc_files($1_milter_t)
1ec3d1a
1ec3d1a
1ec3d1a
	logging_send_syslog_msg($1_milter_t)
1ec3d1a
')
1ec3d1a
1ec3d1a
########################################
1ec3d1a
## <summary>
1ec3d1a
##	MTA communication with milter sockets
1ec3d1a
## </summary>
1ec3d1a
## <param name="domain">
1ec3d1a
##	<summary>
1ec3d1a
##	Domain allowed access.
1ec3d1a
##	</summary>
1ec3d1a
## </param>
1ec3d1a
#
1ec3d1a
interface(`milter_stream_connect_all',`
1ec3d1a
	gen_require(`
1ec3d1a
		attribute milter_data_type, milter_domains;
1ec3d1a
	')
1ec3d1a
1ec3d1a
	files_search_pids($1)
Chris PeBenito 9401ae1
	getattr_dirs_pattern($1, milter_data_type, milter_data_type)
1ec3d1a
	stream_connect_pattern($1, milter_data_type, milter_data_type, milter_domains)
1ec3d1a
')
1ec3d1a
1ec3d1a
########################################
1ec3d1a
## <summary>
1ec3d1a
##	Allow getattr of milter sockets
1ec3d1a
## </summary>
1ec3d1a
## <param name="domain">
1ec3d1a
##	<summary>
1ec3d1a
##	Domain allowed access.
1ec3d1a
##	</summary>
1ec3d1a
## </param>
1ec3d1a
#
1ec3d1a
interface(`milter_getattr_all_sockets',`
1ec3d1a
	gen_require(`
1ec3d1a
		attribute milter_data_type;
1ec3d1a
	')
1ec3d1a
Chris PeBenito 9401ae1
	getattr_dirs_pattern($1, milter_data_type, milter_data_type)
1ec3d1a
	getattr_sock_files_pattern($1, milter_data_type, milter_data_type)
1ec3d1a
')
1ec3d1a
1ec3d1a
########################################
1ec3d1a
## <summary>
1ec3d1a
##	Allow setattr of milter dirs
1ec3d1a
## </summary>
1ec3d1a
## <param name="domain">
1ec3d1a
##	<summary>
1ec3d1a
##	Domain allowed access.
1ec3d1a
##	</summary>
1ec3d1a
## </param>
1ec3d1a
#
1ec3d1a
interface(`milter_setattr_all_dirs',`
1ec3d1a
	gen_require(`
1ec3d1a
		attribute milter_data_type;
1ec3d1a
	')
1ec3d1a
1ec3d1a
	setattr_dirs_pattern($1, milter_data_type, milter_data_type)
1ec3d1a
')
1ec3d1a
1ec3d1a
########################################
1ec3d1a
## <summary>
1ec3d1a
##	Manage spamassassin milter state
1ec3d1a
## </summary>
1ec3d1a
## <param name="domain">
1ec3d1a
##	<summary>
1ec3d1a
##	Domain allowed access.
1ec3d1a
##	</summary>
1ec3d1a
## </param>
1ec3d1a
#
1ec3d1a
interface(`milter_manage_spamass_state',`
1ec3d1a
	gen_require(`
1ec3d1a
		type spamass_milter_state_t;
1ec3d1a
	')
1ec3d1a
1ec3d1a
	files_search_var_lib($1)
1ec3d1a
	manage_files_pattern($1, spamass_milter_state_t, spamass_milter_state_t)
1ec3d1a
	manage_dirs_pattern($1, spamass_milter_state_t, spamass_milter_state_t)
1ec3d1a
	manage_lnk_files_pattern($1, spamass_milter_state_t, spamass_milter_state_t)
1ec3d1a
')
1ec3d1a
1ec3d1a
#######################################
1ec3d1a
## <summary>
1ec3d1a
##	Delete dkim-milter PID files.
1ec3d1a
## </summary>
1ec3d1a
## <param name="domain">
1ec3d1a
##	<summary>
1ec3d1a
##	Domain allowed access.
1ec3d1a
##	</summary>
1ec3d1a
## </param>
1ec3d1a
#
1ec3d1a
interface(`milter_delete_dkim_pid_files',`
1ec3d1a
	gen_require(`
1ec3d1a
		type dkim_milter_data_t;
1ec3d1a
	')
1ec3d1a
1ec3d1a
	files_search_pids($1)
1ec3d1a
	delete_files_pattern($1, dkim_milter_data_t, dkim_milter_data_t)
1ec3d1a
')