#
# 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 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
	  Build the "vlock" applet, that 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

