diff --git a/policy/modules/system/xdg.fc b/policy/modules/system/xdg.fc new file mode 100644 index 000000000..7e8d87600 --- /dev/null +++ b/policy/modules/system/xdg.fc @@ -0,0 +1,8 @@ +HOME_DIR/\.cache(/.*)? gen_context(system_u:object_r:xdg_cache_t,s0) +HOME_DIR/\.config(/.*)? gen_context(system_u:object_r:xdg_config_t,s0) +HOME_DIR/\.local(/.*)? gen_context(system_u:object_r:xdg_data_t,s0) +HOME_DIR/Documents(/.*)? gen_context(system_u:object_r:xdg_documents_t,s0) +HOME_DIR/Downloads(/.*)? gen_context(system_u:object_r:xdg_downloads_t,s0) +HOME_DIR/Music(/.*)? gen_context(system_u:object_r:xdg_music_t,s0) +HOME_DIR/Pictures(/.*)? gen_context(system_u:object_r:xdg_pictures_t,s0) +HOME_DIR/Videos(/.*)? gen_context(system_u:object_r:xdg_videos_t,s0) diff --git a/policy/modules/system/xdg.if b/policy/modules/system/xdg.if new file mode 100644 index 000000000..9b4e00833 --- /dev/null +++ b/policy/modules/system/xdg.if @@ -0,0 +1,1231 @@ +## <summary> +## Freedesktop standard locations (formerly known as X Desktop Group) +## </summary> + + +######################################## +## <summary> +## Mark the selected type as an xdg_cache_type +## </summary> +## <param name="type"> +## <summary> +## Type to give the xdg_cache_type attribute to +## </summary> +## </param> +# +interface(`xdg_cache_content',` + gen_require(` + attribute xdg_cache_type; + ') + + typeattribute $1 xdg_cache_type; + + userdom_user_home_content($1) +') + +######################################## +## <summary> +## Mark the selected type as an xdg_config_type +## </summary> +## <param name="type"> +## <summary> +## Type to give the xdg_config_type attribute to +## </summary> +## </param> +# +interface(`xdg_config_content',` + gen_require(` + attribute xdg_config_type; + ') + + typeattribute $1 xdg_config_type; + + userdom_user_home_content($1) +') + +######################################## +## <summary> +## Mark the selected type as an xdg_data_type +## </summary> +## <param name="type"> +## <summary> +## Type to give the xdg_data_type attribute to +## </summary> +## </param> +# +interface(`xdg_data_content',` + gen_require(` + attribute xdg_data_type; + ') + + typeattribute $1 xdg_data_type; + + userdom_user_home_content($1) +') + + +######################################## +## <summary> +## Read the xdg cache home files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_read_cache_files',` + gen_require(` + type xdg_cache_t; + ') + + read_files_pattern($1, xdg_cache_t, xdg_cache_t) + list_dirs_pattern($1, xdg_cache_t, xdg_cache_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Read all xdg_cache_type files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_read_all_cache_files',` + gen_require(` + attribute xdg_cache_type; + ') + + read_files_pattern($1, xdg_cache_type, xdg_cache_type) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Create objects in an xdg_cache 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> +## <param name="filename" optional="true"> +## <summary> +## Name of the file or directory created +## </summary> +## </param> +# +interface(`xdg_cache_filetrans',` + gen_require(` + type xdg_cache_t; + ') + + userdom_search_user_home_dirs($1) + + filetrans_pattern($1, xdg_cache_t, $2, $3, $4) + + xdg_create_cache_dirs($1) + xdg_generic_user_home_dir_filetrans_cache($1, dir, ".cache") +') + +######################################## +## <summary> +## Create objects in the user home dir with an automatic type transition to +## the xdg_cache_t 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> +## <param name="filename" optional="true"> +## <summary> +## Name of the directory created +## </summary> +## </param> +# +interface(`xdg_generic_user_home_dir_filetrans_cache',` + gen_require(` + type xdg_cache_t; + ') + + userdom_user_home_dir_filetrans($1, xdg_cache_t, $2, $3) +') + +######################################## +## <summary> +## Create xdg cache home directories +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_create_cache_dirs',` + gen_require(` + type xdg_cache_t; + ') + + allow $1 xdg_cache_t:dir create_dir_perms; +') + +######################################## +## <summary> +## Manage the xdg cache home files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_manage_cache',` + gen_require(` + type xdg_cache_t; + ') + + manage_dirs_pattern($1, xdg_cache_t, xdg_cache_t) + manage_files_pattern($1, xdg_cache_t, xdg_cache_t) + manage_lnk_files_pattern($1, xdg_cache_t, xdg_cache_t) + manage_fifo_files_pattern($1, xdg_cache_t, xdg_cache_t) + manage_sock_files_pattern($1, xdg_cache_t, xdg_cache_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Manage all the xdg cache home files regardless of their specific type +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_manage_all_cache',` + gen_require(` + attribute xdg_cache_type; + ') + + manage_dirs_pattern($1, xdg_cache_type, xdg_cache_type) + manage_files_pattern($1, xdg_cache_type, xdg_cache_type) + manage_lnk_files_pattern($1, xdg_cache_type, xdg_cache_type) + manage_fifo_files_pattern($1, xdg_cache_type, xdg_cache_type) + manage_sock_files_pattern($1, xdg_cache_type, xdg_cache_type) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Allow relabeling the xdg cache home files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_cache',` + gen_require(` + type xdg_cache_t; + ') + + relabel_dirs_pattern($1, xdg_cache_t, xdg_cache_t) + relabel_files_pattern($1, xdg_cache_t, xdg_cache_t) + relabel_lnk_files_pattern($1, xdg_cache_t, xdg_cache_t) + relabel_fifo_files_pattern($1, xdg_cache_t, xdg_cache_t) + relabel_sock_files_pattern($1, xdg_cache_t, xdg_cache_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Allow relabeling the xdg cache home files, regardless of their specific type +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_all_cache',` + gen_require(` + attribute xdg_cache_type; + ') + + relabel_dirs_pattern($1, xdg_cache_type, xdg_cache_type) + relabel_files_pattern($1, xdg_cache_type, xdg_cache_type) + relabel_lnk_files_pattern($1, xdg_cache_type, xdg_cache_type) + relabel_fifo_files_pattern($1, xdg_cache_type, xdg_cache_type) + relabel_sock_files_pattern($1, xdg_cache_type, xdg_cache_type) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Search through the xdg config home directories +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_search_config_dirs',` + gen_require(` + type xdg_config_t; + ') + + search_dirs_pattern($1, xdg_config_t, xdg_config_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Read the xdg config home files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_read_config_files',` + gen_require(` + type xdg_config_t; + ') + + read_files_pattern($1, xdg_config_t, xdg_config_t) + list_dirs_pattern($1, xdg_config_t, xdg_config_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Read all xdg_config_type files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_read_all_config_files',` + gen_require(` + attribute xdg_config_type; + ') + + read_files_pattern($1, xdg_config_type, xdg_config_type) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Create objects in an xdg_config 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> +## <param name="filename" optional="true"> +## <summary> +## Name of the file or directory created +## </summary> +## </param> +# +interface(`xdg_config_filetrans',` + gen_require(` + type xdg_config_t; + ') + + userdom_search_user_home_dirs($1) + + filetrans_pattern($1, xdg_config_t, $2, $3, $4) + + xdg_create_config_dirs($1) + xdg_generic_user_home_dir_filetrans_config($1, dir, ".config") + +') + +######################################## +## <summary> +## Create objects in the user home dir with an automatic type transition to +## the xdg_config_t 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> +## <param name="filename" optional="true"> +## <summary> +## Name of the directory created +## </summary> +## </param> +# +interface(`xdg_generic_user_home_dir_filetrans_config',` + gen_require(` + type xdg_config_t; + ') + + userdom_user_home_dir_filetrans($1, xdg_config_t, $2, $3) +') + +######################################## +## <summary> +## Create xdg config home directories +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_create_config_dirs',` + gen_require(` + type xdg_config_t; + ') + + allow $1 xdg_config_t:dir create_dir_perms; +') + +######################################## +## <summary> +## Manage the xdg config home files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_manage_config',` + gen_require(` + type xdg_config_t; + ') + + manage_dirs_pattern($1, xdg_config_t, xdg_config_t) + manage_files_pattern($1, xdg_config_t, xdg_config_t) + manage_lnk_files_pattern($1, xdg_config_t, xdg_config_t) + manage_fifo_files_pattern($1, xdg_config_t, xdg_config_t) + manage_sock_files_pattern($1, xdg_config_t, xdg_config_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Manage all the xdg config home files regardless of their specific type +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_manage_all_config',` + gen_require(` + attribute xdg_config_type; + ') + + manage_dirs_pattern($1, xdg_config_type, xdg_config_type) + manage_files_pattern($1, xdg_config_type, xdg_config_type) + manage_lnk_files_pattern($1, xdg_config_type, xdg_config_type) + manage_fifo_files_pattern($1, xdg_config_type, xdg_config_type) + manage_sock_files_pattern($1, xdg_config_type, xdg_config_type) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Allow relabeling the xdg config home files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_config',` + gen_require(` + type xdg_config_t; + ') + + relabel_dirs_pattern($1, xdg_config_t, xdg_config_t) + relabel_files_pattern($1, xdg_config_t, xdg_config_t) + relabel_lnk_files_pattern($1, xdg_config_t, xdg_config_t) + relabel_fifo_files_pattern($1, xdg_config_t, xdg_config_t) + relabel_sock_files_pattern($1, xdg_config_t, xdg_config_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Allow relabeling the xdg config home files, regardless of their specific type +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_all_config',` + gen_require(` + attribute xdg_config_type; + ') + + relabel_dirs_pattern($1, xdg_config_type, xdg_config_type) + relabel_files_pattern($1, xdg_config_type, xdg_config_type) + relabel_lnk_files_pattern($1, xdg_config_type, xdg_config_type) + relabel_fifo_files_pattern($1, xdg_config_type, xdg_config_type) + relabel_sock_files_pattern($1, xdg_config_type, xdg_config_type) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Read the xdg data home files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_read_data_files',` + gen_require(` + type xdg_data_t; + ') + + read_files_pattern($1, xdg_data_t, xdg_data_t) + list_dirs_pattern($1, xdg_data_t, xdg_data_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Read all xdg_data_type files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_read_all_data_files',` + gen_require(` + attribute xdg_data_type; + ') + + read_files_pattern($1, xdg_data_type, xdg_data_type) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Create objects in an xdg_data 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> +## <param name="filename" optional="true"> +## <summary> +## Optional name of the file or directory created +## </summary> +## </param> +# +interface(`xdg_data_filetrans',` + gen_require(` + type xdg_data_t; + ') + + userdom_search_user_home_dirs($1) + + filetrans_pattern($1, xdg_data_t, $2, $3, $4) + + xdg_create_data_dirs($1) + xdg_generic_user_home_dir_filetrans_data($1, dir, ".local") +') + +######################################## +## <summary> +## Create objects in the user home dir with an automatic type transition to +## the xdg_data_t 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> +## <param name="filename" optional="true"> +## <summary> +## Name of the directory created +## </summary> +## </param> +# +interface(`xdg_generic_user_home_dir_filetrans_data',` + gen_require(` + type xdg_data_t; + ') + + userdom_user_home_dir_filetrans($1, xdg_data_t, $2, $3) +') + +######################################## +## <summary> +## Create xdg data home directories +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_create_data_dirs',` + gen_require(` + type xdg_data_t; + ') + + allow $1 xdg_data_t:dir create_dir_perms; +') + +######################################## +## <summary> +## Manage the xdg data home files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_manage_data',` + gen_require(` + type xdg_data_t; + ') + + manage_dirs_pattern($1, xdg_data_t, xdg_data_t) + manage_files_pattern($1, xdg_data_t, xdg_data_t) + manage_lnk_files_pattern($1, xdg_data_t, xdg_data_t) + manage_fifo_files_pattern($1, xdg_data_t, xdg_data_t) + manage_sock_files_pattern($1, xdg_data_t, xdg_data_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Manage all the xdg data home files, regardless of their specific type +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_manage_all_data',` + gen_require(` + attribute xdg_data_type; + ') + + manage_dirs_pattern($1, xdg_data_type, xdg_data_type) + manage_files_pattern($1, xdg_data_type, xdg_data_type) + manage_lnk_files_pattern($1, xdg_data_type, xdg_data_type) + manage_fifo_files_pattern($1, xdg_data_type, xdg_data_type) + manage_sock_files_pattern($1, xdg_data_type, xdg_data_type) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Allow relabeling the xdg data home files +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_data',` + gen_require(` + type xdg_data_t; + ') + + relabel_dirs_pattern($1, xdg_data_t, xdg_data_t) + relabel_files_pattern($1, xdg_data_t, xdg_data_t) + relabel_lnk_files_pattern($1, xdg_data_t, xdg_data_t) + relabel_fifo_files_pattern($1, xdg_data_t, xdg_data_t) + relabel_sock_files_pattern($1, xdg_data_t, xdg_data_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Allow relabeling the xdg data home files, regardless of their type +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_all_data',` + gen_require(` + attribute xdg_data_type; + ') + + relabel_dirs_pattern($1, xdg_data_type, xdg_data_type) + relabel_files_pattern($1, xdg_data_type, xdg_data_type) + relabel_lnk_files_pattern($1, xdg_data_type, xdg_data_type) + relabel_fifo_files_pattern($1, xdg_data_type, xdg_data_type) + relabel_sock_files_pattern($1, xdg_data_type, xdg_data_type) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Create objects in the user home dir with an automatic type transition to +## the xdg_documents_t 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> +## <param name="filename" optional="true"> +## <summary> +## Name of the directory created +## </summary> +## </param> +# +interface(`xdg_generic_user_home_dir_filetrans_documents',` + gen_require(` + type xdg_documents_t; + ') + + userdom_user_home_dir_filetrans($1, xdg_documents_t, $2, $3) +') + +######################################### +## <summary> +## Manage documents content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_manage_documents',` + gen_require(` + type xdg_documents_t; + ') + + manage_dirs_pattern($1, xdg_documents_t, xdg_documents_t) + manage_files_pattern($1, xdg_documents_t, xdg_documents_t) +') + +######################################## +## <summary> +## Allow relabeling the documents resources +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_documents',` + gen_require(` + type xdg_documents_t; + ') + + relabel_dirs_pattern($1, xdg_documents_t, xdg_documents_t) + relabel_files_pattern($1, xdg_documents_t, xdg_documents_t) + relabel_lnk_files_pattern($1, xdg_documents_t, xdg_documents_t) + + userdom_search_user_home_dirs($1) +') + +######################################### +## <summary> +## Read downloaded content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_read_downloads',` + gen_require(` + type xdg_downloads_t; + ') + + read_files_pattern($1, xdg_downloads_t, xdg_downloads_t) + + userdom_search_user_home_dirs($1) +') + +######################################### +## <summary> +## Create downloaded content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_create_downloads',` + gen_require(` + type xdg_downloads_t; + ') + + create_files_pattern($1, xdg_downloads_t, xdg_downloads_t) + + userdom_search_user_home_dirs($1) +') + +######################################### +## <summary> +## Write downloaded content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_write_downloads',` + gen_require(` + type xdg_downloads_t; + ') + + write_files_pattern($1, xdg_downloads_t, xdg_downloads_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Create objects in the user home dir with an automatic type transition to +## the xdg_downloads_t 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> +## <param name="filename" optional="true"> +## <summary> +## Name of the directory created +## </summary> +## </param> +# +interface(`xdg_generic_user_home_dir_filetrans_downloads',` + gen_require(` + type xdg_downloads_t; + ') + + userdom_user_home_dir_filetrans($1, xdg_downloads_t, $2, $3) +') + +######################################### +## <summary> +## Manage downloaded content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_manage_downloads',` + gen_require(` + type xdg_downloads_t; + ') + + manage_dirs_pattern($1, xdg_downloads_t, xdg_downloads_t) + manage_files_pattern($1, xdg_downloads_t, xdg_downloads_t) +') + +######################################## +## <summary> +## Allow relabeling the downloads resources +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_downloads',` + gen_require(` + type xdg_downloads_t; + ') + + relabel_dirs_pattern($1, xdg_downloads_t, xdg_downloads_t) + relabel_files_pattern($1, xdg_downloads_t, xdg_downloads_t) + relabel_lnk_files_pattern($1, xdg_downloads_t, xdg_downloads_t) + + userdom_search_user_home_dirs($1) +') + +######################################### +## <summary> +## Read user pictures content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_read_pictures',` + gen_require(` + type xdg_pictures_t; + ') + + read_files_pattern($1, xdg_pictures_t, xdg_pictures_t) + list_dirs_pattern($1, xdg_pictures_t, xdg_pictures_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Create objects in the user home dir with an automatic type transition to +## the xdg_pictures_t 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> +## <param name="filename" optional="true"> +## <summary> +## Name of the directory created +## </summary> +## </param> +# +interface(`xdg_generic_user_home_dir_filetrans_pictures',` + gen_require(` + type xdg_pictures_t; + ') + + userdom_user_home_dir_filetrans($1, xdg_pictures_t, $2, $3) +') + +######################################### +## <summary> +## Manage pictures content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_manage_pictures',` + gen_require(` + type xdg_pictures_t; + ') + + manage_dirs_pattern($1, xdg_pictures_t, xdg_pictures_t) + manage_files_pattern($1, xdg_pictures_t, xdg_pictures_t) +') + +######################################## +## <summary> +## Allow relabeling the pictures resources +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_pictures',` + gen_require(` + type xdg_pictures_t; + ') + + relabel_dirs_pattern($1, xdg_pictures_t, xdg_pictures_t) + relabel_files_pattern($1, xdg_pictures_t, xdg_pictures_t) + relabel_lnk_files_pattern($1, xdg_pictures_t, xdg_pictures_t) + + userdom_search_user_home_dirs($1) +') + +######################################### +## <summary> +## Read user music content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_read_music',` + gen_require(` + type xdg_music_t; + ') + + read_files_pattern($1, xdg_music_t, xdg_music_t) + list_dirs_pattern($1, xdg_music_t, xdg_music_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Create objects in the user home dir with an automatic type transition to +## the xdg_pictures_t 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> +## <param name="filename" optional="true"> +## <summary> +## Name of the directory created +## </summary> +## </param> +# +interface(`xdg_generic_user_home_dir_filetrans_music',` + gen_require(` + type xdg_music_t; + ') + + userdom_user_home_dir_filetrans($1, xdg_music_t, $2, $3) +') + +######################################### +## <summary> +## Manage music content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_manage_music',` + gen_require(` + type xdg_music_t; + ') + + manage_dirs_pattern($1, xdg_music_t, xdg_music_t) + manage_files_pattern($1, xdg_music_t, xdg_music_t) +') + +######################################## +## <summary> +## Allow relabeling the music resources +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_music',` + gen_require(` + type xdg_music_t; + ') + + relabel_dirs_pattern($1, xdg_music_t, xdg_music_t) + relabel_files_pattern($1, xdg_music_t, xdg_music_t) + relabel_lnk_files_pattern($1, xdg_music_t, xdg_music_t) + + userdom_search_user_home_dirs($1) +') + +######################################### +## <summary> +## Read user video content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_read_videos',` + gen_require(` + type xdg_videos_t; + ') + + read_files_pattern($1, xdg_videos_t, xdg_videos_t) + list_dirs_pattern($1, xdg_videos_t, xdg_videos_t) + + userdom_search_user_home_dirs($1) +') + +######################################## +## <summary> +## Create objects in the user home dir with an automatic type transition to +## the xdg_videos_t 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> +## <param name="filename" optional="true"> +## <summary> +## Name of the directory created +## </summary> +## </param> +# +interface(`xdg_generic_user_home_dir_filetrans_videos',` + gen_require(` + type xdg_videos_t; + ') + + userdom_user_home_dir_filetrans($1, xdg_videos_t, $2, $3) +') + +######################################### +## <summary> +## Manage video content +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access +## </summary> +## </param> +# +interface(`xdg_manage_videos',` + gen_require(` + type xdg_videos_t; + ') + + manage_dirs_pattern($1, xdg_videos_t, xdg_videos_t) + manage_files_pattern($1, xdg_videos_t, xdg_videos_t) +') + +######################################## +## <summary> +## Allow relabeling the videos resources +## </summary> +## <param name="domain"> +## <summary> +## Domain allowed access. +## </summary> +## </param> +# +interface(`xdg_relabel_videos',` + gen_require(` + type xdg_videos_t; + ') + + relabel_dirs_pattern($1, xdg_videos_t, xdg_videos_t) + relabel_files_pattern($1, xdg_videos_t, xdg_videos_t) + relabel_lnk_files_pattern($1, xdg_videos_t, xdg_videos_t) + + userdom_search_user_home_dirs($1) +') diff --git a/policy/modules/system/xdg.te b/policy/modules/system/xdg.te new file mode 100644 index 000000000..df2224f1b --- /dev/null +++ b/policy/modules/system/xdg.te @@ -0,0 +1,38 @@ +policy_module(xdg, 1.0.0) + +######################################## +# +# Declarations +# + +attribute xdg_cache_type; + +attribute xdg_config_type; + +attribute xdg_data_type; + + +type xdg_cache_t; +xdg_cache_content(xdg_cache_t) + +type xdg_config_t; +xdg_config_content(xdg_config_t) + +type xdg_data_t; +xdg_data_content(xdg_data_t) + +# Various user location types (see ~/.config/user-dirs.dirs) +type xdg_documents_t; # customizable +userdom_user_home_content(xdg_documents_t) + +type xdg_downloads_t; # customizable +userdom_user_home_content(xdg_downloads_t) + +type xdg_music_t; # customizable +userdom_user_home_content(xdg_music_t) + +type xdg_pictures_t; # customizable +userdom_user_home_content(xdg_pictures_t) + +type xdg_videos_t; # customizable +userdom_user_home_content(xdg_videos_t)