policy_module(vhostmd, 1.1.0)

########################################
#
# Declarations
#

type vhostmd_t;
type vhostmd_exec_t;
init_daemon_domain(vhostmd_t, vhostmd_exec_t)

type vhostmd_initrc_exec_t;
init_script_file(vhostmd_initrc_exec_t)

type vhostmd_tmpfs_t;
files_tmpfs_file(vhostmd_tmpfs_t)

type vhostmd_var_run_t;
files_pid_file(vhostmd_var_run_t)

########################################
#
# Local policy
#

allow vhostmd_t self:capability { dac_read_search dac_override ipc_lock setuid setgid };
allow vhostmd_t self:process { setsched getsched signal };
allow vhostmd_t self:fifo_file rw_fifo_file_perms;

manage_dirs_pattern(vhostmd_t, vhostmd_tmpfs_t, vhostmd_tmpfs_t)
manage_files_pattern(vhostmd_t, vhostmd_tmpfs_t, vhostmd_tmpfs_t)
fs_tmpfs_filetrans(vhostmd_t, vhostmd_tmpfs_t, { file dir })

manage_dirs_pattern(vhostmd_t, vhostmd_var_run_t, vhostmd_var_run_t)
manage_files_pattern(vhostmd_t, vhostmd_var_run_t, vhostmd_var_run_t)
manage_sock_files_pattern(vhostmd_t, vhostmd_var_run_t, vhostmd_var_run_t)
files_pid_filetrans(vhostmd_t, vhostmd_var_run_t, { file dir sock_file })

kernel_read_kernel_sysctls(vhostmd_t)
kernel_read_system_state(vhostmd_t)
kernel_read_network_state(vhostmd_t)
kernel_write_xen_state(vhostmd_t)

corecmd_exec_bin(vhostmd_t)
corecmd_exec_shell(vhostmd_t)

corenet_all_recvfrom_unlabeled(vhostmd_t)
corenet_all_recvfrom_netlabel(vhostmd_t)
corenet_tcp_sendrecv_generic_if(vhostmd_t)
corenet_tcp_sendrecv_generic_node(vhostmd_t)

corenet_sendrecv_soundd_client_packets(vhostmd_t)
corenet_tcp_connect_soundd_port(vhostmd_t)
corenet_tcp_sendrecv_soundd_port(vhostmd_t)

dev_read_rand(vhostmd_t)
dev_read_urand(vhostmd_t)
dev_read_sysfs(vhostmd_t)

files_list_tmp(vhostmd_t)

auth_use_nsswitch(vhostmd_t)

logging_send_syslog_msg(vhostmd_t)

optional_policy(`
	hostname_exec(vhostmd_t)
')

optional_policy(`
	rpm_exec(vhostmd_t)
	rpm_read_db(vhostmd_t)
	#vhostmd work properly without allowing this permissions, so dontaudit
	rpm_dontaudit_manage_db(vhostmd_t)
	rpm_signull(vhostmd_t)

')

optional_policy(`
    virt_read_qemu_pid_files(vhostmd_t)
	virt_read_config(vhostmd_t)
	virt_stream_connect(vhostmd_t)
    virt_stream_connect_svirt(vhostmd_t)
	virt_write_content(vhostmd_t)
	virt_rw_svirt_image(vhostmd_t)
')

optional_policy(`
	xen_domtrans_xm(vhostmd_t)
	xen_stream_connect(vhostmd_t)
	xen_stream_connect_xenstore(vhostmd_t)
	xen_stream_connect_xm(vhostmd_t)
')
