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

menu "Login/Password Management Utilities"

config FEATURE_SHADOWPASSWDS
	bool "Support for shadow passwords"
	default n
	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 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 need to use glibc's nsswitch.conf mechanism
	  (e.g. if user/group database is NOT stored in /etc/passwd etc),
	  you must NOT use this option.

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

config USE_BB_SHADOW
	bool "Use internal shadow password functions"
	default y
	depends on USE_BB_PWD_GRP && 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.

config USE_BB_CRYPT
	bool "Use internal DES and MD5 crypt functions"
	default y
	help
	  Busybox has internal DES and MD5 crypt functions.
	  They produce results which are identical to corresponding
	  standard C library functions.

	  If you leave this disabled, busybox will use the system's
	  crypt functions.  Most C libraries use large (~70k)
	  static buffers there, and also combine them with more general
	  DES encryption/decryption.

	  For busybox, having large static buffers is undesirable,
	  especially on NOMMU machines. Busybox also doesn't need
	  DES encryption/decryption and can do with smaller code.

	  If you enable this option, it will add about 4.8k of code
	  if you are building dynamically linked executable.
	  In static build, it makes code _smaller_ by about 1.2k,
	  and likely many kilobytes less of bss.

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

config FEATURE_ADDUSER_TO_GROUP
	bool "Support for adding users to groups"
	default n
	depends on ADDGROUP
	help
	  If  called  with two non-option arguments,
	  addgroup will add an existing user to an
	  existing group.

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

config FEATURE_DEL_USER_FROM_GROUP
	bool "Support for removing users from groups."
	default n
	depends on DELGROUP
	help
	  If called with two non-option arguments, deluser
	  or delgroup will remove an user from a specified group.

config FEATURE_CHECK_NAMES
	bool "Enable sanity check on user/group names in adduser and addgroup"
	default n
	depends on ADDUSER || ADDGROUP
	help
	  Enable sanity check on user and group names in adduser and addgroup.
	  To avoid problems, the user or group name should consist only of
	  letters, digits, underscores, periods, at signs and dashes,
	  and not start with a dash (as defined by IEEE Std 1003.1-2001).
	  For compatibility with Samba machine accounts "$" is also supported
	  at the end of the user or group name.

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

config FEATURE_ADDUSER_LONG_OPTIONS
	bool "Enable long options"
	default n
	depends on ADDUSER && GETOPT_LONG
	help
	  Support long options for the adduser applet.

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

config GETTY
	bool "getty"
	default n
	select FEATURE_SYSLOG
	help
	  getty lets you log in on a tty, it is normally invoked by init.

config FEATURE_UTMP
	bool "Support utmp file"
	depends on GETTY || LOGIN || SU || WHO
	default n
	help
	  The file /var/run/utmp is used to track who is currently logged in.

config FEATURE_WTMP
	bool "Support wtmp file"
	depends on GETTY || LOGIN || SU || LAST
	default n
	select FEATURE_UTMP
	help
	  The file /var/run/wtmp is used to track when user's have logged into
	  and logged out of the system.

config LOGIN
	bool "login"
	default n
	select FEATURE_SUID
	select FEATURE_SYSLOG
	help
	  login is used when signing onto a system.

	  Note that Busybox binary must be setuid root for this applet to
	  work properly.

config PAM
	bool "Support for PAM (Pluggable Authentication Modules)"
	default n
	depends on LOGIN
	help
	  Use PAM in login(1) instead of direct access to password database.

config LOGIN_SCRIPTS
	bool "Support for login scripts"
	depends on LOGIN
	default n
	help
	  Enable this if you want login to execute $LOGIN_PRE_SUID_SCRIPT
	  just prior to switching from root to logged-in user.

config FEATURE_NOLOGIN
	bool "Support for /etc/nologin"
	default y
	depends on LOGIN
	help
	  The file /etc/nologin is used by (some versions of) login(1).
	  If it exists, non-root logins are prohibited.

config FEATURE_SECURETTY
	bool "Support for /etc/securetty"
	default y
	depends on 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 PASSWD
	bool "passwd"
	default n
	select FEATURE_SUID
	select FEATURE_SYSLOG
	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.

	  Note that Busybox binary must be setuid root for this applet to
	  work properly.

config FEATURE_PASSWD_WEAK_CHECK
	bool "Check new passwords for weakness"
	default y
	depends on PASSWD
	help
	  With this option passwd will refuse new passwords which are "weak".

config CRYPTPW
	bool "cryptpw"
	default n
	help
	  Applet for crypting a string.

config CHPASSWD
       bool "chpasswd"
       default n
       help
         chpasswd  reads  a  file  of user name and password pairs from
         standard input and uses this information to update a group of
         existing users.

config SU
	bool "su"
	default n
	select FEATURE_SUID
	select FEATURE_SYSLOG
	help
	  su is used to become another user during a login session.
	  Invoked without a username, su defaults to becoming the super user.

	  Note that Busybox binary must be setuid root for this applet to
	  work properly.

config FEATURE_SU_SYSLOG
	bool "Enable su to write to syslog"
	default y
	depends on SU

config FEATURE_SU_CHECKS_SHELLS
	bool "Enable su to check user's shell to be listed in /etc/shells"
	depends on SU
	default y

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

config VLOCK
	bool "vlock"
	default n
	select FEATURE_SUID
	help
	  Build the "vlock" applet which allows you to lock (virtual) terminals.

	  Note that Busybox binary must be setuid root for this applet to
	  work properly.

endmenu
