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

menu "Login/Password Management Utilities"

config CONFIG_USE_BB_PWD_GRP
	bool "Use internal password and group functions rather than system functions"
	default n
	help
	    If you leave this disabled, busybox will use the system's password
	    and group functions.  And if you are using the GNU C library
	    (glibc), you will then need to install the /etc/nsswitch.conf
	    configuration file and the required /lib/libnss_* libraries in
	    order for the password and group functions to work.  This generally
	    makes your embedded system quite a bit larger.

	    Enabling this option will cause busybox to directly access the
	    system's /etc/password, /etc/group files (and your system will be
	    smaller, and I will get fewer emails asking about how glibc NSS
	    works).  When this option is enabled, you will not be able to use
	    PAM to access remote LDAP password servers and whatnot.  And if you
	    want hostname resolution to work with glibc, you still need the
	    /lib/libnss_* libraries.

	    If you enable this option, it will add about 1.5k to busybox.


config CONFIG_ADDGROUP
	bool "addgroup"
	default n
	help
	  Utility for creating a new group account.

config CONFIG_DELGROUP
	bool "delgroup"
	default n
	help
	  Utility for deleting a group account.

config CONFIG_ADDUSER
	bool "adduser"
	default n
	help
	  Utility for creating a new user account.

config CONFIG_DELUSER
	bool "deluser"
	default n
	help
	  Utility for deleting a user account.

config CONFIG_GETTY
	bool "getty"
	default n
	help
	  Please submit a patch to add help text for this item.

config CONFIG_LOGIN
	bool "login"
	default n
	help
	  Login  is  used  when  signing onto a system.

config CONFIG_FEATURE_SECURETTY
	bool "  Support for /etc/securetty"
	default y
	depends on CONFIG_LOGIN
	help
	  The  file  /etc/securetty  is used by (some versions of) login(1).  The
	  file contains the device names of tty  lines  (one  per  line,  without
	  leading /dev/) on which root is allowed to login.

config CONFIG_PASSWD
	bool "passwd"
	default n
	help
	  Passwd  changes  passwords  for user and group accounts.  A normal user
	  may only change the password for his/her own account,  the  super  user
	  may  change the password for any account.  The administrator of a group
	  may change the password for the group.

config CONFIG_SU
	bool "su"
	default n
	help
	  su is used to become another user during a login session. Invoked with-
	  out a username, su defaults to becoming the super user.

config CONFIG_SULOGIN
	bool "sulogin"
	default n
	help
	  Sulogin is invoked when the system goes into single user
	  mode (this is done through an entry in inittab).

config CONFIG_VLOCK
	bool "vlock"
	default n
	help
	  Please submit a patch to add help text for this item.

comment "Common options for adduser, deluser, login, su"
	depends on CONFIG_ADDUSER || CONFIG_DELUSER || CONFIG_LOGIN || CONFIG_SU

config CONFIG_FEATURE_SHADOWPASSWDS
	bool "Support for shadow passwords"
	default n
	depends on CONFIG_ADDUSER || CONFIG_DELUSER || CONFIG_LOGIN || CONFIG_SU
	help
	  Please submit a patch to add help text for this item.

config CONFIG_USE_BB_SHADOW
	bool "  Use busybox shadow password functions"
	default n
	depends on CONFIG_USE_BB_PWD_GRP && CONFIG_FEATURE_SHADOWPASSWDS
	help
	  Please submit a patch to add help text for this item.

endmenu

