#
# 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
	  getty lets you log in on a tty, it is normally invoked by init.

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 without 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
	  Build the "vlock" applet which allows you to lock (virtual) terminals.

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
	  Build support for shadow password in /etc/shadow.  This file is only
	  readable by root and thus the encrypted passwords are no longer
	  publicly readable.

config CONFIG_USE_BB_SHADOW
	bool "  Use busybox shadow password functions"
	default n
	depends on CONFIG_USE_BB_PWD_GRP && CONFIG_FEATURE_SHADOWPASSWDS
	help
	    If you leave this disabled, busybox will use the system's shadow
	    password handling 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 shadow password 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/shadow file when handling shadow passwords.  This
	    makes your system 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 shadow passwords from remote LDAP
	    password servers and whatnot.

endmenu

