#
# For a description of the syntax of this configuration file,
# see scripts/kbuild/config-language.txt.
#

menu "SELinux Utilities"
	depends on SELINUX

INSERT

config CHCON
	bool "chcon"
	default n
	depends on SELINUX
	help
	  Enable support to change the security context of file.

config FEATURE_CHCON_LONG_OPTIONS
	bool "Enable long options"
	default y
	depends on CHCON && LONG_OPTS
	help
	  Support long options for the chcon applet.

config GETENFORCE
	bool "getenforce"
	default n
	depends on SELINUX
	help
	  Enable support to get the current mode of SELinux.

config GETSEBOOL
	bool "getsebool"
	default n
	depends on SELINUX
	help
	  Enable support to get SELinux boolean values.

config LOAD_POLICY
	bool "load_policy"
	default n
	depends on SELINUX
	help
	  Enable support to load SELinux policy.

config MATCHPATHCON
	bool "matchpathcon"
	default n
	depends on SELINUX
	help
	  Enable support to get default security context of the
	  specified path from the file contexts configuration.

config RESTORECON
	bool "restorecon"
	default n
	depends on SELINUX
	help
	  Enable support to relabel files. The feature is almost
	  the same as setfiles, but usage is a little different.

config RUNCON
	bool "runcon"
	default n
	depends on SELINUX
	help
	  Enable support to run command in specified security context.

config FEATURE_RUNCON_LONG_OPTIONS
	bool "Enable long options"
	default y
	depends on RUNCON && LONG_OPTS
	help
	  Support long options for the runcon applet.

config SELINUXENABLED
	bool "selinuxenabled"
	default n
	depends on SELINUX
	help
	  Enable support for this command to be used within shell scripts
	  to determine if selinux is enabled.

config SETENFORCE
	bool "setenforce"
	default n
	depends on SELINUX
	help
	  Enable support to modify the mode SELinux is running in.

config SETFILES
	bool "setfiles"
	default n
	depends on SELINUX
	help
	  Enable support to modify to relabel files.
	  Notice: If you built libselinux with -D_FILE_OFFSET_BITS=64,
	  (It is default in libselinux's Makefile), you _must_ enable
	  CONFIG_LFS.

config FEATURE_SETFILES_CHECK_OPTION
	bool "Enable check option"
	default n
	depends on SETFILES
	help
	  Support "-c" option (check the validity of the contexts against
	  the specified binary policy) for setfiles. Requires libsepol.

config SETSEBOOL
	bool "setsebool"
	default n
	depends on SELINUX
	help
	  Enable support for change boolean.
	  semanage and -P option is not supported yet.

config SESTATUS
	bool "sestatus"
	default n
	depends on SELINUX
	help
	  Displays the status of SELinux.

endmenu
