policy_module(cfengine, 1.1.0)

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

attribute cfengine_domain;

cfengine_domain_template(serverd)
cfengine_domain_template(execd)
cfengine_domain_template(monitord)

type cfengine_initrc_exec_t;
init_script_file(cfengine_initrc_exec_t)

type cfengine_var_lib_t;
files_type(cfengine_var_lib_t)

type cfengine_log_t;
logging_log_file(cfengine_log_t)

########################################
#
# Common cfengine domain local policy
#

allow cfengine_domain self:capability { chown kill setgid setuid sys_chroot };
allow cfengine_domain self:process { setfscreate signal };
allow cfengine_domain self:fifo_file rw_fifo_file_perms;
allow cfengine_domain self:unix_stream_socket { accept listen };

manage_dirs_pattern(cfengine_domain, cfengine_var_lib_t, cfengine_var_lib_t)
manage_files_pattern(cfengine_domain, cfengine_var_lib_t, cfengine_var_lib_t)
manage_lnk_files_pattern(cfengine_domain, cfengine_var_lib_t, cfengine_var_lib_t)
files_var_lib_filetrans(cfengine_domain, cfengine_var_lib_t, dir)

manage_dirs_pattern(cfengine_domain, cfengine_log_t, cfengine_log_t)
append_files_pattern(cfengine_domain, cfengine_log_t, cfengine_log_t)
create_files_pattern(cfengine_domain, cfengine_log_t, cfengine_log_t)
setattr_files_pattern(cfengine_domain, cfengine_log_t, cfengine_log_t)
logging_log_filetrans(cfengine_domain, cfengine_log_t, dir)

corecmd_exec_bin(cfengine_domain)
corecmd_exec_shell(cfengine_domain)

dev_read_urand(cfengine_domain)
dev_read_sysfs(cfengine_domain)

sysnet_dns_name_resolve(cfengine_domain)
sysnet_domtrans_ifconfig(cfengine_domain)

########################################
#
# Exec local policy
#

kernel_read_sysctl(cfengine_execd_t)

domain_read_all_domains_state(cfengine_execd_t)

########################################
#
# Monitord local policy
#

kernel_read_network_state(cfengine_monitord_t)

domain_read_all_domains_state(cfengine_monitord_t)

fs_getattr_xattr_fs(cfengine_monitord_t)
