## <summary>Distributed checksum clearinghouse spam filtering.</summary>

########################################
## <summary>
##	Execute cdcc in the cdcc domain.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed to transition.
##	</summary>
## </param>
#
interface(`dcc_domtrans_cdcc',`
	gen_require(`
		type cdcc_t, cdcc_exec_t;
	')

	corecmd_search_bin($1)
	domtrans_pattern($1, cdcc_exec_t, cdcc_t)
')

########################################
## <summary>
##	Execute cdcc in the cdcc domain, and
##	allow the specified role the
##	cdcc domain.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed to transition.
##	</summary>
## </param>
## <param name="role">
##	<summary>
##	Role allowed access.
##	</summary>
## </param>
## <rolecap/>
#
interface(`dcc_run_cdcc',`
	gen_require(`
		attribute_role cdcc_roles;
	')

	dcc_domtrans_cdcc($1)
	roleattribute $2 cdcc_roles;
')

########################################
## <summary>
##	Execute dcc client in the dcc
##	client domain.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed to transition.
##	</summary>
## </param>
#
interface(`dcc_domtrans_client',`
	gen_require(`
		type dcc_client_t, dcc_client_exec_t;
	')

	corecmd_search_bin($1)
	domtrans_pattern($1, dcc_client_exec_t, dcc_client_t)
')

########################################
## <summary>
##	Send generic signals to dcc client.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dcc_signal_client',`
	gen_require(`
		type dcc_client_t;
	')

	allow $1 dcc_client_t:process signal;
')

########################################
## <summary>
##	Execute dcc client in the dcc
##	client domain, and allow the
##	specified role the dcc client domain.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed to transition.
##	</summary>
## </param>
## <param name="role">
##	<summary>
##	Role allowed access.
##	</summary>
## </param>
## <rolecap/>
#
interface(`dcc_run_client',`
	gen_require(`
		attribute_role dcc_client_roles;
	')

	dcc_domtrans_client($1)
	roleattribute $2 dcc_client_roles;
')

########################################
## <summary>
##	Execute dbclean in the dcc dbclean domain.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed to transition.
##	</summary>
## </param>
#
interface(`dcc_domtrans_dbclean',`
	gen_require(`
		type dcc_dbclean_t, dcc_dbclean_exec_t;
	')

	corecmd_search_bin($1)
	domtrans_pattern($1, dcc_dbclean_exec_t, dcc_dbclean_t)
')

########################################
## <summary>
##	Execute dbclean in the dcc dbclean
##	domain, and allow the specified
##	role the dcc dbclean domain.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed to transition.
##	</summary>
## </param>
## <param name="role">
##	<summary>
##	Role allowed access.
##	</summary>
## </param>
## <rolecap/>
#
interface(`dcc_run_dbclean',`
	gen_require(`
		attribute_role dcc_dbclean_roles;
	')

	dcc_domtrans_dbclean($1)
	roleattribute $2 dcc_dbclean_roles;
')

########################################
## <summary>
##	Connect to dccifd over a unix
##	domain stream socket.
## </summary>
## <param name="domain">
##	<summary>
##	Domain allowed access.
##	</summary>
## </param>
#
interface(`dcc_stream_connect_dccifd',`
	gen_require(`
		type dcc_var_t, dccifd_var_run_t, dccifd_t;
	')

	files_search_pids($1)
	stream_connect_pattern($1, dcc_var_t, dccifd_var_run_t, dccifd_t)
')
