xref: /freebsd/usr.sbin/bsdconfig/password/share/password.subr (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
1ab2043b8SDevin Teskeif [ ! "$_PASSWORD_PASSWORD_SUBR" ]; then _PASSWORD_PASSWORD_SUBR=1
2ab2043b8SDevin Teske#
3d3a0f918SDevin Teske# Copyright (c) 2012-2013 Devin Teske
4ab2043b8SDevin Teske# All rights reserved.
5ab2043b8SDevin Teske#
6ab2043b8SDevin Teske# Redistribution and use in source and binary forms, with or without
7ab2043b8SDevin Teske# modification, are permitted provided that the following conditions
8ab2043b8SDevin Teske# are met:
9ab2043b8SDevin Teske# 1. Redistributions of source code must retain the above copyright
10ab2043b8SDevin Teske#    notice, this list of conditions and the following disclaimer.
11ab2043b8SDevin Teske# 2. Redistributions in binary form must reproduce the above copyright
12ab2043b8SDevin Teske#    notice, this list of conditions and the following disclaimer in the
13ab2043b8SDevin Teske#    documentation and/or other materials provided with the distribution.
14ab2043b8SDevin Teske#
15ab2043b8SDevin Teske# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16ab2043b8SDevin Teske# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17ab2043b8SDevin Teske# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ab2043b8SDevin Teske# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19ab2043b8SDevin Teske# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20ab2043b8SDevin Teske# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21ab2043b8SDevin Teske# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22ab2043b8SDevin Teske# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23ab2043b8SDevin Teske# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24ab2043b8SDevin Teske# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25ab2043b8SDevin Teske# SUCH DAMAGE.
26ab2043b8SDevin Teske#
27ab2043b8SDevin Teske#
28ab2043b8SDevin Teske############################################################ INCLUDES
29ab2043b8SDevin Teske
30ab2043b8SDevin TeskeBSDCFG_SHARE="/usr/share/bsdconfig"
31ab2043b8SDevin Teske. $BSDCFG_SHARE/common.subr || exit 1
3256961fd7SDevin Teskef_dprintf "%s: loading includes..." password/password.subr
33ab2043b8SDevin Teskef_include $BSDCFG_SHARE/dialog.subr
34ab2043b8SDevin Teske
35ab2043b8SDevin TeskeBSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="040.password"
36ab2043b8SDevin Teskef_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
37ab2043b8SDevin Teske
38ab2043b8SDevin Teske############################################################ FUNCTIONS
39ab2043b8SDevin Teske
40ab2043b8SDevin Teske# f_dialog_input_password
41ab2043b8SDevin Teske#
42ab2043b8SDevin Teske# Prompt the user to enter a password (twice). If the user does not cancel or
43ab2043b8SDevin Teske# press ESC, the $pw_password environment variable will hold the password.
44ab2043b8SDevin Teske#
45ab2043b8SDevin Teskef_dialog_input_password()
46ab2043b8SDevin Teske{
47052f8969SDevin Teske	local prompt1="$msg_enter_new_password"
48052f8969SDevin Teske	local prompt2="$msg_reenter_password"
49ab2043b8SDevin Teske	local hline="$hline_alnum_punc_tab_enter"
50ab2043b8SDevin Teske
5174036c4dSDevin Teske	local height1 width1
5274036c4dSDevin Teske	f_dialog_inputbox_size height1 width1 \
53ab2043b8SDevin Teske	                       "$DIALOG_TITLE"     \
54ab2043b8SDevin Teske	                       "$DIALOG_BACKTITLE" \
55052f8969SDevin Teske	                       "$prompt1"          \
56ab2043b8SDevin Teske	                       ""                  \
5774036c4dSDevin Teske	                       "$hline"
58ab2043b8SDevin Teske
5974036c4dSDevin Teske	local height2 width2
6074036c4dSDevin Teske	f_dialog_inputbox_size height2 width2 \
61ab2043b8SDevin Teske	                       "$DIALOG_TITLE"     \
62ab2043b8SDevin Teske	                       "$DIALOG_BACKTITLE" \
63052f8969SDevin Teske	                       "$prompt2"          \
64ab2043b8SDevin Teske	                       ""                  \
6574036c4dSDevin Teske	                       "$hline"
66ab2043b8SDevin Teske
67ab2043b8SDevin Teske	#
68ab2043b8SDevin Teske	# Loop until the user provides taint-free/valid input
69ab2043b8SDevin Teske	#
70ec7120b5SDevin Teske	local _password1 _password2
71ab2043b8SDevin Teske	while :; do
72ec7120b5SDevin Teske		_password1=$( $DIALOG \
7374036c4dSDevin Teske			--title "$DIALOG_TITLE"         \
7474036c4dSDevin Teske			--backtitle "$DIALOG_BACKTITLE" \
7574036c4dSDevin Teske			--hline "$hline"                \
7674036c4dSDevin Teske			--ok-label "$msg_ok"            \
7774036c4dSDevin Teske			--cancel-label "$msg_cancel"    \
78ab2043b8SDevin Teske			--insecure                      \
79052f8969SDevin Teske			--passwordbox "$prompt1"        \
8074036c4dSDevin Teske			$height1 $width1                \
8189498fdfSDevin Teske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
82ec7120b5SDevin Teske		) || return $?
83ec7120b5SDevin Teske			# Return if user either pressed ESC or chose Cancel/No
84ec7120b5SDevin Teske		debug= f_dialog_line_sanitize _password1
85ab2043b8SDevin Teske
86ec7120b5SDevin Teske		_password2=$( $DIALOG \
8774036c4dSDevin Teske			--title "$DIALOG_TITLE"         \
8874036c4dSDevin Teske			--backtitle "$DIALOG_BACKTITLE" \
8974036c4dSDevin Teske			--hline "$hline"                \
9074036c4dSDevin Teske			--ok-label "$msg_ok"            \
9174036c4dSDevin Teske			--cancel-label "$msg_cancel"    \
92ab2043b8SDevin Teske			--insecure                      \
93052f8969SDevin Teske			--passwordbox "$prompt2"        \
9474036c4dSDevin Teske			$height2 $width2                \
9589498fdfSDevin Teske			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
96ec7120b5SDevin Teske		) || return $?
97ec7120b5SDevin Teske			# Return if user either pressed ESC or chose Cancel/No
98ec7120b5SDevin Teske		debug= f_dialog_line_sanitize _password2
99ab2043b8SDevin Teske
100ab2043b8SDevin Teske		# Check for NULL entry
101ab2043b8SDevin Teske		if ! [ "$_password1" -o "$_password2" ]; then
1027079fc4eSDevin Teske			f_show_msg "$msg_password_is_empty"
103ab2043b8SDevin Teske			continue
104ab2043b8SDevin Teske		fi
105ab2043b8SDevin Teske
106ab2043b8SDevin Teske		# Check for password mismatch
107ab2043b8SDevin Teske		if [ "$_password1" != "$_password2" ]; then
1087079fc4eSDevin Teske			f_show_msg "$msg_passwords_do_not_match"
109ab2043b8SDevin Teske			continue
110ab2043b8SDevin Teske		fi
111ab2043b8SDevin Teske
112ab2043b8SDevin Teske		pw_password="$_password1"
113ab2043b8SDevin Teske		break
114ab2043b8SDevin Teske	done
115ab2043b8SDevin Teske
116*f677a9e2SDevin Teske	return $DIALOG_OK
117ab2043b8SDevin Teske}
118ab2043b8SDevin Teske
11956961fd7SDevin Teske############################################################ MAIN
12056961fd7SDevin Teske
12156961fd7SDevin Teskef_dprintf "%s: Successfully loaded." password/password.subr
12256961fd7SDevin Teske
123ab2043b8SDevin Teskefi # ! $_PASSWORD_PASSWORD_SUBR
124