]> git.ipfire.org Git - people/stevee/selinux-policy.git/blobdiff - policy/modules/system/userdomain.if
Remove module for thumb.
[people/stevee/selinux-policy.git] / policy / modules / system / userdomain.if
index 4b2878a60ac3cd3c8ae4c21e784a16fbad144c0a..db35b2e9b93284ed366bfa5068b010d7eadd63ea 100644 (file)
@@ -30,9 +30,11 @@ template(`userdom_base_user_template',`
        ')
 
        attribute $1_file_type;
+       attribute $1_usertype;
 
-       type $1_t, userdomain;
+       type $1_t, userdomain, $1_usertype;
        domain_type($1_t)
+       role $1_r;
        corecmd_shell_entry_type($1_t)
        corecmd_bin_entry_type($1_t)
        domain_user_exemption_target($1_t)
@@ -43,79 +45,133 @@ template(`userdom_base_user_template',`
        term_user_pty($1_t, user_devpts_t)
 
        term_user_tty($1_t, user_tty_device_t)
-
-       allow $1_t self:process { signal_perms getsched setsched share getpgid setpgid setcap getsession getattr };
-       allow $1_t self:fd use;
-       allow $1_t self:fifo_file rw_fifo_file_perms;
-       allow $1_t self:unix_dgram_socket { create_socket_perms sendto };
-       allow $1_t self:unix_stream_socket { create_stream_socket_perms connectto };
-       allow $1_t self:shm create_shm_perms;
-       allow $1_t self:sem create_sem_perms;
-       allow $1_t self:msgq create_msgq_perms;
-       allow $1_t self:msg { send receive };
-       allow $1_t self:context contains;
-       dontaudit $1_t self:socket create;
-
-       allow $1_t user_devpts_t:chr_file { setattr rw_chr_file_perms };
-       term_create_pty($1_t, user_devpts_t)
+       term_dontaudit_getattr_generic_ptys($1_t)
+
+       allow $1_usertype $1_usertype:process { signal_perms getsched setsched share getpgid setpgid getcap setcap getsession getattr };
+       tunable_policy(`deny_ptrace',`',`
+               allow $1_usertype $1_usertype:process ptrace;
+       ')
+       allow $1_usertype $1_usertype:fd use;
+       allow $1_usertype $1_t:key { create view read write search link setattr };
+
+       allow $1_usertype $1_usertype:fifo_file rw_fifo_file_perms;
+       allow $1_usertype $1_usertype:unix_dgram_socket { create_socket_perms sendto };
+       allow $1_usertype $1_usertype:unix_stream_socket { create_stream_socket_perms connectto };
+       allow $1_usertype $1_usertype:shm create_shm_perms;
+       allow $1_usertype $1_usertype:sem create_sem_perms;
+       allow $1_usertype $1_usertype:msgq create_msgq_perms;
+       allow $1_usertype $1_usertype:msg { send receive };
+       allow $1_usertype $1_usertype:context contains;
+       dontaudit $1_usertype $1_usertype:socket create;
+
+       allow $1_usertype user_devpts_t:chr_file { setattr rw_chr_file_perms };
+       term_create_pty($1_usertype, user_devpts_t)
        # avoid annoying messages on terminal hangup on role change
-       dontaudit $1_t user_devpts_t:chr_file ioctl;
+       dontaudit $1_usertype user_devpts_t:chr_file ioctl;
 
-       allow $1_t user_tty_device_t:chr_file { setattr rw_chr_file_perms };
+       allow $1_usertype user_tty_device_t:chr_file { setattr rw_chr_file_perms };
        # avoid annoying messages on terminal hangup on role change
-       dontaudit $1_t user_tty_device_t:chr_file ioctl;
-
-       kernel_read_kernel_sysctls($1_t)
-       kernel_dontaudit_list_unlabeled($1_t)
-       kernel_dontaudit_getattr_unlabeled_files($1_t)
-       kernel_dontaudit_getattr_unlabeled_symlinks($1_t)
-       kernel_dontaudit_getattr_unlabeled_pipes($1_t)
-       kernel_dontaudit_getattr_unlabeled_sockets($1_t)
-       kernel_dontaudit_getattr_unlabeled_blk_files($1_t)
-       kernel_dontaudit_getattr_unlabeled_chr_files($1_t)
-
-       dev_dontaudit_getattr_all_blk_files($1_t)
-       dev_dontaudit_getattr_all_chr_files($1_t)
+       dontaudit $1_usertype user_tty_device_t:chr_file ioctl;
+
+       application_exec_all($1_usertype)
+
+       kernel_read_kernel_sysctls($1_usertype)
+       kernel_read_all_sysctls($1_usertype)
+       kernel_dontaudit_list_unlabeled($1_usertype)
+       kernel_dontaudit_getattr_unlabeled_files($1_usertype)
+       kernel_dontaudit_getattr_unlabeled_symlinks($1_usertype)
+       kernel_dontaudit_getattr_unlabeled_pipes($1_usertype)
+       kernel_dontaudit_getattr_unlabeled_sockets($1_usertype)
+       kernel_dontaudit_getattr_unlabeled_blk_files($1_usertype)
+       kernel_dontaudit_getattr_unlabeled_chr_files($1_usertype)
+       kernel_dontaudit_list_proc($1_usertype)
+
+       dev_dontaudit_getattr_all_blk_files($1_usertype)
+       dev_dontaudit_getattr_all_chr_files($1_usertype)
+       dev_getattr_mtrr_dev($1_t)
 
        # When the user domain runs ps, there will be a number of access
        # denials when ps tries to search /proc. Do not audit these denials.
-       domain_dontaudit_read_all_domains_state($1_t)
-       domain_dontaudit_getattr_all_domains($1_t)
-       domain_dontaudit_getsession_all_domains($1_t)
-
-       files_read_etc_files($1_t)
-       files_read_etc_runtime_files($1_t)
-       files_read_usr_files($1_t)
+       domain_dontaudit_read_all_domains_state($1_usertype)
+       domain_dontaudit_getattr_all_domains($1_usertype)
+       domain_dontaudit_getsession_all_domains($1_usertype)
+       dev_dontaudit_all_access_check($1_usertype)
+
+       files_read_etc_files($1_usertype)
+       files_list_mnt($1_usertype)
+       files_list_var($1_usertype)
+       files_read_mnt_files($1_usertype)
+       files_dontaudit_access_check_mnt($1_usertype)
+       files_read_etc_runtime_files($1_usertype)
+       files_read_usr_files($1_usertype)
+       files_read_usr_src_files($1_usertype)
        # Read directories and files with the readable_t type.
        # This type is a general type for "world"-readable files.
-       files_list_world_readable($1_t)
-       files_read_world_readable_files($1_t)
-       files_read_world_readable_symlinks($1_t)
-       files_read_world_readable_pipes($1_t)
-       files_read_world_readable_sockets($1_t)
+       files_list_world_readable($1_usertype)
+       files_read_world_readable_files($1_usertype)
+       files_read_world_readable_symlinks($1_usertype)
+       files_read_world_readable_pipes($1_usertype)
+       files_read_world_readable_sockets($1_usertype)
        # old broswer_domain():
-       files_dontaudit_list_non_security($1_t)
-       files_dontaudit_getattr_non_security_files($1_t)
-       files_dontaudit_getattr_non_security_symlinks($1_t)
-       files_dontaudit_getattr_non_security_pipes($1_t)
-       files_dontaudit_getattr_non_security_sockets($1_t)
+       files_dontaudit_getattr_all_dirs($1_usertype)
+       files_dontaudit_list_non_security($1_usertype)
+       files_dontaudit_getattr_all_files($1_usertype)
+       files_dontaudit_getattr_non_security_symlinks($1_usertype)
+       files_dontaudit_getattr_non_security_pipes($1_usertype)
+       files_dontaudit_getattr_non_security_sockets($1_usertype)
+       files_dontaudit_setattr_etc_runtime_files($1_usertype)
+
+       files_exec_usr_files($1_t)
+
+       fs_list_cgroup_dirs($1_usertype)
+       fs_dontaudit_rw_cgroup_files($1_usertype)
+
+       storage_rw_fuse($1_usertype)
+
+       auth_use_nsswitch($1_t)
+
+       init_stream_connect($1_usertype)
+       # The library functions always try to open read-write first,
+       # then fall back to read-only if it fails. 
+       init_dontaudit_rw_utmp($1_usertype)
+
+       libs_exec_ld_so($1_usertype)
 
-       libs_exec_ld_so($1_t)
+       logging_send_audit_msgs($1_t)
 
        miscfiles_read_localization($1_t)
        miscfiles_read_generic_certs($1_t)
 
-       sysnet_read_config($1_t)
+       miscfiles_read_all_certs($1_usertype)
+       miscfiles_read_localization($1_usertype)
+       miscfiles_read_man_pages($1_usertype)
+       miscfiles_read_public_files($1_usertype)
+
+       systemd_dbus_chat_logind($1_usertype)
 
-       tunable_policy(`allow_execmem',`
+       tunable_policy(`deny_execmem',`', `
                # Allow loading DSOs that require executable stack.
                allow $1_t self:process execmem;
        ')
 
-       tunable_policy(`allow_execmem && allow_execstack',`
+       tunable_policy(`allow_execstack',`
                # Allow making the stack executable via mprotect.
                allow $1_t self:process execstack;
        ')
+
+       optional_policy(`
+               abrt_stream_connect($1_usertype)
+       ')
+
+       optional_policy(`
+               fs_list_cgroup_dirs($1_usertype)
+       ')
+       
+       optional_policy(`
+               ssh_rw_stream_sockets($1_usertype)
+               ssh_delete_tmp($1_t)
+               ssh_signal($1_t)
+       ')
 ')
 
 #######################################
@@ -149,6 +205,8 @@ interface(`userdom_ro_home_role',`
                type user_home_t, user_home_dir_t;
        ')
 
+       role $1 types { user_home_t user_home_dir_t };
+
        ##############################
        #
        # Domain access to home dir
@@ -166,27 +224,6 @@ interface(`userdom_ro_home_role',`
        read_sock_files_pattern($2, { user_home_t user_home_dir_t }, user_home_t)
        files_list_home($2)
 
-       tunable_policy(`use_nfs_home_dirs',`
-               fs_list_nfs($2)
-               fs_read_nfs_files($2)
-               fs_read_nfs_symlinks($2)
-               fs_read_nfs_named_sockets($2)
-               fs_read_nfs_named_pipes($2)
-       ',`
-               fs_dontaudit_list_nfs($2)
-               fs_dontaudit_read_nfs_files($2)
-       ')
-
-       tunable_policy(`use_samba_home_dirs',`
-               fs_list_cifs($2)
-               fs_read_cifs_files($2)
-               fs_read_cifs_symlinks($2)
-               fs_read_cifs_named_sockets($2)
-               fs_read_cifs_named_pipes($2)
-       ',`
-               fs_dontaudit_list_cifs($2)
-               fs_dontaudit_read_cifs_files($2)
-       ')
 ')
 
 #######################################
@@ -218,8 +255,11 @@ interface(`userdom_ro_home_role',`
 interface(`userdom_manage_home_role',`
        gen_require(`
                type user_home_t, user_home_dir_t;
+               attribute user_home_type;
        ')
 
+       role $1 types { user_home_type user_home_dir_t };
+
        ##############################
        #
        # Domain access to home dir
@@ -228,43 +268,47 @@ interface(`userdom_manage_home_role',`
        type_member $2 user_home_dir_t:dir user_home_dir_t;
 
        # full control of the home directory
+       allow $2 user_home_t:dir mounton;
        allow $2 user_home_t:file entrypoint;
-       manage_dirs_pattern($2, { user_home_dir_t user_home_t }, user_home_t)
-       manage_files_pattern($2, { user_home_dir_t user_home_t }, user_home_t)
-       manage_lnk_files_pattern($2, { user_home_dir_t user_home_t }, user_home_t)
-       manage_sock_files_pattern($2, { user_home_dir_t user_home_t }, user_home_t)
-       manage_fifo_files_pattern($2, { user_home_dir_t user_home_t }, user_home_t)
-       relabel_dirs_pattern($2, { user_home_dir_t user_home_t }, user_home_t)
-       relabel_files_pattern($2, { user_home_dir_t user_home_t }, user_home_t)
-       relabel_lnk_files_pattern($2, { user_home_dir_t user_home_t }, user_home_t)
-       relabel_sock_files_pattern($2, { user_home_dir_t user_home_t }, user_home_t)
-       relabel_fifo_files_pattern($2, { user_home_dir_t user_home_t }, user_home_t)
+
+       allow $2 user_home_type:dir_file_class_set { relabelto relabelfrom };
+       allow $2 user_home_dir_t:lnk_file read_lnk_file_perms;
+       manage_dirs_pattern($2, { user_home_dir_t user_home_type }, user_home_type)
+       manage_files_pattern($2, { user_home_dir_t user_home_type }, user_home_type)
+       manage_lnk_files_pattern($2, { user_home_dir_t user_home_type }, user_home_type)
+       manage_sock_files_pattern($2, { user_home_dir_t user_home_type }, user_home_type)
+       manage_fifo_files_pattern($2, { user_home_dir_t user_home_type }, user_home_type)
+       relabel_dirs_pattern($2, { user_home_dir_t user_home_type }, user_home_type)
+       relabel_files_pattern($2, { user_home_dir_t user_home_type }, user_home_type)
+       relabel_lnk_files_pattern($2, { user_home_dir_t user_home_type }, user_home_type)
+       relabel_sock_files_pattern($2, { user_home_dir_t user_home_type }, user_home_type)
+       relabel_fifo_files_pattern($2, { user_home_dir_t user_home_type }, user_home_type)
        filetrans_pattern($2, user_home_dir_t, user_home_t, { dir file lnk_file sock_file fifo_file })
+       userdom_filetrans_home_content($2)
+
        files_list_home($2)
 
        # cjp: this should probably be removed:
        allow $2 user_home_dir_t:dir { manage_dir_perms relabel_dir_perms };
 
        tunable_policy(`use_nfs_home_dirs',`
+               fs_mount_nfs($2)
+               fs_mounton_nfs($2)
                fs_manage_nfs_dirs($2)
                fs_manage_nfs_files($2)
                fs_manage_nfs_symlinks($2)
                fs_manage_nfs_named_sockets($2)
                fs_manage_nfs_named_pipes($2)
-       ',`
-               fs_dontaudit_manage_nfs_dirs($2)
-               fs_dontaudit_manage_nfs_files($2)
        ')
 
        tunable_policy(`use_samba_home_dirs',`
+               fs_mount_cifs($2)
+               fs_mounton_cifs($2)
                fs_manage_cifs_dirs($2)
                fs_manage_cifs_files($2)
                fs_manage_cifs_symlinks($2)
                fs_manage_cifs_named_sockets($2)
                fs_manage_cifs_named_pipes($2)
-       ',`
-               fs_dontaudit_manage_cifs_dirs($2)
-               fs_dontaudit_manage_cifs_files($2)
        ')
 ')
 
@@ -286,17 +330,63 @@ interface(`userdom_manage_home_role',`
 #
 interface(`userdom_manage_tmp_role',`
        gen_require(`
+               attribute user_tmp_type;
                type user_tmp_t;
        ')
 
+       role $1 types user_tmp_t;
+
        files_poly_member_tmp($2, user_tmp_t)
 
-       manage_dirs_pattern($2, user_tmp_t, user_tmp_t)
-       manage_files_pattern($2, user_tmp_t, user_tmp_t)
-       manage_lnk_files_pattern($2, user_tmp_t, user_tmp_t)
-       manage_sock_files_pattern($2, user_tmp_t, user_tmp_t)
-       manage_fifo_files_pattern($2, user_tmp_t, user_tmp_t)
+       manage_dirs_pattern($2, user_tmp_type, user_tmp_type)
+       manage_files_pattern($2, user_tmp_type, user_tmp_type)
+       manage_lnk_files_pattern($2, user_tmp_type, user_tmp_type)
+       manage_sock_files_pattern($2, user_tmp_type, user_tmp_type)
+       manage_fifo_files_pattern($2, user_tmp_type, user_tmp_type)
        files_tmp_filetrans($2, user_tmp_t, { dir file lnk_file sock_file fifo_file })
+       relabel_dirs_pattern($2, user_tmp_type, user_tmp_type)
+       relabel_files_pattern($2, user_tmp_type, user_tmp_type)
+       relabel_lnk_files_pattern($2, user_tmp_type, user_tmp_type)
+       relabel_sock_files_pattern($2, user_tmp_type, user_tmp_type)
+       relabel_fifo_files_pattern($2, user_tmp_type, user_tmp_type)
+')
+
+#######################################
+## <summary>
+##     Dontaudit search of user bin dirs.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_search_user_bin_dirs',`
+       gen_require(`
+               type home_bin_t;
+       ')
+
+       dontaudit $1 home_bin_t:dir search_dir_perms;
+')
+
+#######################################
+## <summary>
+##     Execute user bin files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_exec_user_bin_files',`
+       gen_require(`
+               attribute user_home_type;
+               type home_bin_t, user_home_dir_t;
+       ')
+
+       exec_files_pattern($1, { user_home_dir_t user_home_type }, home_bin_t)
+       files_search_home($1)
 ')
 
 #######################################
@@ -316,6 +406,7 @@ interface(`userdom_exec_user_tmp_files',`
        ')
 
        exec_files_pattern($1, user_tmp_t, user_tmp_t)
+       dontaudit $1 user_tmp_t:sock_file execute;
        files_search_tmp($1)
 ')
 
@@ -347,59 +438,62 @@ interface(`userdom_exec_user_tmp_files',`
 #
 interface(`userdom_manage_tmpfs_role',`
        gen_require(`
+               attribute user_tmpfs_type;
                type user_tmpfs_t;
        ')
 
-       manage_dirs_pattern($2, user_tmpfs_t, user_tmpfs_t)
-       manage_files_pattern($2, user_tmpfs_t, user_tmpfs_t)
-       manage_lnk_files_pattern($2, user_tmpfs_t, user_tmpfs_t)
-       manage_sock_files_pattern($2, user_tmpfs_t, user_tmpfs_t)
-       manage_fifo_files_pattern($2, user_tmpfs_t, user_tmpfs_t)
+       role $1 types user_tmpfs_t;
+
+       manage_dirs_pattern($2, user_tmpfs_type, user_tmpfs_type)
+       manage_files_pattern($2, user_tmpfs_type, user_tmpfs_type)
+       manage_lnk_files_pattern($2, user_tmpfs_type, user_tmpfs_type)
+       manage_sock_files_pattern($2, user_tmpfs_type, user_tmpfs_type)
+       manage_fifo_files_pattern($2, user_tmpfs_type, user_tmpfs_type)
        fs_tmpfs_filetrans($2, user_tmpfs_t, { dir file lnk_file sock_file fifo_file })
+       relabel_dirs_pattern($2, user_tmpfs_type, user_tmpfs_type)
+       relabel_files_pattern($2, user_tmpfs_type, user_tmpfs_type)
+       relabel_lnk_files_pattern($2, user_tmpfs_type, user_tmpfs_type)
+       relabel_sock_files_pattern($2, user_tmpfs_type, user_tmpfs_type)
+       relabel_fifo_files_pattern($2, user_tmpfs_type, user_tmpfs_type)
 ')
 
 #######################################
 ## <summary>
-##     The template allowing the user basic
+##     The interface allowing the user basic
 ##     network permissions
 ## </summary>
-## <param name="userdomain_prefix">
+## <param name="userdomain">
 ##     <summary>
-##     The prefix of the user domain (e.g., user
-##     is the prefix for user_t).
+##     The user domain 
 ##     </summary>
 ## </param>
 ## <rolebase/>
 #
-template(`userdom_basic_networking_template',`
-       gen_require(`
-               type $1_t;
-       ')
-
-       allow $1_t self:tcp_socket create_stream_socket_perms;
-       allow $1_t self:udp_socket create_socket_perms;
-
-       corenet_all_recvfrom_unlabeled($1_t)
-       corenet_all_recvfrom_netlabel($1_t)
-       corenet_tcp_sendrecv_generic_if($1_t)
-       corenet_udp_sendrecv_generic_if($1_t)
-       corenet_tcp_sendrecv_generic_node($1_t)
-       corenet_udp_sendrecv_generic_node($1_t)
-       corenet_tcp_sendrecv_all_ports($1_t)
-       corenet_udp_sendrecv_all_ports($1_t)
-       corenet_tcp_connect_all_ports($1_t)
-       corenet_sendrecv_all_client_packets($1_t)
-
-       corenet_all_recvfrom_labeled($1_t, $1_t)
+interface(`userdom_basic_networking',`
+
+       allow $1 self:tcp_socket create_stream_socket_perms;
+       allow $1 self:udp_socket create_socket_perms;
+
+       corenet_all_recvfrom_unlabeled($1)
+       corenet_all_recvfrom_netlabel($1)
+       corenet_tcp_sendrecv_generic_if($1)
+       corenet_udp_sendrecv_generic_if($1)
+       corenet_tcp_sendrecv_generic_node($1)
+       corenet_udp_sendrecv_generic_node($1)
+       corenet_tcp_sendrecv_all_ports($1)
+       corenet_udp_sendrecv_all_ports($1)
+       corenet_tcp_connect_all_ports($1)
+       corenet_sendrecv_all_client_packets($1)
 
        optional_policy(`
-               init_tcp_recvfrom_all_daemons($1_t)
-               init_udp_recvfrom_all_daemons($1_t)
+               init_tcp_recvfrom_all_daemons($1)
+               init_udp_recvfrom_all_daemons($1)
        ')
 
        optional_policy(`
-               ipsec_match_default_spd($1_t)
+               ipsec_match_default_spd($1)
        ')
+
 ')
 
 #######################################
@@ -430,6 +524,7 @@ template(`userdom_xwindows_client_template',`
        dev_dontaudit_rw_dri($1_t)
        # GNOME checks for usb and other devices:
        dev_rw_usbfs($1_t)
+       dev_rw_generic_usb_dev($1_t)
 
        xserver_user_x_domain_template($1, $1_t, user_tmpfs_t)
        xserver_xsession_entry_type($1_t)
@@ -462,8 +557,8 @@ template(`userdom_change_password_template',`
        ')
 
        optional_policy(`
-               usermanage_run_chfn($1_t, $1_r)
-               usermanage_run_passwd($1_t, $1_r)
+               usermanage_run_chfn($1_t,$1_r)
+               usermanage_run_passwd($1_t,$1_r)
        ')
 ')
 
@@ -490,7 +585,7 @@ template(`userdom_common_user_template',`
                attribute unpriv_userdomain;
        ')
 
-       userdom_basic_networking_template($1)
+       userdom_basic_networking($1_usertype)
 
        ##############################
        #
@@ -500,73 +595,83 @@ template(`userdom_common_user_template',`
        # evolution and gnome-session try to create a netlink socket
        dontaudit $1_t self:netlink_socket { create ioctl read getattr write setattr append bind connect getopt setopt shutdown };
        dontaudit $1_t self:netlink_route_socket { create ioctl read getattr write setattr append bind connect getopt setopt shutdown nlmsg_read nlmsg_write };
+       allow $1_t self:netlink_kobject_uevent_socket create_socket_perms;
+       allow $1_t self:socket create_socket_perms;
 
-       allow $1_t unpriv_userdomain:fd use;
+       allow $1_usertype unpriv_userdomain:fd use;
 
-       kernel_read_system_state($1_t)
-       kernel_read_network_state($1_t)
-       kernel_read_net_sysctls($1_t)
+       kernel_read_system_state($1_usertype)
+       kernel_read_network_state($1_usertype)
+       kernel_read_software_raid_state($1_usertype)
+       kernel_read_net_sysctls($1_usertype)
        # Very permissive allowing every domain to see every type:
-       kernel_get_sysvipc_info($1_t)
+       kernel_get_sysvipc_info($1_usertype)
        # Find CDROM devices:
-       kernel_read_device_sysctls($1_t)
+       kernel_read_device_sysctls($1_usertype)
+       kernel_request_load_module($1_usertype)
 
-       corecmd_exec_bin($1_t)
+       corenet_udp_bind_generic_node($1_usertype)
+       corenet_udp_bind_generic_port($1_usertype)
 
-       corenet_udp_bind_generic_node($1_t)
-       corenet_udp_bind_generic_port($1_t)
+       dev_read_rand($1_usertype)
+       dev_write_sound($1_usertype)
+       dev_read_sound($1_usertype)
+       dev_read_sound_mixer($1_usertype)
+       dev_write_sound_mixer($1_usertype)
 
-       dev_read_rand($1_t)
-       dev_write_sound($1_t)
-       dev_read_sound($1_t)
-       dev_read_sound_mixer($1_t)
-       dev_write_sound_mixer($1_t)
-
-       files_exec_etc_files($1_t)
-       files_search_locks($1_t)
+       files_exec_etc_files($1_usertype)
+       files_search_locks($1_usertype)
        # Check to see if cdrom is mounted
-       files_search_mnt($1_t)
+       files_search_mnt($1_usertype)
        # cjp: perhaps should cut back on file reads:
-       files_read_var_files($1_t)
-       files_read_var_symlinks($1_t)
-       files_read_generic_spool($1_t)
-       files_read_var_lib_files($1_t)
+       files_read_var_files($1_usertype)
+       files_read_var_symlinks($1_usertype)
+       files_read_generic_spool($1_usertype)
+       files_read_var_lib_files($1_usertype)
        # Stat lost+found.
-       files_getattr_lost_found_dirs($1_t)
+       files_getattr_lost_found_dirs($1_usertype)
+       files_read_config_files($1_usertype)
+       fs_read_noxattr_fs_files($1_usertype)
+       fs_read_noxattr_fs_symlinks($1_usertype)
+       fs_rw_cgroup_files($1_usertype)
+
+       application_getattr_socket($1_usertype)
 
-       fs_rw_cgroup_files($1_t)
+       logging_send_syslog_msg($1_usertype)
+       logging_send_audit_msgs($1_usertype)
+       selinux_get_enforce_mode($1_usertype)
 
        # cjp: some of this probably can be removed
-       selinux_get_fs_mount($1_t)
-       selinux_validate_context($1_t)
-       selinux_compute_access_vector($1_t)
-       selinux_compute_create_context($1_t)
-       selinux_compute_relabel_context($1_t)
-       selinux_compute_user_contexts($1_t)
+       selinux_get_fs_mount($1_usertype)
+       selinux_validate_context($1_usertype)
+       selinux_compute_access_vector($1_usertype)
+       selinux_compute_create_context($1_usertype)
+       selinux_compute_relabel_context($1_usertype)
+       selinux_compute_user_contexts($1_usertype)
 
        # for eject
-       storage_getattr_fixed_disk_dev($1_t)
+       storage_getattr_fixed_disk_dev($1_usertype)
 
-       auth_use_nsswitch($1_t)
-       auth_read_login_records($1_t)
-       auth_search_pam_console_data($1_t)
-       auth_run_pam($1_t, $1_r)
-       auth_run_utempter($1_t, $1_r)
+       auth_read_login_records($1_usertype)
+       auth_run_pam($1_t,$1_r)
+       auth_run_utempter($1_t,$1_r)
+       auth_filetrans_admin_home_content($1_t)
+       auth_filetrans_home_content($1_t)
 
-       init_read_utmp($1_t)
+       init_read_utmp($1_usertype)
 
-       seutil_read_file_contexts($1_t)
-       seutil_read_default_contexts($1_t)
-       seutil_run_newrole($1_t, $1_r)
+       seutil_read_file_contexts($1_usertype)
+       seutil_read_default_contexts($1_usertype)
+       seutil_run_newrole($1_t,$1_r)
        seutil_exec_checkpolicy($1_t)
-       seutil_exec_setfiles($1_t)
+       seutil_exec_setfiles($1_usertype)
        # for when the network connection is killed
        # this is needed when a login role can change
        # to this one.
        seutil_dontaudit_signal_newrole($1_t)
 
        tunable_policy(`user_direct_mouse',`
-               dev_read_mouse($1_t)
+               dev_read_mouse($1_usertype)
        ')
 
        tunable_policy(`user_ttyfile_stat',`
@@ -574,67 +679,104 @@ template(`userdom_common_user_template',`
        ')
 
        optional_policy(`
-               alsa_manage_home_files($1_t)
-               alsa_read_rw_config($1_t)
-               alsa_relabel_home_files($1_t)
+               # Allow graphical boot to check battery lifespan
+               apm_stream_connect($1_usertype)
        ')
 
        optional_policy(`
-               # Allow graphical boot to check battery lifespan
-               apm_stream_connect($1_t)
+               canna_stream_connect($1_usertype)
        ')
 
        optional_policy(`
-               canna_stream_connect($1_t)
+               colord_read_lib_files($1_usertype)
        ')
 
        optional_policy(`
-               dbus_system_bus_client($1_t)
+               dbus_system_bus_client($1_usertype)
+
+               allow $1_usertype $1_usertype:dbus  send_msg;
+
+               optional_policy(`
+                       avahi_dbus_chat($1_usertype)
+               ')
+
+               optional_policy(`
+                       policykit_dbus_chat($1_usertype)
+               ')
 
                optional_policy(`
-                       bluetooth_dbus_chat($1_t)
+                       bluetooth_dbus_chat($1_usertype)
                ')
 
                optional_policy(`
-                       evolution_dbus_chat($1_t)
-                       evolution_alarm_dbus_chat($1_t)
+                       consolekit_dbus_chat($1_usertype)
+                       consolekit_read_log($1_usertype)
                ')
 
                optional_policy(`
-                       cups_dbus_chat_config($1_t)
+                       devicekit_dbus_chat($1_usertype)
+                       devicekit_dbus_chat_power($1_usertype)
+                       devicekit_dbus_chat_disk($1_usertype)
                ')
 
                optional_policy(`
-                       hal_dbus_chat($1_t)
+                       gnome_dbus_chat_gconfdefault($1_usertype)
                ')
 
                optional_policy(`
-                       networkmanager_dbus_chat($1_t)
+                       hal_dbus_chat($1_usertype)
                ')
+
+               optional_policy(`
+                       kde_dbus_chat_backlighthelper($1_usertype)
+               ')
+
+               optional_policy(`
+                       modemmanager_dbus_chat($1_usertype)
+               ')
+
+               optional_policy(`
+                       networkmanager_dbus_chat($1_usertype)
+                       networkmanager_read_lib_files($1_usertype)
+               ')
+
+               optional_policy(`
+                       vpn_dbus_chat($1_usertype)
+               ')
+       ')
+
+       optional_policy(`
+               git_session_role($1_r, $1_usertype)
+       ')
+
+       optional_policy(`
+               inetd_use_fds($1_usertype)
+               inetd_rw_tcp_sockets($1_usertype)
        ')
 
        optional_policy(`
-               inetd_use_fds($1_t)
-               inetd_rw_tcp_sockets($1_t)
+               inn_read_config($1_usertype)
+               inn_read_news_lib($1_usertype)
+               inn_read_news_spool($1_usertype)
        ')
 
        optional_policy(`
-               inn_read_config($1_t)
-               inn_read_news_lib($1_t)
-               inn_read_news_spool($1_t)
+               lircd_stream_connect($1_usertype)
        ')
 
        optional_policy(`
-               locate_read_lib_files($1_t)
+               locate_read_lib_files($1_usertype)
        ')
 
        # for running depmod as part of the kernel packaging process
        optional_policy(`
-               modutils_read_module_config($1_t)
+               modutils_read_module_config($1_usertype)
        ')
 
        optional_policy(`
-               mta_rw_spool($1_t)
+               mta_rw_spool($1_usertype)
+               mta_manage_queue($1_usertype)
+               mta_filetrans_home_content($1_usertype)
        ')
 
        optional_policy(`
@@ -650,40 +792,48 @@ template(`userdom_common_user_template',`
 
        optional_policy(`
                # to allow monitoring of pcmcia status
-               pcmcia_read_pid($1_t)
+               pcmcia_read_pid($1_usertype)
        ')
 
        optional_policy(`
-               pcscd_read_pub_files($1_t)
-               pcscd_stream_connect($1_t)
+               pcscd_read_pub_files($1_usertype)
+               pcscd_stream_connect($1_usertype)
        ')
 
        optional_policy(`
                tunable_policy(`allow_user_postgresql_connect',`
-                       postgresql_stream_connect($1_t)
-                       postgresql_tcp_connect($1_t)
+                       postgresql_stream_connect($1_usertype)
+                       postgresql_tcp_connect($1_usertype)
                ')
        ')
 
        optional_policy(`
-               resmgr_stream_connect($1_t)
+               resmgr_stream_connect($1_usertype)
+       ')
+
+       optional_policy(`
+               rpc_dontaudit_getattr_exports($1_usertype)
+               rpc_manage_nfs_rw_content($1_usertype)
+       ')
+
+       optional_policy(`
+               rpcbind_stream_connect($1_usertype)
        ')
 
        optional_policy(`
-               rpc_dontaudit_getattr_exports($1_t)
-               rpc_manage_nfs_rw_content($1_t)
+               samba_stream_connect_winbind($1_usertype)
        ')
 
        optional_policy(`
-               samba_stream_connect_winbind($1_t)
+               sandbox_transition($1_usertype, $1_r)
        ')
 
        optional_policy(`
-               slrnpull_search_spool($1_t)
+               seunshare_role_template($1, $1_r, $1_t)
        ')
 
        optional_policy(`
-               usernetctl_run($1_t, $1_r)
+               slrnpull_search_spool($1_usertype)
        ')
 ')
 
@@ -712,13 +862,26 @@ template(`userdom_login_user_template', `
 
        userdom_base_user_template($1)
 
-       userdom_manage_home_role($1_r, $1_t)
+       userdom_manage_home_role($1_r, $1_usertype)
 
-       userdom_manage_tmp_role($1_r, $1_t)
-       userdom_manage_tmpfs_role($1_r, $1_t)
+       userdom_manage_tmp_role($1_r, $1_usertype)
+       userdom_manage_tmpfs_role($1_r, $1_usertype)
 
-       userdom_exec_user_tmp_files($1_t)
-       userdom_exec_user_home_content_files($1_t)
+       ifelse(`$1',`unconfined',`',`
+               gen_tunable(allow_$1_exec_content, true)
+
+               tunable_policy(`allow_$1_exec_content',`
+                       userdom_exec_user_tmp_files($1_usertype)
+                       userdom_exec_user_home_content_files($1_usertype)
+               ')
+               tunable_policy(`allow_$1_exec_content && use_nfs_home_dirs',`
+                        fs_exec_nfs_files($1_usertype)
+               ')
+
+               tunable_policy(`allow_$1_exec_content && use_samba_home_dirs',`
+                       fs_exec_cifs_files($1_usertype)
+               ')
+       ')
 
        userdom_change_password_template($1)
 
@@ -730,78 +893,82 @@ template(`userdom_login_user_template', `
        allow $1_t self:capability { setgid chown fowner };
        dontaudit $1_t self:capability { sys_nice fsetid };
 
-       allow $1_t self:process ~{ setcurrent setexec setrlimit execmem execstack execheap };
+       allow $1_t self:process ~{ ptrace setcurrent setexec setrlimit execmem execstack execheap };
        dontaudit $1_t self:process setrlimit;
        dontaudit $1_t self:netlink_route_socket { create ioctl read getattr write setattr append bind connect getopt setopt shutdown nlmsg_read nlmsg_write };
 
        allow $1_t self:context contains;
 
-       kernel_dontaudit_read_system_state($1_t)
+       kernel_dontaudit_read_system_state($1_usertype)
+       kernel_dontaudit_list_all_proc($1_usertype)
 
-       dev_read_sysfs($1_t)
-       dev_read_urand($1_t)
+       dev_read_sysfs($1_usertype)
+       dev_read_urand($1_usertype)
 
-       domain_use_interactive_fds($1_t)
+       domain_use_interactive_fds($1_usertype)
        # Command completion can fire hundreds of denials
-       domain_dontaudit_exec_all_entry_files($1_t)
+       domain_dontaudit_exec_all_entry_files($1_usertype)
 
-       files_dontaudit_list_default($1_t)
-       files_dontaudit_read_default_files($1_t)
+       files_dontaudit_list_default($1_usertype)
+       files_dontaudit_read_default_files($1_usertype)
        # Stat lost+found.
-       files_getattr_lost_found_dirs($1_t)
+       files_getattr_lost_found_dirs($1_usertype)
 
-       fs_get_all_fs_quotas($1_t)
-       fs_getattr_all_fs($1_t)
-       fs_getattr_all_dirs($1_t)
-       fs_search_auto_mountpoints($1_t)
-       fs_list_cgroup_dirs($1_t)
-       fs_list_inotifyfs($1_t)
-       fs_rw_anon_inodefs_files($1_t)
-       fs_dontaudit_rw_cgroup_files($1_t)
+       fs_get_all_fs_quotas($1_usertype)
+       fs_getattr_all_fs($1_usertype)
+       fs_search_all($1_usertype)
+       fs_list_inotifyfs($1_usertype)
+       fs_rw_anon_inodefs_files($1_usertype)
 
        auth_dontaudit_write_login_records($1_t)
+       auth_rw_cache($1_t)
 
        application_exec_all($1_t)
-
        # The library functions always try to open read-write first,
        # then fall back to read-only if it fails.
        init_dontaudit_rw_utmp($1_t)
+
        # Stop warnings about access to /dev/console
-       init_dontaudit_use_fds($1_t)
-       init_dontaudit_use_script_fds($1_t)
+       init_dontaudit_use_fds($1_usertype)
+       init_dontaudit_use_script_fds($1_usertype)
 
-       libs_exec_lib_files($1_t)
+       libs_exec_lib_files($1_usertype)
 
-       logging_dontaudit_getattr_all_logs($1_t)
+       logging_dontaudit_getattr_all_logs($1_usertype)
 
-       miscfiles_read_man_pages($1_t)
        # for running TeX programs
-       miscfiles_read_tetex_data($1_t)
-       miscfiles_exec_tetex_data($1_t)
+       miscfiles_read_tetex_data($1_usertype)
+       miscfiles_exec_tetex_data($1_usertype)
+
+       seutil_read_config($1_usertype)
 
-       seutil_read_config($1_t)
+       optional_policy(`
+               cups_read_config($1_usertype)
+               cups_stream_connect($1_usertype)
+               cups_stream_connect_ptal($1_usertype)
+       ')
 
        optional_policy(`
-               cups_read_config($1_t)
-               cups_stream_connect($1_t)
-               cups_stream_connect_ptal($1_t)
+               kerberos_use($1_usertype)
+               kerberos_filetrans_home_content($1_usertype)
        ')
 
        optional_policy(`
-               kerberos_use($1_t)
+               mta_dontaudit_read_spool_symlinks($1_usertype)
        ')
 
        optional_policy(`
-               mta_dontaudit_read_spool_symlinks($1_t)
+               quota_dontaudit_getattr_db($1_usertype)
        ')
 
        optional_policy(`
-               quota_dontaudit_getattr_db($1_t)
+               rpm_read_db($1_usertype)
+               rpm_dontaudit_manage_db($1_usertype)
+               rpm_read_cache($1_usertype)
        ')
 
        optional_policy(`
-               rpm_read_db($1_t)
-               rpm_dontaudit_manage_db($1_t)
+               oddjob_run_mkhomedir($1_t, $1_r)
        ')
 ')
 
@@ -833,6 +1000,9 @@ template(`userdom_restricted_user_template',`
        typeattribute $1_t unpriv_userdomain;
        domain_interactive_fd($1_t)
 
+       allow $1_usertype self:netlink_kobject_uevent_socket create_socket_perms;
+       dontaudit $1_usertype self:netlink_audit_socket create_socket_perms;
+
        ##############################
        #
        # Local policy
@@ -874,45 +1044,112 @@ template(`userdom_restricted_xwindows_user_template',`
        #
 
        auth_role($1_r, $1_t)
-       auth_search_pam_console_data($1_t)
+       auth_search_pam_console_data($1_usertype)
+       auth_dontaudit_read_login_records($1_usertype)
 
-       dev_read_sound($1_t)
-       dev_write_sound($1_t)
+       dev_read_sound($1_usertype)
+       dev_write_sound($1_usertype)
        # gnome keyring wants to read this.
-       dev_dontaudit_read_rand($1_t)
+       dev_dontaudit_read_rand($1_usertype)
+       # temporarily allow since openoffice requires this
+       dev_read_rand($1_usertype)
 
-       logging_send_syslog_msg($1_t)
+       dev_read_video_dev($1_usertype)
+       dev_write_video_dev($1_usertype)
+       dev_rw_wireless($1_usertype)
+
+       libs_dontaudit_setattr_lib_files($1_usertype)
+
+       tunable_policy(`user_rw_noexattrfile',`
+               dev_rw_usbfs($1_t)
+               dev_rw_generic_usb_dev($1_usertype)
+
+               fs_manage_noxattr_fs_files($1_usertype)
+               fs_manage_noxattr_fs_dirs($1_usertype)
+               fs_manage_dos_dirs($1_usertype)
+               fs_manage_dos_files($1_usertype)
+               storage_raw_read_removable_device($1_usertype)
+               storage_raw_write_removable_device($1_usertype)
+       ')
+
+       logging_send_syslog_msg($1_usertype)
        logging_dontaudit_send_audit_msgs($1_t)
 
        # Need to to this just so screensaver will work. Should be moved to screensaver domain
        logging_send_audit_msgs($1_t)
        selinux_get_enforce_mode($1_t)
+       seutil_exec_restorecond($1_t)
+       seutil_read_file_contexts($1_t)
+       seutil_read_default_contexts($1_t)
 
        xserver_restricted_role($1_r, $1_t)
 
        optional_policy(`
-               alsa_read_rw_config($1_t)
+               alsa_read_rw_config($1_usertype)
+       ')
+
+        # cjp: needed by KDE apps
+        # bug: #682499
+        optional_policy(`
+               gnome_read_usr_config($1_usertype)
+               gnome_role_gkeyringd($1, $1_r, $1_usertype)
        ')
 
        optional_policy(`
-               dbus_role_template($1, $1_r, $1_t)
-               dbus_system_bus_client($1_t)
+               dbus_role_template($1, $1_r, $1_usertype)
+               dbus_system_bus_client($1_usertype)
+               allow $1_usertype $1_usertype:dbus send_msg;
 
                optional_policy(`
-                       consolekit_dbus_chat($1_t)
+                       abrt_dbus_chat($1_usertype)
+                       abrt_run_helper($1_usertype, $1_r)
                ')
 
                optional_policy(`
-                       cups_dbus_chat($1_t)
+                       consolekit_dontaudit_read_log($1_usertype)
+                       consolekit_dbus_chat($1_usertype)
                ')
+
+               optional_policy(`
+                       cups_dbus_chat($1_usertype)
+                       cups_dbus_chat_config($1_usertype)
+               ')
+
+               optional_policy(`
+                       devicekit_dbus_chat($1_usertype)
+                       devicekit_dbus_chat_disk($1_usertype)
+                       devicekit_dbus_chat_power($1_usertype)
+               ')
+
+               optional_policy(`
+                       fprintd_dbus_chat($1_t)
+               ')
+       ')
+
+       optional_policy(`
+               policykit_role($1_r, $1_usertype)
        ')
 
        optional_policy(`
-               java_role($1_r, $1_t)
+               pulseaudio_role($1_r, $1_usertype)
+               pulseaudio_filetrans_admin_home_content($1_usertype)
+               pulseaudio_filetrans_home_content($1_usertype)
+       ')
+
+       optional_policy(`
+               rtkit_scheduled($1_usertype)
        ')
 
        optional_policy(`
                setroubleshoot_dontaudit_stream_connect($1_t)
+        ')
+
+       optional_policy(`
+               udev_read_db($1_usertype)
+        ')
+
+       optional_policy(`
+               wm_role_template($1, $1_r, $1_t)
        ')
 ')
 
@@ -947,7 +1184,7 @@ template(`userdom_unpriv_user_template', `
        #
 
        # Inherit rules for ordinary users.
-       userdom_restricted_user_template($1)
+       userdom_restricted_xwindows_user_template($1)
        userdom_common_user_template($1)
 
        ##############################
@@ -956,12 +1193,15 @@ template(`userdom_unpriv_user_template', `
        #
 
        # port access is audited even if dac would not have allowed it, so dontaudit it here
-       corenet_dontaudit_tcp_bind_all_reserved_ports($1_t)
+#      corenet_dontaudit_tcp_bind_all_reserved_ports($1_t)
        # Need the following rule to allow users to run vpnc
        corenet_tcp_bind_xserver_port($1_t)
+       corenet_tcp_bind_generic_node($1_usertype)
+
+       storage_rw_fuse($1_t)
 
        files_exec_usr_files($1_t)
-       # cjp: why?
+   # cjp: why?
        files_read_kernel_symbol_table($1_t)
 
        ifndef(`enable_mls',`
@@ -978,23 +1218,56 @@ template(`userdom_unpriv_user_template', `
                ')
        ')
 
-       tunable_policy(`user_dmesg',`
-               kernel_read_ring_buffer($1_t)
-       ',`
-               kernel_dontaudit_read_ring_buffer($1_t)
-       ')
+       miscfiles_read_hwdata($1_usertype)
 
        # Allow users to run TCP servers (bind to ports and accept connection from
        # the same domain and outside users) disabling this forces FTP passive mode
        # and may change other protocols
+
+       tunable_policy(`user_share_music',`
+               corenet_tcp_bind_daap_port($1_usertype)
+       ')
+
        tunable_policy(`user_tcp_server',`
-               corenet_tcp_bind_generic_node($1_t)
-               corenet_tcp_bind_generic_port($1_t)
+               corenet_tcp_bind_all_unreserved_ports($1_usertype)
+       ')
+
+       tunable_policy(`user_setrlimit',`
+               allow $1_usertype self:process setrlimit;
+       ')
+
+       optional_policy(`
+               cdrecord_role($1_r, $1_t)
+       ')
+
+       optional_policy(`
+               cron_role($1_r, $1_t)
+       ')
+
+       optional_policy(`
+               gpg_role($1_r, $1_usertype)
+       ')
+
+       optional_policy(`
+               gnomeclock_dbus_chat($1_t)
+       ')
+
+       optional_policy(`
+               gpm_stream_connect($1_usertype)
+       ')
+
+       optional_policy(`
+               mount_run_fusermount($1_t, $1_r)
+               mount_read_pid_files($1_t)
+       ')
+
+       optional_policy(`
+               wine_role_template($1, $1_r, $1_t)
        ')
 
        optional_policy(`
-               netutils_run_ping_cond($1_t, $1_r)
-               netutils_run_traceroute_cond($1_t, $1_r)
+               postfix_run_postdrop($1_t, $1_r)
+               postfix_search_spool($1_t)
        ')
 
        # Run pppd in pppd_t by default for user
@@ -1003,7 +1276,9 @@ template(`userdom_unpriv_user_template', `
        ')
 
        optional_policy(`
-               setroubleshoot_stream_connect($1_t)
+               vdagent_getattr_log($1_t)
+               vdagent_getattr_exec($1_t)
+               vdagent_stream_connect($1_t)
        ')
 ')
 
@@ -1039,7 +1314,7 @@ template(`userdom_unpriv_user_template', `
 template(`userdom_admin_user_template',`
        gen_require(`
                attribute admindomain;
-               class passwd { passwd chfn chsh rootok };
+               class passwd { passwd chfn chsh rootok crontab };
        ')
 
        ##############################
@@ -1065,7 +1340,11 @@ template(`userdom_admin_user_template',`
        # $1_t local policy
        #
 
-       allow $1_t self:capability ~{ sys_module audit_control audit_write };
+       allow $1_t self:capability ~{ sys_ptrace sys_module audit_control audit_write };
+       tunable_policy(`deny_ptrace',`',`
+               allow $1_t self:capability sys_ptrace;
+       ')
+       allow $1_t self:capability2 syslog;
        allow $1_t self:process { setexec setfscreate };
        allow $1_t self:netlink_audit_socket nlmsg_readpriv;
        allow $1_t self:tun_socket create;
@@ -1074,6 +1353,9 @@ template(`userdom_admin_user_template',`
        # Skip authentication when pam_rootok is specified.
        allow $1_t self:passwd rootok;
 
+       # Manipulate other users crontab.
+       allow $1_t self:passwd crontab;
+
        kernel_read_software_raid_state($1_t)
        kernel_getattr_core_if($1_t)
        kernel_getattr_message_if($1_t)
@@ -1088,6 +1370,7 @@ template(`userdom_admin_user_template',`
        kernel_sigstop_unlabeled($1_t)
        kernel_signull_unlabeled($1_t)
        kernel_sigchld_unlabeled($1_t)
+       kernel_signal($1_t)
 
        corenet_tcp_bind_generic_port($1_t)
        # allow setting up tunnels
@@ -1105,10 +1388,13 @@ template(`userdom_admin_user_template',`
        dev_rename_all_blk_files($1_t)
        dev_rename_all_chr_files($1_t)
        dev_create_generic_symlinks($1_t)
+       dev_rw_generic_usb_dev($1_t)
+       dev_rw_usbfs($1_t)
 
        domain_setpriority_all_domains($1_t)
        domain_read_all_domains_state($1_t)
        domain_getattr_all_domains($1_t)
+       domain_getcap_all_domains($1_t)
        domain_dontaudit_ptrace_all_domains($1_t)
        # signal all domains:
        domain_kill_all_domains($1_t)
@@ -1119,29 +1405,38 @@ template(`userdom_admin_user_template',`
        domain_sigchld_all_domains($1_t)
        # for lsof
        domain_getattr_all_sockets($1_t)
+       domain_dontaudit_getattr_all_sockets($1_t)
 
        files_exec_usr_src_files($1_t)
 
        fs_getattr_all_fs($1_t)
+       fs_getattr_all_files($1_t)
+       fs_list_all($1_t)
        fs_set_all_quotas($1_t)
        fs_exec_noxattr($1_t)
 
        storage_raw_read_removable_device($1_t)
        storage_raw_write_removable_device($1_t)
+       storage_dontaudit_read_fixed_disk($1_t)
 
-       term_use_all_terms($1_t)
+       term_use_all_inherited_terms($1_t)
+       term_use_unallocated_ttys($1_t)
 
        auth_getattr_shadow($1_t)
        # Manage almost all files
-       auth_manage_all_files_except_shadow($1_t)
+       files_manage_non_security_dirs($1_t)
+       files_manage_non_security_files($1_t)
        # Relabel almost all files
-       auth_relabel_all_files_except_shadow($1_t)
+       files_relabel_non_security_files($1_t)
 
        init_telinit($1_t)
 
        logging_send_syslog_msg($1_t)
 
-       modutils_domtrans_insmod($1_t)
+       optional_policy(`
+               modutils_domtrans_insmod($1_t)
+               modutils_domtrans_depmod($1_t)
+       ')
 
        # The following rule is temporary until such time that a complete
        # policy management infrastructure is in place so that an administrator
@@ -1151,6 +1446,8 @@ template(`userdom_admin_user_template',`
        # But presently necessary for installing the file_contexts file.
        seutil_manage_bin_policy($1_t)
 
+       systemd_config_all_services($1_t)
+
        userdom_manage_user_home_content_dirs($1_t)
        userdom_manage_user_home_content_files($1_t)
        userdom_manage_user_home_content_symlinks($1_t)
@@ -1210,6 +1507,8 @@ template(`userdom_security_admin_template',`
        dev_relabel_all_dev_nodes($1)
 
        files_create_boot_flag($1)
+       files_create_default_dir($1)
+       files_root_filetrans_default($1, dir)
 
        # Necessary for managing /boot/efi
        fs_manage_dos_files($1)
@@ -1222,8 +1521,9 @@ template(`userdom_security_admin_template',`
        selinux_set_enforce_mode($1)
        selinux_set_all_booleans($1)
        selinux_set_parameters($1)
+       selinux_read_policy($1)
 
-       auth_relabel_all_files_except_shadow($1)
+       files_relabel_all_files($1)
        auth_relabel_shadow($1)
 
        init_exec($1)
@@ -1234,13 +1534,24 @@ template(`userdom_security_admin_template',`
        logging_read_audit_config($1)
 
        seutil_manage_bin_policy($1)
-       seutil_run_checkpolicy($1, $2)
-       seutil_run_loadpolicy($1, $2)
-       seutil_run_semanage($1, $2)
+       seutil_manage_default_contexts($1)
+       seutil_manage_file_contexts($1)
+       seutil_manage_module_store($1)
+       seutil_manage_config($1)
+       seutil_run_checkpolicy($1,$2)
+       seutil_run_loadpolicy($1,$2)
+       seutil_run_semanage($1,$2)
+       seutil_run_setsebool($1,$2)
        seutil_run_setfiles($1, $2)
 
+       seutil_manage_bin_policy($1)
+    seutil_manage_default_contexts($1)
+    seutil_manage_file_contexts($1)
+    seutil_manage_module_store($1)
+    seutil_manage_config($1)
+
        optional_policy(`
-               aide_run($1, $2)
+               aide_run($1,$2)
        ')
 
        optional_policy(`
@@ -1251,12 +1562,12 @@ template(`userdom_security_admin_template',`
                dmesg_exec($1)
        ')
 
-       optional_policy(`
-               ipsec_run_setkey($1, $2)
+       optional_policy(`       
+               ipsec_run_setkey($1,$2)
        ')
 
        optional_policy(`
-               netlabel_run_mgmt($1, $2)
+               netlabel_run_mgmt($1,$2)
        ')
 
        optional_policy(`
@@ -1279,11 +1590,60 @@ template(`userdom_security_admin_template',`
 interface(`userdom_user_home_content',`
        gen_require(`
                type user_home_t;
+               attribute user_home_type;
        ')
 
        allow $1 user_home_t:filesystem associate;
        files_type($1)
+       ubac_constrained($1)
+
        files_poly_member($1)
+       typeattribute $1  user_home_type;
+')
+
+########################################
+## <summary>
+##     Make the specified type usable in a
+##     generic temporary directory.
+## </summary>
+## <param name="type">
+##     <summary>
+##     Type to be used as a file in the
+##     generic temporary directory.
+##     </summary>
+## </param>
+#
+interface(`userdom_user_tmp_content',`
+       gen_require(`
+               attribute user_tmp_type;
+       ')
+
+       typeattribute $1 user_tmp_type;
+
+       files_tmp_file($1)
+       ubac_constrained($1)
+')
+
+########################################
+## <summary>
+##     Make the specified type usable in a
+##     generic tmpfs_t directory.
+## </summary>
+## <param name="type">
+##     <summary>
+##     Type to be used as a file in the
+##     generic temporary directory.
+##     </summary>
+## </param>
+#
+interface(`userdom_user_tmpfs_content',`
+       gen_require(`
+               attribute user_tmpfs_type;
+       ')
+
+       typeattribute $1 user_tmpfs_type;
+
+       files_tmpfs_file($1)
        ubac_constrained($1)
 ')
 
@@ -1395,6 +1755,7 @@ interface(`userdom_search_user_home_dirs',`
        ')
 
        allow $1 user_home_dir_t:dir search_dir_perms;
+       allow $1 user_home_dir_t:lnk_file read_lnk_file_perms;
        files_search_home($1)
 ')
 
@@ -1441,6 +1802,14 @@ interface(`userdom_list_user_home_dirs',`
 
        allow $1 user_home_dir_t:dir list_dir_perms;
        files_search_home($1)
+
+       tunable_policy(`use_nfs_home_dirs',`
+               fs_list_nfs($1)
+       ')
+
+       tunable_policy(`use_samba_home_dirs',`
+               fs_list_cifs($1)
+       ')
 ')
 
 ########################################
@@ -1456,9 +1825,11 @@ interface(`userdom_list_user_home_dirs',`
 interface(`userdom_dontaudit_list_user_home_dirs',`
        gen_require(`
                type user_home_dir_t;
+               type user_home_t;
        ')
 
        dontaudit $1 user_home_dir_t:dir list_dir_perms;
+       dontaudit $1 user_home_t:dir list_dir_perms;
 ')
 
 ########################################
@@ -1515,10 +1886,10 @@ interface(`userdom_relabelto_user_home_dirs',`
        allow $1 user_home_dir_t:dir relabelto;
 ')
 
+
 ########################################
 ## <summary>
-##     Create directories in the home dir root with
-##     the user home directory type.
+##     Relabel to user home files.
 ## </summary>
 ## <param name="domain">
 ##     <summary>
@@ -1526,19 +1897,55 @@ interface(`userdom_relabelto_user_home_dirs',`
 ##     </summary>
 ## </param>
 #
-interface(`userdom_home_filetrans_user_home_dir',`
+interface(`userdom_relabelto_user_home_files',`
        gen_require(`
-               type user_home_dir_t;
+               type user_home_t;
        ')
 
-       files_home_filetrans($1, user_home_dir_t, dir)
+       allow $1 user_home_t:file relabelto;
 ')
-
 ########################################
 ## <summary>
-##     Do a domain transition to the specified
-##     domain when executing a program in the
-##     user home directory.
+##     Relabel user home files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_relabel_user_home_files',`
+       gen_require(`
+               type user_home_t;
+       ')
+
+       allow $1 user_home_t:file relabel_file_perms;
+')
+
+########################################
+## <summary>
+##     Create directories in the home dir root with
+##     the user home directory type.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_home_filetrans_user_home_dir',`
+       gen_require(`
+               type user_home_dir_t;
+       ')
+
+       files_home_filetrans($1, user_home_dir_t, dir)
+')
+
+########################################
+## <summary>
+##     Do a domain transition to the specified
+##     domain when executing a program in the
+##     user home directory.
 ## </summary>
 ## <desc>
 ##     <p>
@@ -1589,6 +1996,8 @@ interface(`userdom_dontaudit_search_user_home_content',`
        ')
 
        dontaudit $1 user_home_t:dir search_dir_perms;
+       fs_dontaudit_list_nfs($1)
+       fs_dontaudit_list_cifs($1)
 ')
 
 ########################################
@@ -1603,10 +2012,12 @@ interface(`userdom_dontaudit_search_user_home_content',`
 #
 interface(`userdom_list_user_home_content',`
        gen_require(`
-               type user_home_t;
+               type user_home_dir_t;
+               attribute user_home_type;
        ')
 
-       allow $1 user_home_t:dir list_dir_perms;
+       files_list_home($1)
+       allow $1 { user_home_dir_t user_home_type }:dir list_dir_perms;
 ')
 
 ########################################
@@ -1647,6 +2058,43 @@ interface(`userdom_delete_user_home_content_dirs',`
        allow $1 user_home_t:dir delete_dir_perms;
 ')
 
+########################################
+## <summary>
+##     Delete all directories in a user home subdirectory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_delete_all_user_home_content_dirs',`
+       gen_require(`
+               attribute user_home_type;
+       ')
+
+       allow $1 user_home_type:dir delete_dir_perms;
+')
+
+########################################
+## <summary>
+##     Set the attributes of user home files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <rolecap/>
+#
+interface(`userdom_setattr_user_home_content_files',`
+       gen_require(`
+               type user_home_t;
+       ')
+
+       allow $1 user_home_t:file setattr;
+')
+
 ########################################
 ## <summary>
 ##     Do not audit attempts to set the
@@ -1666,6 +2114,25 @@ interface(`userdom_dontaudit_setattr_user_home_content_files',`
        dontaudit $1 user_home_t:file setattr_file_perms;
 ')
 
+########################################
+## <summary>
+##     Set the attributes of all user home directories.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <rolecap/>
+#
+interface(`userdom_setattr_all_user_home_content_dirs',`
+       gen_require(`
+               attribute user_home_type;
+       ')
+
+       allow $1 user_home_type:dir setattr_dir_perms;
+')
+
 ########################################
 ## <summary>
 ##     Mmap user home files.
@@ -1700,10 +2167,30 @@ interface(`userdom_read_user_home_content_files',`
                type user_home_dir_t, user_home_t;
        ')
 
+       list_dirs_pattern($1, { user_home_dir_t user_home_t }, { user_home_dir_t user_home_t })
        read_files_pattern($1, { user_home_dir_t user_home_t }, user_home_t)
        files_search_home($1)
 ')
 
+########################################
+## <summary>
+##     Do not audit attempts to getattr user home files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_getattr_user_home_content',`
+       gen_require(`
+               attribute user_home_type;
+       ')
+
+       dontaudit $1 user_home_type:dir getattr;
+       dontaudit $1 user_home_type:file getattr;
+')
+
 ########################################
 ## <summary>
 ##     Do not audit attempts to read user home files.
@@ -1716,11 +2203,14 @@ interface(`userdom_read_user_home_content_files',`
 #
 interface(`userdom_dontaudit_read_user_home_content_files',`
        gen_require(`
-               type user_home_t;
+               attribute user_home_type;
+               type user_home_dir_t;
        ')
 
-       dontaudit $1 user_home_t:dir list_dir_perms;
-       dontaudit $1 user_home_t:file read_file_perms;
+       dontaudit $1 user_home_dir_t:dir list_dir_perms;
+       dontaudit $1 user_home_type:dir list_dir_perms;
+       dontaudit $1 user_home_type:file read_file_perms;
+       dontaudit $1 user_home_type:lnk_file read_lnk_file_perms;
 ')
 
 ########################################
@@ -1777,6 +2267,60 @@ interface(`userdom_delete_user_home_content_files',`
        allow $1 user_home_t:file delete_file_perms;
 ')
 
+########################################
+## <summary>
+##     Delete all files in a user home subdirectory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_delete_all_user_home_content_files',`
+       gen_require(`
+               attribute user_home_type;
+       ')
+
+       allow $1 user_home_type:file delete_file_perms;
+')
+
+########################################
+## <summary>
+##     Delete sock files in a user home subdirectory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_delete_user_home_content_sock_files',`
+       gen_require(`
+               type user_home_t;
+       ')
+
+       allow $1 user_home_t:sock_file delete_file_perms;
+')
+
+########################################
+## <summary>
+##     Delete all sock files in a user home subdirectory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_delete_all_user_home_content_sock_files',`
+       gen_require(`
+               attribute user_home_type;
+       ')
+
+       allow $1 user_home_type:sock_file delete_file_perms;
+')
+
 ########################################
 ## <summary>
 ##     Do not audit attempts to write user home files.
@@ -1810,8 +2354,7 @@ interface(`userdom_read_user_home_content_symlinks',`
                type user_home_dir_t, user_home_t;
        ')
 
-       read_lnk_files_pattern($1, { user_home_dir_t user_home_t }, user_home_t)
-       files_search_home($1)
+       allow $1 { user_home_dir_t user_home_t }:lnk_file  read_lnk_file_perms;
 ')
 
 ########################################
@@ -1827,20 +2370,14 @@ interface(`userdom_read_user_home_content_symlinks',`
 #
 interface(`userdom_exec_user_home_content_files',`
        gen_require(`
-               type user_home_dir_t, user_home_t;
+               type user_home_dir_t;
+               attribute user_home_type;
        ')
 
        files_search_home($1)
-       exec_files_pattern($1, { user_home_dir_t user_home_t }, user_home_t)
-
-       tunable_policy(`use_nfs_home_dirs',`
-               fs_exec_nfs_files($1)
-       ')
-
-       tunable_policy(`use_samba_home_dirs',`
-               fs_exec_cifs_files($1)
+       exec_files_pattern($1, { user_home_dir_t user_home_type }, user_home_type)
+       dontaudit $1 user_home_type:sock_file execute;
        ')
-')
 
 ########################################
 ## <summary>
@@ -1939,6 +2476,24 @@ interface(`userdom_delete_user_home_content_symlinks',`
        allow $1 user_home_t:lnk_file delete_lnk_file_perms;
 ')
 
+########################################
+## <summary>
+##     Delete all symbolic links in a user home directory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_delete_all_user_home_content_symlinks',`
+       gen_require(`
+               attribute user_home_type;
+       ')
+
+       allow $1 user_home_type:lnk_file delete_lnk_file_perms;
+')
+
 ########################################
 ## <summary>
 ##     Create, read, write, and delete named pipes
@@ -2008,7 +2563,7 @@ interface(`userdom_user_home_dir_filetrans',`
                type user_home_dir_t;
        ')
 
-       filetrans_pattern($1, user_home_dir_t, $2, $3)
+       filetrans_pattern($1, user_home_dir_t, $2, $3, $4)
        files_search_home($1)
 ')
 
@@ -2039,7 +2594,7 @@ interface(`userdom_user_home_content_filetrans',`
                type user_home_dir_t, user_home_t;
        ')
 
-       filetrans_pattern($1, user_home_t, $2, $3)
+       filetrans_pattern($1, user_home_t, $2, $3, $4)
        allow $1 user_home_dir_t:dir search_dir_perms;
        files_search_home($1)
 ')
@@ -2182,7 +2737,7 @@ interface(`userdom_dontaudit_read_user_tmp_files',`
                type user_tmp_t;
        ')
 
-       dontaudit $1 user_tmp_t:file read_file_perms;
+       dontaudit $1 user_tmp_t:file read_inherited_file_perms;
 ')
 
 ########################################
@@ -2390,7 +2945,7 @@ interface(`userdom_user_tmp_filetrans',`
                type user_tmp_t;
        ')
 
-       filetrans_pattern($1, user_tmp_t, $2, $3)
+       filetrans_pattern($1, user_tmp_t, $2, $3, $4)
        files_search_tmp($1)
 ')
 
@@ -2419,6 +2974,25 @@ interface(`userdom_tmp_filetrans_user_tmp',`
        files_tmp_filetrans($1, user_tmp_t, $2)
 ')
 
+#######################################
+## <summary>
+##  Getattr user tmpfs files.
+## </summary>
+## <param name="domain">
+##  <summary>
+##  Domain allowed access.
+##  </summary>
+## </param>
+#
+interface(`userdom_getattr_user_tmpfs_files',`
+    gen_require(`
+        type user_tmpfs_t;
+    ')
+
+    getattr_files_pattern($1, user_tmpfs_t, user_tmpfs_t)
+    fs_search_tmpfs($1)
+')
+
 ########################################
 ## <summary>
 ##     Read user tmpfs files.
@@ -2435,13 +3009,14 @@ interface(`userdom_read_user_tmpfs_files',`
        ')
 
        read_files_pattern($1, user_tmpfs_t, user_tmpfs_t)
+       read_lnk_files_pattern($1, user_tmpfs_t, user_tmpfs_t)
        allow $1 user_tmpfs_t:dir list_dir_perms;
        fs_search_tmpfs($1)
 ')
 
 ########################################
 ## <summary>
-##     Read user tmpfs files.
+##     Read/Write user tmpfs files.
 ## </summary>
 ## <param name="domain">
 ##     <summary>
@@ -2462,7 +3037,7 @@ interface(`userdom_rw_user_tmpfs_files',`
 
 ########################################
 ## <summary>
-##     Create, read, write, and delete user tmpfs files.
+##     Read/Write inherited user tmpfs files.
 ## </summary>
 ## <param name="domain">
 ##     <summary>
@@ -2470,14 +3045,30 @@ interface(`userdom_rw_user_tmpfs_files',`
 ##     </summary>
 ## </param>
 #
-interface(`userdom_manage_user_tmpfs_files',`
+interface(`userdom_rw_inherited_user_tmpfs_files',`
        gen_require(`
                type user_tmpfs_t;
        ')
 
-       manage_files_pattern($1, user_tmpfs_t, user_tmpfs_t)
-       allow $1 user_tmpfs_t:dir list_dir_perms;
-       fs_search_tmpfs($1)
+       allow $1 user_tmpfs_t:file rw_inherited_file_perms;
+')
+
+########################################
+## <summary>
+##     Execute user tmpfs files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_execute_user_tmpfs_files',`
+       gen_require(`
+               type user_tmpfs_t;
+       ')
+
+       allow $1 user_tmpfs_t:file execute;
 ')
 
 ########################################
@@ -2570,6 +3161,24 @@ interface(`userdom_use_user_ttys',`
        allow $1 user_tty_device_t:chr_file rw_term_perms;
 ')
 
+########################################
+## <summary>
+##     Read and write a inherited user domain tty.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_use_inherited_user_ttys',`
+       gen_require(`
+               type user_tty_device_t;
+       ')
+
+       allow $1 user_tty_device_t:chr_file rw_inherited_term_perms;
+')
+
 ########################################
 ## <summary>
 ##     Read and write a user domain pty.
@@ -2590,22 +3199,34 @@ interface(`userdom_use_user_ptys',`
 
 ########################################
 ## <summary>
-##     Read and write a user TTYs and PTYs.
+##     Read and write a inherited user domain pty.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_use_inherited_user_ptys',`
+       gen_require(`
+               type user_devpts_t;
+       ')
+
+       allow $1 user_devpts_t:chr_file rw_inherited_term_perms;
+')
+
+########################################
+## <summary>
+##     Read and write a inherited user TTYs and PTYs.
 ## </summary>
 ## <desc>
 ##     <p>
-##     Allow the specified domain to read and write user
+##     Allow the specified domain to read and write inherited user
 ##     TTYs and PTYs. This will allow the domain to
 ##     interact with the user via the terminal. Typically
 ##     all interactive applications will require this
 ##     access.
 ##     </p>
-##     <p>
-##     However, this also allows the applications to spy
-##     on user sessions or inject information into the
-##     user session.  Thus, this access should likely
-##     not be allowed for non-interactive domains.
-##     </p>
 ## </desc>
 ## <param name="domain">
 ##     <summary>
@@ -2614,14 +3235,33 @@ interface(`userdom_use_user_ptys',`
 ## </param>
 ## <infoflow type="both" weight="10"/>
 #
-interface(`userdom_use_user_terminals',`
+interface(`userdom_use_inherited_user_terminals',`
        gen_require(`
                type user_tty_device_t, user_devpts_t;
        ')
 
-       allow $1 user_tty_device_t:chr_file rw_term_perms;
-       allow $1 user_devpts_t:chr_file rw_term_perms;
-       term_list_ptys($1)
+       allow $1 user_tty_device_t:chr_file rw_inherited_term_perms;
+       allow $1 user_devpts_t:chr_file rw_inherited_term_perms;
+')
+
+#######################################
+## <summary>
+##  Allow attempts to read and write
+##  a user domain tty and pty.
+## </summary>
+## <param name="domain">
+##  <summary>
+##  Domain to not audit.
+##  </summary>
+## </param>
+#
+interface(`userdom_use_user_terminals',`
+    gen_require(`
+        type user_tty_device_t, user_devpts_t;
+    ')
+
+    allow $1 user_tty_device_t:chr_file rw_term_perms;
+    allow $1 user_devpts_t:chr_file rw_term_perms;
 ')
 
 ########################################
@@ -2640,36 +3280,32 @@ interface(`userdom_dontaudit_use_user_terminals',`
                type user_tty_device_t, user_devpts_t;
        ')
 
-       dontaudit $1 user_tty_device_t:chr_file rw_term_perms;
-       dontaudit $1 user_devpts_t:chr_file rw_term_perms;
+       dontaudit $1 user_tty_device_t:chr_file rw_inherited_term_perms;
+       dontaudit $1 user_devpts_t:chr_file rw_inherited_term_perms;
 ')
 
+
 ########################################
 ## <summary>
-##     Execute a shell in all user domains.  This
-##     is an explicit transition, requiring the
-##     caller to use setexeccon().
+##     Get attributes of user domain tty and pty.
 ## </summary>
 ## <param name="domain">
 ##     <summary>
-##     Domain allowed to transition.
+##     Domain allowed access.
 ##     </summary>
 ## </param>
 #
-interface(`userdom_spec_domtrans_all_users',`
+interface(`userdom_getattr_user_terminals',`
        gen_require(`
-               attribute userdomain;
+               type user_tty_device_t, user_devpts_t;
        ')
 
-       corecmd_shell_spec_domtrans($1, userdomain)
-       allow userdomain $1:fd use;
-       allow userdomain $1:fifo_file rw_file_perms;
-       allow userdomain $1:process sigchld;
+       allow $1 { user_tty_device_t user_devpts_t }:chr_file getattr_chr_file_perms;
 ')
 
 ########################################
 ## <summary>
-##     Execute an Xserver session in all unprivileged user domains.  This
+##     Execute a shell in all user domains.  This
 ##     is an explicit transition, requiring the
 ##     caller to use setexeccon().
 ## </summary>
@@ -2679,12 +3315,12 @@ interface(`userdom_spec_domtrans_all_users',`
 ##     </summary>
 ## </param>
 #
-interface(`userdom_xsession_spec_domtrans_all_users',`
+interface(`userdom_spec_domtrans_all_users',`
        gen_require(`
                attribute userdomain;
        ')
 
-       xserver_xsession_spec_domtrans($1, userdomain)
+       corecmd_shell_spec_domtrans($1, userdomain)
        allow userdomain $1:fd use;
        allow userdomain $1:fifo_file rw_file_perms;
        allow userdomain $1:process sigchld;
@@ -2692,7 +3328,7 @@ interface(`userdom_xsession_spec_domtrans_all_users',`
 
 ########################################
 ## <summary>
-##     Execute a shell in all unprivileged user domains.  This
+##     Execute an Xserver session in all unprivileged user domains.  This
 ##     is an explicit transition, requiring the
 ##     caller to use setexeccon().
 ## </summary>
@@ -2702,20 +3338,20 @@ interface(`userdom_xsession_spec_domtrans_all_users',`
 ##     </summary>
 ## </param>
 #
-interface(`userdom_spec_domtrans_unpriv_users',`
+interface(`userdom_xsession_spec_domtrans_all_users',`
        gen_require(`
-               attribute unpriv_userdomain;
+               attribute userdomain;
        ')
 
-       corecmd_shell_spec_domtrans($1, unpriv_userdomain)
-       allow unpriv_userdomain $1:fd use;
-       allow unpriv_userdomain $1:fifo_file rw_file_perms;
-       allow unpriv_userdomain $1:process sigchld;
+       xserver_xsession_spec_domtrans($1, userdomain)
+       allow userdomain $1:fd use;
+       allow userdomain $1:fifo_file rw_file_perms;
+       allow userdomain $1:process sigchld;
 ')
 
 ########################################
 ## <summary>
-##     Execute an Xserver session in all unprivileged user domains.  This
+##     Execute a shell in all unprivileged user domains.  This
 ##     is an explicit transition, requiring the
 ##     caller to use setexeccon().
 ## </summary>
@@ -2725,57 +3361,61 @@ interface(`userdom_spec_domtrans_unpriv_users',`
 ##     </summary>
 ## </param>
 #
-interface(`userdom_xsession_spec_domtrans_unpriv_users',`
+interface(`userdom_spec_domtrans_unpriv_users',`
        gen_require(`
                attribute unpriv_userdomain;
        ')
 
-       xserver_xsession_spec_domtrans($1, unpriv_userdomain)
+       corecmd_shell_spec_domtrans($1, unpriv_userdomain)
        allow unpriv_userdomain $1:fd use;
        allow unpriv_userdomain $1:fifo_file rw_file_perms;
        allow unpriv_userdomain $1:process sigchld;
 ')
 
-#######################################
+#####################################
 ## <summary>
-##     Read and write unpriviledged user SysV sempaphores.
+##  Allow domain dyntrans to unpriv userdomain.
 ## </summary>
 ## <param name="domain">
-##     <summary>
-##     Domain allowed access.
-##     </summary>
+##  <summary>
+##  Domain allowed access.
+##  </summary>
 ## </param>
 #
-interface(`userdom_rw_unpriv_user_semaphores',`
-       gen_require(`
-               attribute unpriv_userdomain;
-       ')
+interface(`userdom_dyntransition_unpriv_users',`
+    gen_require(`
+        attribute unpriv_userdomain;
+    ')
 
-       allow $1 unpriv_userdomain:sem rw_sem_perms;
+    allow $1 unpriv_userdomain:process dyntransition;
 ')
 
 ########################################
 ## <summary>
-##     Manage unpriviledged user SysV sempaphores.
+##     Execute an Xserver session in all unprivileged user domains.  This
+##     is an explicit transition, requiring the
+##     caller to use setexeccon().
 ## </summary>
 ## <param name="domain">
 ##     <summary>
-##     Domain allowed access.
+##     Domain allowed to transition.
 ##     </summary>
 ## </param>
 #
-interface(`userdom_manage_unpriv_user_semaphores',`
+interface(`userdom_xsession_spec_domtrans_unpriv_users',`
        gen_require(`
                attribute unpriv_userdomain;
        ')
 
-       allow $1 unpriv_userdomain:sem create_sem_perms;
+       xserver_xsession_spec_domtrans($1, unpriv_userdomain)
+       allow unpriv_userdomain $1:fd use;
+       allow unpriv_userdomain $1:fifo_file rw_file_perms;
+       allow unpriv_userdomain $1:process sigchld;
 ')
 
-#######################################
+########################################
 ## <summary>
-##     Read and write unpriviledged user SysV shared
-##     memory segments.
+##     Manage unpriviledged user SysV sempaphores.
 ## </summary>
 ## <param name="domain">
 ##     <summary>
@@ -2783,12 +3423,12 @@ interface(`userdom_manage_unpriv_user_semaphores',`
 ##     </summary>
 ## </param>
 #
-interface(`userdom_rw_unpriv_user_shared_mem',`
+interface(`userdom_manage_unpriv_user_semaphores',`
        gen_require(`
                attribute unpriv_userdomain;
        ')
 
-       allow $1 unpriv_userdomain:shm rw_shm_perms;
+       allow $1 unpriv_userdomain:sem create_sem_perms;
 ')
 
 ########################################
@@ -2852,7 +3492,7 @@ interface(`userdom_entry_spec_domtrans_unpriv_users',`
 
        domain_entry_file_spec_domtrans($1, unpriv_userdomain)
        allow unpriv_userdomain $1:fd use;
-       allow unpriv_userdomain $1:fifo_file rw_file_perms;
+       allow unpriv_userdomain $1:fifo_file rw_fifo_file_perms;
        allow unpriv_userdomain $1:process sigchld;
 ')
 
@@ -2868,29 +3508,13 @@ interface(`userdom_entry_spec_domtrans_unpriv_users',`
 #
 interface(`userdom_search_user_home_content',`
        gen_require(`
-               type user_home_dir_t, user_home_t;
+               type user_home_dir_t;
+               attribute user_home_type;
        ')
 
        files_list_home($1)
-       allow $1 { user_home_dir_t user_home_t }:dir search_dir_perms;
-')
-
-########################################
-## <summary>
-##     Send signull to unprivileged user domains.
-## </summary>
-## <param name="domain">
-##     <summary>
-##     Domain allowed access.
-##     </summary>
-## </param>
-#
-interface(`userdom_signull_unpriv_users',`
-       gen_require(`
-               attribute unpriv_userdomain;
-       ')
-
-       allow $1 unpriv_userdomain:process signull;
+       allow $1 { user_home_dir_t user_home_type }:dir search_dir_perms;
+       allow $1 { user_home_dir_t user_home_type }:lnk_file read_lnk_file_perms;
 ')
 
 ########################################
@@ -2972,7 +3596,7 @@ interface(`userdom_dontaudit_use_user_ptys',`
                type user_devpts_t;
        ')
 
-       dontaudit $1 user_devpts_t:chr_file rw_file_perms;
+       dontaudit $1 user_devpts_t:chr_file rw_inherited_file_perms;
 ')
 
 ########################################
@@ -3027,7 +3651,45 @@ interface(`userdom_write_user_tmp_files',`
                type user_tmp_t;
        ')
 
-       allow $1 user_tmp_t:file write_file_perms;
+       write_files_pattern($1, user_tmp_t, user_tmp_t)
+')
+
+########################################
+## <summary>
+##     Do not audit attempts to write users
+##     temporary files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_write_user_tmp_files',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       dontaudit $1 user_tmp_t:file write;
+')
+
+########################################
+## <summary>
+##     Do not audit attempts to read/write users
+##     temporary fifo files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_rw_user_tmp_pipes',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       dontaudit $1 user_tmp_t:fifo_file rw_inherited_fifo_file_perms;
 ')
 
 ########################################
@@ -3045,7 +3707,7 @@ interface(`userdom_dontaudit_use_user_ttys',`
                type user_tty_device_t;
        ')
 
-       dontaudit $1 user_tty_device_t:chr_file rw_file_perms;
+       dontaudit $1 user_tty_device_t:chr_file rw_inherited_file_perms;
 ')
 
 ########################################
@@ -3064,6 +3726,7 @@ interface(`userdom_read_all_users_state',`
        ')
 
        read_files_pattern($1, userdomain, userdomain)
+       read_lnk_files_pattern($1,userdomain,userdomain)
        kernel_search_proc($1)
 ')
 
@@ -3140,6 +3803,24 @@ interface(`userdom_signal_all_users',`
        allow $1 userdomain:process signal;
 ')
 
+########################################
+## <summary>
+##     Send kill signals to all user domains.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_kill_all_users',`
+       gen_require(`
+               attribute userdomain;
+       ')
+
+       allow $1 userdomain:process sigkill;
+')
+
 ########################################
 ## <summary>
 ##     Send a SIGCHLD signal to all user domains.
@@ -3158,6 +3839,24 @@ interface(`userdom_sigchld_all_users',`
        allow $1 userdomain:process sigchld;
 ')
 
+########################################
+## <summary>
+##     Read keys for all user domains.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_read_all_users_keys',`
+       gen_require(`
+               attribute userdomain;
+       ')
+
+       allow $1 userdomain:key read;
+')
+
 ########################################
 ## <summary>
 ##     Create keys for all user domains.
@@ -3194,3 +3893,1236 @@ interface(`userdom_dbus_send_all_users',`
 
        allow $1 userdomain:dbus send_msg;
 ')
+
+########################################
+## <summary>
+##     Allow apps to set rlimits on userdomain
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_set_rlimitnh',`
+       gen_require(`
+               attribute userdomain;
+       ')
+
+       allow $1 userdomain:process rlimitinh;
+')
+
+########################################
+## <summary>
+##     Define this type as a Allow apps to set rlimits on userdomain
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <param name="userdomain_prefix">
+##     <summary>
+##     The prefix of the user domain (e.g., user
+##     is the prefix for user_t).
+## </summary>
+## </param>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+template(`userdom_unpriv_usertype',`
+       gen_require(`
+               attribute unpriv_userdomain, userdomain;
+               attribute $1_usertype;
+       ')
+       typeattribute $2  $1_usertype;
+       typeattribute $2  unpriv_userdomain;
+       typeattribute $2  userdomain;
+       
+       auth_use_nsswitch($2)
+       ubac_constrained($2)
+')
+
+#######################################
+## <summary>
+##  Define this type as a Allow apps to set rlimits on userdomain
+## </summary>
+## <param name="domain">
+##  <summary>
+##  Domain allowed access.
+##  </summary>
+## </param>
+## <param name="userdomain_prefix">
+##  <summary>
+##  The prefix of the user domain (e.g., user
+##  is the prefix for user_t).
+## </summary>
+## </param>
+## <param name="domain">
+##  <summary>
+##  Domain allowed access.
+##  </summary>
+## </param>
+#
+template(`userdom_unpriv_type',`
+    gen_require(`
+        attribute unpriv_userdomain, userdomain;
+    ')
+    typeattribute $2  unpriv_userdomain;
+    typeattribute $2  userdomain;
+
+    auth_use_nsswitch($2)
+    ubac_constrained($2)
+')
+
+########################################
+## <summary>
+##     Connect to users over an unix stream socket.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_stream_connect',`
+       gen_require(`
+               type user_tmp_t;
+               attribute userdomain;
+       ')
+
+       stream_connect_pattern($1, user_tmp_t, user_tmp_t, userdomain)
+')
+
+########################################
+## <summary>
+##     Ptrace user domains.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_ptrace_all_users',`
+       gen_require(`
+               attribute userdomain;
+       ')
+
+       tunable_policy(`deny_ptrace',`',`
+               allow $1 userdomain:process ptrace;
+       ')
+')
+
+########################################
+## <summary>
+##     dontaudit Search /root
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_search_admin_dir',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       dontaudit $1 admin_home_t:dir search_dir_perms;
+')
+
+########################################
+## <summary>
+##     dontaudit list /root
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_list_admin_dir',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       dontaudit $1 admin_home_t:dir list_dir_perms;
+')
+
+########################################
+## <summary>
+##     Allow domain to  list /root
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_list_admin_dir',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       allow $1 admin_home_t:dir list_dir_perms;
+')
+
+########################################
+## <summary>
+##     Allow Search /root
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_search_admin_dir',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       allow $1 admin_home_t:dir search_dir_perms;
+')
+
+########################################
+## <summary>
+##     RW unpriviledged user SysV sempaphores.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_rw_semaphores',`
+       gen_require(`
+               attribute unpriv_userdomain;
+       ')
+
+       allow $1 unpriv_userdomain:sem rw_sem_perms;
+')
+
+########################################
+## <summary>
+##     Send a message to unpriv users over a unix domain
+##     datagram socket.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_dgram_send',`
+       gen_require(`
+               attribute unpriv_userdomain;
+       ')
+
+       allow $1 unpriv_userdomain:unix_dgram_socket sendto;
+')
+
+######################################
+## <summary>
+##      Send a message to users over a unix domain
+##      datagram socket.
+## </summary>
+## <param name="domain">
+##      <summary>
+##      Domain allowed access.
+##      </summary>
+## </param>
+#
+interface(`userdom_users_dgram_send',`
+        gen_require(`
+                 attribute userdomain;
+      ')
+
+       allow $1 userdomain:unix_dgram_socket sendto;
+')
+
+#######################################
+## <summary>
+##     Allow execmod on files in homedirectory 
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <rolebase/>
+#
+interface(`userdom_execmod_user_home_files',`
+       gen_require(`
+               type user_home_type;
+       ')
+
+       allow $1 user_home_type:file execmod;
+')
+
+########################################
+## <summary>
+##     Read admin home files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <rolecap/>
+#
+interface(`userdom_read_admin_home_files',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       read_files_pattern($1, admin_home_t, admin_home_t)
+')
+
+########################################
+## <summary>
+##     Delete admin home files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <rolecap/>
+#
+interface(`userdom_delete_admin_home_files',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       allow $1 admin_home_t:file delete_file_perms;
+')
+
+########################################
+## <summary>
+##     Execute admin home files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <rolecap/>
+#
+interface(`userdom_exec_admin_home_files',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       exec_files_pattern($1, admin_home_t, admin_home_t)
+')
+
+########################################
+## <summary>
+##     Append files inherited
+##     in the /root directory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_inherit_append_admin_home_files',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       allow $1 admin_home_t:file { getattr append };
+')
+
+
+#######################################
+## <summary>
+##     Manage all files/directories in the homedir
+## </summary>
+## <param name="userdomain">
+##     <summary>
+##     The user domain
+##     </summary>
+## </param>
+## <rolebase/>
+#
+interface(`userdom_manage_user_home_content',`
+       gen_require(`
+               type user_home_dir_t, user_home_t;
+               attribute user_home_type;
+       ')
+
+       files_list_home($1)
+       manage_dirs_pattern($1, { user_home_dir_t user_home_type }, user_home_type)
+       manage_files_pattern($1, { user_home_dir_t user_home_type }, user_home_type)
+       manage_lnk_files_pattern($1, { user_home_dir_t user_home_type }, user_home_type)
+       manage_sock_files_pattern($1, { user_home_dir_t user_home_type }, user_home_type)
+       manage_fifo_files_pattern($1, { user_home_dir_t user_home_type }, user_home_type)
+       filetrans_pattern($1, user_home_dir_t, user_home_t, { dir file lnk_file sock_file fifo_file })
+
+')
+
+
+########################################
+## <summary>
+##     Create objects in a user home directory
+##     with an automatic type transition to
+##     the user home file type.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <param name="object_class">
+##     <summary>
+##     The class of the object to be created.
+##     </summary>
+## </param>
+#
+interface(`userdom_user_home_dir_filetrans_pattern',`
+       gen_require(`
+               type user_home_dir_t, user_home_t;
+       ')
+
+       type_transition $1 user_home_dir_t:$2 user_home_t;
+')
+
+########################################
+## <summary>
+##     Create objects in the /root directory
+##     with an automatic type transition to
+##     a specified private type.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <param name="private_type">
+##     <summary>
+##     The type of the object to create.
+##     </summary>
+## </param>
+## <param name="object_class">
+##     <summary>
+##     The class of the object to be created.
+##     </summary>
+## </param>
+#
+interface(`userdom_admin_home_dir_filetrans',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       filetrans_pattern($1, admin_home_t, $2, $3, $4)
+')
+
+########################################
+## <summary>
+##     Send signull to unprivileged user domains.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_signull_unpriv_users',`
+       gen_require(`
+               attribute unpriv_userdomain;
+       ')
+
+       allow $1 unpriv_userdomain:process signull;
+')
+
+########################################
+## <summary>
+##     Write all users files in /tmp
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_write_user_tmp_dirs',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       write_files_pattern($1, user_tmp_t, user_tmp_t)
+')
+
+########################################
+## <summary>
+##     Manage keys for all user domains.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_manage_all_users_keys',`
+       gen_require(`
+               attribute userdomain;
+       ')
+
+       allow $1 userdomain:key manage_key_perms;
+')
+
+
+########################################
+## <summary>
+##     Do not audit attempts to read and write
+##     unserdomain stream.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_rw_stream',`
+       gen_require(`
+               attribute userdomain;
+       ')
+
+       dontaudit $1 userdomain:unix_stream_socket rw_socket_perms;
+')
+
+########################################
+## <summary>
+##     Do not audit attempts to read and write
+##     unserdomain datagram socket.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_rw_dgram_socket',`
+       gen_require(`
+               attribute userdomain;
+       ')
+
+       dontaudit $1 userdomain:unix_dgram_socket { read write };
+')
+
+########################################
+## <summary>
+##     Append files
+##     in a user home subdirectory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_append_user_home_content_files',`
+       gen_require(`
+               type user_home_dir_t, user_home_t;
+       ')
+
+       append_files_pattern($1, user_home_t, user_home_t)
+       allow $1 user_home_dir_t:dir search_dir_perms;
+       files_search_home($1)
+')
+
+########################################
+## <summary>
+##     Read files inherited
+##     in a user home subdirectory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_read_inherited_user_home_content_files',`
+       gen_require(`
+               attribute user_home_type;
+       ')
+
+       allow $1 user_home_type:file { getattr read };
+')
+
+########################################
+## <summary>
+##     Append files inherited
+##     in a user home subdirectory.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_inherit_append_user_home_content_files',`
+       gen_require(`
+               type user_home_t;
+       ')
+
+       allow $1 user_home_t:file { getattr append };
+')
+
+########################################
+## <summary>
+##     Append files inherited
+##     in a user tmp files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_inherit_append_user_tmp_files',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       allow $1 user_tmp_t:file { getattr append };
+')
+
+######################################
+## <summary>
+##      Read audio files in the users homedir.
+## </summary>
+## <param name="domain">
+##      <summary>
+##      Domain allowed access.
+##      </summary>
+## </param>
+## <rolecap/>
+#
+interface(`userdom_read_home_audio_files',`
+        gen_require(`
+                type audio_home_t;
+        ')
+
+        userdom_search_user_home_dirs($1)
+        allow $1 audio_home_t:dir list_dir_perms;
+        read_files_pattern($1, audio_home_t, audio_home_t)
+        read_lnk_files_pattern($1, audio_home_t, audio_home_t)
+')
+
+########################################
+## <summary>
+##     Do not audit attempts to write all user home content files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_write_all_user_home_content_files',`
+       gen_require(`
+               attribute user_home_type;
+       ')
+
+       dontaudit $1 user_home_type:file write_file_perms;
+')
+
+########################################
+## <summary>
+##     Do not audit attempts to write all user tmp content files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_write_all_user_tmp_content_files',`
+       gen_require(`
+               attribute user_tmp_type;
+       ')
+
+       dontaudit $1 user_tmp_type:file write_file_perms;
+')
+
+########################################
+## <summary>
+##     Manage all user temporary content.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_manage_all_user_tmp_content',`
+       gen_require(`
+               attribute user_tmp_type;
+       ')
+
+       manage_dirs_pattern($1, user_tmp_type, user_tmp_type)
+       manage_files_pattern($1, user_tmp_type, user_tmp_type)
+       manage_lnk_files_pattern($1, user_tmp_type, user_tmp_type)
+       manage_sock_files_pattern($1, user_tmp_type, user_tmp_type)
+       manage_fifo_files_pattern($1, user_tmp_type, user_tmp_type)
+       files_search_tmp($1)
+')
+
+########################################
+## <summary>
+##     List all user temporary content.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_list_all_user_tmp_content',`
+       gen_require(`
+               attribute user_tmp_type;
+       ')
+
+       list_dirs_pattern($1, user_tmp_type, user_tmp_type)
+       getattr_files_pattern($1, user_tmp_type, user_tmp_type)
+       read_lnk_files_pattern($1, user_tmp_type, user_tmp_type)
+       getattr_sock_files_pattern($1, user_tmp_type, user_tmp_type)
+       getattr_fifo_files_pattern($1, user_tmp_type, user_tmp_type)
+       files_search_var($1)
+       files_search_tmp($1)
+')
+
+########################################
+## <summary>
+##     Manage all user tmpfs content.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_manage_all_user_tmpfs_content',`
+       gen_require(`
+               attribute user_tmpfs_type;
+       ')
+
+       manage_dirs_pattern($1, user_tmpfs_type, user_tmpfs_type)
+       manage_files_pattern($1, user_tmpfs_type, user_tmpfs_type)
+       manage_lnk_files_pattern($1, user_tmpfs_type, user_tmpfs_type)
+       manage_sock_files_pattern($1, user_tmpfs_type, user_tmpfs_type)
+       manage_fifo_files_pattern($1, user_tmpfs_type, user_tmpfs_type)
+       fs_search_tmpfs($1)
+')
+
+########################################
+## <summary>
+##     Delete all user temporary content.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_delete_all_user_tmp_content',`
+       gen_require(`
+               attribute user_tmp_type;
+       ')
+
+       delete_dirs_pattern($1, user_tmp_type, user_tmp_type)
+       delete_files_pattern($1, user_tmp_type, user_tmp_type)
+       delete_lnk_files_pattern($1, user_tmp_type, user_tmp_type)
+       delete_sock_files_pattern($1, user_tmp_type, user_tmp_type)
+       delete_fifo_files_pattern($1, user_tmp_type, user_tmp_type)
+       # /var/tmp
+       files_search_var($1)
+       files_delete_tmp_dir_entry($1)
+')
+
+########################################
+## <summary>
+##     Read system SSL certificates in the users homedir.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_read_home_certs',`
+       gen_require(`
+               type home_cert_t;
+       ')
+
+       userdom_search_user_home_content($1)
+       allow $1 home_cert_t:dir list_dir_perms;
+       read_files_pattern($1, home_cert_t, home_cert_t)
+       read_lnk_files_pattern($1, home_cert_t, home_cert_t)
+')
+
+########################################
+## <summary>
+##     Manage system SSL certificates in the users homedir.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_manage_home_certs',`
+       gen_require(`
+               type home_cert_t;
+       ')
+
+       allow $1 home_cert_t:dir list_dir_perms;
+       manage_files_pattern($1, home_cert_t, home_cert_t)
+       manage_lnk_files_pattern($1, home_cert_t, home_cert_t)
+
+       userdom_user_home_dir_filetrans($1, home_cert_t, dir, ".cert")
+       userdom_user_home_dir_filetrans($1, home_cert_t, dir, ".pki")
+')
+
+#######################################
+## <summary>
+##  Dontaudit Write system SSL certificates in the users homedir.
+## </summary>
+## <param name="domain">
+##  <summary>
+##     Domain to not audit.
+##  </summary>
+## </param>
+#
+interface(`userdom_dontaudit_write_home_certs',`
+    gen_require(`
+        type home_cert_t;
+    ')
+
+    dontaudit $1 home_cert_t:file write;
+')
+
+########################################
+## <summary>
+##     dontaudit Search getatrr /root files
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_getattr_admin_home_files',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       dontaudit $1 admin_home_t:file getattr;
+')
+
+########################################
+## <summary>
+##     dontaudit read /root lnk files
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_read_admin_home_lnk_files',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       dontaudit $1 admin_home_t:lnk_file read;
+')
+
+########################################
+## <summary>
+##     dontaudit read /root files
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_read_admin_home_files',`
+       gen_require(`
+               type admin_home_t;
+       ')
+
+       dontaudit $1 admin_home_t:file read_file_perms;
+')
+
+########################################
+## <summary>
+##     Create, read, write, and delete user
+##     temporary chr files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_manage_user_tmp_chr_files',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       manage_chr_files_pattern($1, user_tmp_t, user_tmp_t)
+       files_search_tmp($1)
+')
+
+########################################
+## <summary>
+##     Create, read, write, and delete user
+##     temporary blk files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_manage_user_tmp_blk_files',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       manage_blk_files_pattern($1, user_tmp_t, user_tmp_t)
+       files_search_tmp($1)
+')
+
+########################################
+## <summary>
+##     Dontaudit attempt to set attributes on  user temporary directories.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_setattr_user_tmp',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       dontaudit $1 user_tmp_t:dir setattr;
+')
+
+########################################
+## <summary>
+##     Read all inherited users files in /tmp
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_read_inherited_user_tmp_files',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       allow $1 user_tmp_t:file read_inherited_file_perms;
+')
+
+########################################
+## <summary>
+##     Write all inherited users files in /tmp
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_write_inherited_user_tmp_files',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       allow $1 user_tmp_t:file write;
+')
+
+########################################
+## <summary>
+##     Delete all users files in /tmp
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_delete_user_tmp_files',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       allow $1 user_tmp_t:file delete_file_perms;
+')
+
+########################################
+## <summary>
+##     Delete user tmpfs files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_delete_user_tmpfs_files',`
+       gen_require(`
+               type user_tmpfs_t;
+       ')
+
+       allow $1 user_tmpfs_t:file delete_file_perms;
+')
+
+########################################
+## <summary>
+##     Read/Write unpriviledged user SysV shared
+##     memory segments.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_rw_unpriv_user_shared_mem',`
+       gen_require(`
+               attribute unpriv_userdomain;
+       ')
+
+       allow $1 unpriv_userdomain:shm rw_shm_perms;
+')
+
+########################################
+## <summary>
+##     Do not audit attempts to search user
+##     temporary directories.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_search_user_tmp',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       dontaudit $1 user_tmp_t:dir search_dir_perms;
+')
+
+########################################
+## <summary>
+##     Execute a file in a user home directory
+##     in the specified domain.
+## </summary>
+## <desc>
+##     <p>
+##     Execute a file in a user home directory
+##     in the specified domain.
+##     </p>
+##     <p>
+##     No interprocess communication (signals, pipes,
+##     etc.) is provided by this interface since
+##     the domains are not owned by this module.
+##     </p>
+## </desc>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <param name="target_domain">
+##     <summary>
+##     The type of the new process.
+##     </summary>
+## </param>
+#
+interface(`userdom_domtrans_user_home',`
+       gen_require(`
+               type user_home_t;
+       ')
+
+       read_lnk_files_pattern($1, user_home_t, user_home_t)
+       domain_transition_pattern($1, user_home_t, $2)
+       type_transition $1 user_home_t:process $2;
+')
+
+########################################
+## <summary>
+##     Execute a file in a user tmp directory
+##     in the specified domain.
+## </summary>
+## <desc>
+##     <p>
+##     Execute a file in a user tmp directory
+##     in the specified domain.
+##     </p>
+##     <p>
+##     No interprocess communication (signals, pipes,
+##     etc.) is provided by this interface since
+##     the domains are not owned by this module.
+##     </p>
+## </desc>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+## <param name="target_domain">
+##     <summary>
+##     The type of the new process.
+##     </summary>
+## </param>
+#
+interface(`userdom_domtrans_user_tmp',`
+       gen_require(`
+               type user_tmp_t;
+       ')
+
+       files_search_tmp($1)
+       read_lnk_files_pattern($1, user_tmp_t, user_tmp_t)
+       domain_transition_pattern($1, user_tmp_t, $2)
+       type_transition $1 user_tmp_t:process $2;
+')
+
+########################################
+## <summary>
+##     Do not audit attempts to read all user home content files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_read_all_user_home_content_files',`
+       gen_require(`
+               attribute user_home_type;
+       ')
+
+       dontaudit $1 user_home_type:file read_file_perms;
+')
+
+########################################
+## <summary>
+##     Do not audit attempts to read all user tmp content files.
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain to not audit.
+##     </summary>
+## </param>
+#
+interface(`userdom_dontaudit_read_all_user_tmp_content_files',`
+       gen_require(`
+               attribute user_tmp_type;
+       ')
+
+       dontaudit $1 user_tmp_type:file read_file_perms;
+')
+
+#######################################
+## <summary>
+## Read and write unpriviledged user SysV sempaphores.
+## </summary>
+## <param name="domain">
+## <summary>
+## Domain allowed access.
+## </summary>
+## </param>
+#
+interface(`userdom_rw_unpriv_user_semaphores',`
+   gen_require(`
+       attribute unpriv_userdomain;
+   ')
+
+   allow $1 unpriv_userdomain:sem rw_sem_perms;
+')
+
+########################################
+## <summary>
+##     Transition to userdom named content
+## </summary>
+## <param name="domain">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_filetrans_home_content',`
+       gen_require(`
+               type home_bin_t, home_cert_t;
+               type audio_home_t;
+       ')
+
+       userdom_user_home_dir_filetrans($1, home_bin_t, dir, "bin")
+       userdom_user_home_dir_filetrans($1, audio_home_t, dir, "Audio")
+       userdom_user_home_dir_filetrans($1, audio_home_t, dir, "Music")
+       userdom_user_home_dir_filetrans($1, home_cert_t, dir, ".cert")
+       userdom_user_home_dir_filetrans($1, home_cert_t, dir, ".pki")
+       userdom_user_home_dir_filetrans($1, home_cert_t, dir, "certificates")
+       gnome_config_filetrans($1, home_cert_t, dir, "certificates")
+
+       #optional_policy(`
+       #       gnome_admin_home_gconf_filetrans($1, home_bin_t, dir, "bin")
+       #')
+')
+
+########################################
+## <summary>
+##     Make the specified type able to read content in user home dirs
+## </summary>
+## <param name="type">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_home_reader',`
+       gen_require(`
+               attribute userdom_home_reader_type;
+       ')
+
+       typeattribute $1 userdom_home_reader_type;
+')
+
+
+########################################
+## <summary>
+##     Make the specified type able to manage content in user home dirs
+## </summary>
+## <param name="type">
+##     <summary>
+##     Domain allowed access.
+##     </summary>
+## </param>
+#
+interface(`userdom_home_manager',`
+       gen_require(`
+               attribute userdom_home_manager_type;
+       ')
+
+       typeattribute $1 userdom_home_manager_type;
+')