policy_module(clockspeed, 1.6.0)

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

attribute_role clockspeed_cli_roles;

type clockspeed_cli_t;
type clockspeed_cli_exec_t;
application_domain(clockspeed_cli_t, clockspeed_cli_exec_t)
role clockspeed_cli_roles types clockspeed_cli_t;

type clockspeed_srv_t;
type clockspeed_srv_exec_t;
init_daemon_domain(clockspeed_srv_t, clockspeed_srv_exec_t)

type clockspeed_var_lib_t;
files_type(clockspeed_var_lib_t)

########################################
#
# Client local policy
#

allow clockspeed_cli_t self:capability sys_time;
allow clockspeed_cli_t self:udp_socket create_socket_perms;

read_files_pattern(clockspeed_cli_t, clockspeed_var_lib_t, clockspeed_var_lib_t)

corenet_all_recvfrom_netlabel(clockspeed_cli_t)
corenet_udp_sendrecv_generic_if(clockspeed_cli_t)
corenet_udp_sendrecv_generic_node(clockspeed_cli_t)

corenet_sendrecv_ntp_client_packets(clockspeed_cli_t)
corenet_udp_sendrecv_ntp_port(clockspeed_cli_t)

files_list_var_lib(clockspeed_cli_t)


userdom_use_inherited_user_terminals(clockspeed_cli_t)

########################################
#
# Server local policy
#

allow clockspeed_srv_t self:capability { sys_time net_bind_service };
allow clockspeed_srv_t self:udp_socket create_socket_perms;
allow clockspeed_srv_t self:unix_dgram_socket create_socket_perms;
allow clockspeed_srv_t self:unix_stream_socket create_socket_perms;

manage_files_pattern(clockspeed_srv_t, clockspeed_var_lib_t, clockspeed_var_lib_t)
manage_fifo_files_pattern(clockspeed_srv_t, clockspeed_var_lib_t, clockspeed_var_lib_t)

corenet_all_recvfrom_netlabel(clockspeed_srv_t)
corenet_udp_sendrecv_generic_if(clockspeed_srv_t)
corenet_udp_sendrecv_generic_node(clockspeed_srv_t)
corenet_udp_bind_generic_node(clockspeed_srv_t)

corenet_sendrecv_clockspeed_server_packets(clockspeed_srv_t)
corenet_udp_bind_clockspeed_port(clockspeed_srv_t)
corenet_udp_sendrecv_clockspeed_port(clockspeed_srv_t)

files_list_var_lib(clockspeed_srv_t)


optional_policy(`
	daemontools_service_domain(clockspeed_srv_t, clockspeed_srv_exec_t)
')
