policy_module(policykit, 1.3.0)

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

attribute policykit_domain;

type policykit_t, policykit_domain;
type policykit_exec_t;
init_daemon_domain(policykit_t, policykit_exec_t)

type policykit_auth_t, policykit_domain;
type policykit_auth_exec_t;
init_daemon_domain(policykit_auth_t, policykit_auth_exec_t)

type policykit_grant_t, policykit_domain;
type policykit_grant_exec_t;
init_system_domain(policykit_grant_t, policykit_grant_exec_t)

type policykit_resolve_t, policykit_domain;
type policykit_resolve_exec_t;
init_system_domain(policykit_resolve_t, policykit_resolve_exec_t)

type policykit_reload_t alias polkit_reload_t;
files_type(policykit_reload_t)

type policykit_tmp_t;
files_tmp_file(policykit_tmp_t)

type policykit_var_lib_t alias polkit_var_lib_t;
files_type(policykit_var_lib_t)

type policykit_var_run_t alias polkit_var_run_t;
files_pid_file(policykit_var_run_t)

#######################################
#
# policykit_domain local policy
#

allow policykit_domain self:process { execmem getattr };
allow policykit_domain self:fifo_file rw_fifo_file_perms;

dev_read_sysfs(policykit_domain)

########################################
#
# policykit local policy
#

allow policykit_t self:capability {  dac_read_search setgid setuid sys_nice sys_ptrace };
allow policykit_t self:process { getsched setsched signal };
allow policykit_t self:unix_dgram_socket create_socket_perms;
allow policykit_t self:unix_stream_socket { create_stream_socket_perms connectto };

policykit_domtrans_auth(policykit_t)
allow policykit_t policykit_auth_exec_t:file map;

allow policykit_t policykit_auth_t:process signal;

can_exec(policykit_t, policykit_exec_t)
corecmd_exec_bin(policykit_t)

dev_read_sysfs(policykit_t)

rw_files_pattern(policykit_t, policykit_reload_t, policykit_reload_t)

policykit_domtrans_resolve(policykit_t)

manage_files_pattern(policykit_t, policykit_var_lib_t, policykit_var_lib_t)

manage_dirs_pattern(policykit_t, policykit_var_run_t, policykit_var_run_t)
manage_files_pattern(policykit_t, policykit_var_run_t, policykit_var_run_t)
files_pid_filetrans(policykit_t, policykit_var_run_t, { file dir })

kernel_read_system_state(policykit_t)
kernel_read_kernel_sysctls(policykit_t)

domain_read_all_domains_state(policykit_t)

files_dontaudit_search_all_mountpoints(policykit_t)
files_watch_etc_dirs(policykit_t)
files_watch_usr_dirs(policykit_t)

fs_getattr_all_fs(policykit_t)
fs_list_inotifyfs(policykit_t)
fs_list_cgroup_dirs(policykit_t)

auth_use_nsswitch(policykit_t)

init_list_pid_dirs(policykit_t)
init_read_state(policykit_t)

logging_send_syslog_msg(policykit_t)

systemd_login_watch_pid_dirs(policykit_t)
systemd_login_watch_session_dirs(policykit_t)
systemd_machined_read_pid_files(policykit_t)
systemd_machined_watch_pid_dirs(policykit_t)
systemd_read_logind_sessions_files(policykit_t)

userdom_getattr_all_users(policykit_t)
userdom_read_all_users_state(policykit_t)
userdom_dontaudit_search_admin_dir(policykit_t)

optional_policy(`
	dbus_system_domain(policykit_t, policykit_exec_t)

	init_dbus_chat(policykit_t)

    sysnet_dbus_chat_dhcpc(policykit_t)

    optional_policy(`
        blueman_dbus_chat(policykit_t)
    ')

	optional_policy(`
		consolekit_dbus_chat(policykit_t)
	')

	optional_policy(`
		devicekit_dbus_chat(policykit_t)
	')

	optional_policy(`
		rpm_dbus_chat(policykit_t)
	')
')

optional_policy(`
	consolekit_list_pid_files(policykit_t)
	consolekit_read_pid_files(policykit_t)
')

optional_policy(`
	kerberos_tmp_filetrans_host_rcache(policykit_t, "host_0")
	kerberos_manage_host_rcache(policykit_t)
')

optional_policy(`
	gnome_read_config(policykit_t)
')

optional_policy(`
	systemd_read_logind_sessions_files(policykit_t)
	systemd_login_list_pid_dirs(policykit_t)
	systemd_login_read_pid_files(policykit_t)
')

########################################
#
# polkit_auth local policy
#

allow policykit_auth_t self:capability { sys_nice ipc_lock setgid setuid };
dontaudit policykit_auth_t self:capability sys_tty_config;
allow policykit_auth_t self:process { setsched getsched signal };

allow policykit_auth_t self:unix_dgram_socket create_socket_perms;
allow policykit_auth_t self:unix_stream_socket create_stream_socket_perms;

policykit_dbus_chat(policykit_auth_t)

kernel_read_system_state(policykit_auth_t)

can_exec(policykit_auth_t, policykit_auth_exec_t)
corecmd_exec_bin(policykit_auth_t)

rw_files_pattern(policykit_auth_t, policykit_reload_t, policykit_reload_t)

manage_dirs_pattern(policykit_auth_t, policykit_tmp_t, policykit_tmp_t)
manage_files_pattern(policykit_auth_t, policykit_tmp_t, policykit_tmp_t)
files_tmp_filetrans(policykit_auth_t, policykit_tmp_t, { file dir })

manage_files_pattern(policykit_auth_t, policykit_var_lib_t, policykit_var_lib_t)
watch_dirs_pattern(policykit_auth_t, policykit_var_lib_t, policykit_var_lib_t)

manage_dirs_pattern(policykit_auth_t, policykit_var_run_t, policykit_var_run_t)
manage_files_pattern(policykit_auth_t, policykit_var_run_t, policykit_var_run_t)
files_pid_filetrans(policykit_auth_t, policykit_var_run_t, { file dir })

kernel_dontaudit_search_kernel_sysctl(policykit_auth_t)

dev_read_video_dev(policykit_auth_t)
dev_read_generic_usb_dev(policykit_auth_t)

files_read_etc_runtime_files(policykit_auth_t)
files_search_home(policykit_auth_t)
files_dontaudit_access_check_home_dir(policykit_auth_t)
files_watch_etc_dirs(policykit_auth_t)

fs_getattr_all_fs(policykit_auth_t)
fs_search_tmpfs(policykit_auth_t)
fs_dontaudit_append_ecryptfs_files(policykit_auth_t)

auth_rw_var_auth(policykit_auth_t)
auth_use_nsswitch(policykit_auth_t)
auth_domtrans_chk_passwd(policykit_auth_t)

logging_send_syslog_msg(policykit_auth_t)

miscfiles_read_fonts(policykit_auth_t)
miscfiles_setattr_fonts_cache_dirs(policykit_auth_t)

userdom_dontaudit_read_user_home_content_files(policykit_auth_t)
userdom_dontaudit_write_user_tmp_files(policykit_auth_t)
userdom_dontaudit_access_check_user_content(policykit_auth_t)
userdom_read_admin_home_files(policykit_auth_t)

optional_policy(`
	dbus_system_domain( policykit_auth_t, policykit_auth_exec_t)
	dbus_session_bus_client(policykit_auth_t)

	optional_policy(`
		consolekit_dbus_chat(policykit_auth_t)
	')
')

optional_policy(`
    gnome_read_config(policykit_auth_t)
    gnome_access_check_usr_config(policykit_auth_t)
')

optional_policy(`
	kernel_search_proc(policykit_auth_t)
	hal_read_state(policykit_auth_t)
')

optional_policy(`
	kerberos_tmp_filetrans_host_rcache(policykit_auth_t, "host_0")
        kerberos_manage_host_rcache(policykit_auth_t)
')

optional_policy(`
    udev_read_db(policykit_auth_t)
')

optional_policy(`
	xserver_stream_connect(policykit_auth_t)
	xserver_xdm_append_log(policykit_auth_t)
	xserver_read_xdm_pid(policykit_auth_t)
	xserver_search_xdm_lib(policykit_auth_t)
	xserver_create_xdm_tmp_sockets(policykit_auth_t)
')

########################################
#
# polkit_grant local policy
#

allow policykit_grant_t self:capability setuid;

allow policykit_grant_t self:unix_dgram_socket create_socket_perms;
allow policykit_grant_t self:unix_stream_socket create_stream_socket_perms;

policykit_domtrans_auth(policykit_grant_t)

policykit_domtrans_resolve(policykit_grant_t)

can_exec(policykit_grant_t, policykit_grant_exec_t)
corecmd_search_bin(policykit_grant_t)

rw_files_pattern(policykit_grant_t, policykit_reload_t, policykit_reload_t)

manage_files_pattern(policykit_grant_t, policykit_var_run_t, policykit_var_run_t)

manage_files_pattern(policykit_grant_t, policykit_var_lib_t, policykit_var_lib_t)


auth_domtrans_chk_passwd(policykit_grant_t)
auth_use_nsswitch(policykit_grant_t)

logging_send_syslog_msg(policykit_grant_t)

userdom_read_all_users_state(policykit_grant_t)

optional_policy(`
	cron_manage_system_job_lib_files(policykit_grant_t)
')

	optional_policy(`
	dbus_system_bus_client(policykit_grant_t)
	optional_policy(`
		consolekit_dbus_chat(policykit_grant_t)
	')
')

########################################
#
# polkit_resolve local policy
#

allow policykit_resolve_t self:capability { setuid sys_nice };

allow policykit_resolve_t self:unix_dgram_socket create_socket_perms;
allow policykit_resolve_t self:unix_stream_socket create_stream_socket_perms;

policykit_domtrans_auth(policykit_resolve_t)

read_files_pattern(policykit_resolve_t, policykit_reload_t, policykit_reload_t)

read_files_pattern(policykit_resolve_t, policykit_var_lib_t, policykit_var_lib_t)

can_exec(policykit_resolve_t, policykit_resolve_exec_t)
corecmd_search_bin(policykit_resolve_t)


auth_use_nsswitch(policykit_resolve_t)

logging_send_syslog_msg(policykit_resolve_t)

userdom_read_all_users_state(policykit_resolve_t)

optional_policy(`
	dbus_system_bus_client(policykit_resolve_t)

	optional_policy(`
		consolekit_dbus_chat(policykit_resolve_t)
	')
')

optional_policy(`
	kernel_search_proc(policykit_resolve_t)
	hal_read_state(policykit_resolve_t)
')
