Chris PeBenito ab58ad
#
Chris PeBenito ab58ad
# Macros for X client programs 
Chris PeBenito ab58ad
#
Chris PeBenito ab58ad
Chris PeBenito ab58ad
#
Chris PeBenito ab58ad
# Author: Russell Coker <russell@coker.com.au>
Chris PeBenito ab58ad
# Based on the work of Stephen Smalley <sds@epoch.ncsc.mil>
Chris PeBenito ab58ad
# and Timothy Fraser 
Chris PeBenito ab58ad
#
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Allows clients to write to the X server's shm 
Chris PeBenito ab58ad
bool allow_write_xshm false;
Chris PeBenito ab58ad
Chris PeBenito ab58ad
define(`xsession_domain', `
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Connect to xserver
Chris PeBenito ab58ad
can_unix_connect($1_t, $2_xserver_t)
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Read /tmp/.X0-lock
Chris PeBenito ab58ad
allow $1_t $2_xserver_tmp_t:file { getattr read };
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Signal Xserver
Chris PeBenito ab58ad
allow $1_t $2_xserver_t:process signal;
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Xserver read/write client shm
Chris PeBenito ab58ad
allow $2_xserver_t $1_t:fd use;
Chris PeBenito ab58ad
allow $2_xserver_t $1_t:shm rw_shm_perms;
Chris PeBenito ab58ad
allow $2_xserver_t $1_tmpfs_t:file rw_file_perms;
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Client read xserver shm
Chris PeBenito ab58ad
allow $1_t $2_xserver_t:fd use;
Chris PeBenito ab58ad
allow $1_t $2_xserver_t:shm r_shm_perms;
Chris PeBenito ab58ad
allow $1_t $2_xserver_tmpfs_t:file r_file_perms;
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Client write xserver shm
Chris PeBenito ab58ad
if (allow_write_xshm) {
Chris PeBenito ab58ad
allow $1_t $2_xserver_t:shm rw_shm_perms;
Chris PeBenito ab58ad
allow $1_t $2_xserver_tmpfs_t:file rw_file_perms;
Chris PeBenito ab58ad
}
Chris PeBenito ab58ad
Chris PeBenito ab58ad
')
Chris PeBenito ab58ad
Chris PeBenito ab58ad
#
Chris PeBenito ab58ad
# x_client_domain(client, role)
Chris PeBenito ab58ad
#
Chris PeBenito ab58ad
# Defines common X access rules for the client domain
Chris PeBenito ab58ad
#
Chris PeBenito ab58ad
define(`x_client_domain',`
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Create socket to communicate with X server
Chris PeBenito ab58ad
allow $1_t self:unix_dgram_socket create_socket_perms;
Chris PeBenito ab58ad
allow $1_t self:unix_stream_socket { connectto create_stream_socket_perms };
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Read .Xauthority file
Chris PeBenito ab58ad
ifdef(`xauth.te',`
Chris PeBenito ab58ad
allow $1_t home_root_t:dir { search getattr };
Chris PeBenito ab58ad
allow $1_t $2_home_dir_t:dir { search getattr };
Chris PeBenito ab58ad
allow $1_t $2_xauth_home_t:file { getattr read };
Chris PeBenito ab58ad
')
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# for .xsession-errors
Chris PeBenito ab58ad
dontaudit $1_t $2_home_t:file write;
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# for X over a ssh tunnel
Chris PeBenito ab58ad
ifdef(`ssh.te', `
Chris PeBenito ab58ad
can_tcp_connect($1_t, sshd_t)
Chris PeBenito ab58ad
')
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Use a separate type for tmpfs/shm pseudo files.
Chris PeBenito ab58ad
tmpfs_domain($1)
Chris PeBenito ab58ad
allow $1_t self:shm create_shm_perms;
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# allow X client to read all font files
Chris PeBenito ab58ad
read_fonts($1_t, $2)
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# Allow connections to X server.
Chris PeBenito ab58ad
ifdef(`xserver.te', `
Chris PeBenito ab58ad
allow $1_t tmp_t:dir search;
Chris PeBenito ab58ad
Chris PeBenito ab58ad
ifdef(`xdm.te', `
Chris PeBenito ab58ad
xsession_domain($1, xdm)
Chris PeBenito ab58ad
Chris PeBenito ab58ad
# for when /tmp/.X11-unix is created by the system
Chris PeBenito ab58ad
can_pipe_xdm($1_t)
Chris PeBenito ab58ad
allow $1_t xdm_tmp_t:dir search;
Chris PeBenito ab58ad
allow $1_t xdm_tmp_t:sock_file { read write };
Chris PeBenito ab58ad
dontaudit $1_t xdm_t:tcp_socket { read write };
Chris PeBenito ab58ad
')
Chris PeBenito ab58ad
Chris PeBenito ab58ad
ifdef(`startx.te', `
Chris PeBenito ab58ad
xsession_domain($1, $2)
Chris PeBenito ab58ad
')dnl end startx
Chris PeBenito ab58ad
Chris PeBenito ab58ad
')dnl end xserver
Chris PeBenito ab58ad
Chris PeBenito ab58ad
')dnl end x_client macro