password.subr revision 238438
1if [ ! "$_PASSWORD_PASSWORD_SUBR" ]; then _PASSWORD_PASSWORD_SUBR=1
2#
3# Copyright (c) 2012 Devin Teske
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10#    notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12#    notice, this list of conditions and the following disclaimer in the
13#    documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
27# $FreeBSD: head/usr.sbin/bsdconfig/password/include/password.subr 238438 2012-07-14 03:16:57Z dteske $
28#
29############################################################ INCLUDES
30
31BSDCFG_LIBE="/usr/libexec/bsdconfig"
32. $BSDCFG_LIBE/include/common.subr || exit 1
33f_include $BSDCFG_LIBE/include/dialog.subr
34
35APP_DIR="040.password"
36f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
37
38############################################################ FUNCTIONS
39
40# f_dialog_input_password
41#
42# Prompt the user to enter a password (twice). If the user does not cancel or
43# press ESC, the $pw_password environment variable will hold the password.
44#
45f_dialog_input_password()
46{
47	local hline="$hline_alnum_punc_tab_enter"
48	local msg size rmsg rsize
49
50	msg=$( printf "$msg_password" )
51	size=$( f_dialog_inputbox_size \
52	        	"$DIALOG_TITLE"     \
53	        	"$DIALOG_BACKTITLE" \
54	        	"$msg"              \
55	        	""                  \
56	        	"$hline"            )
57
58	rmsg=$( printf "$msg_reenter_password" )
59	rsize=$( f_dialog_inputbox_size \
60	        	"$DIALOG_TITLE"     \
61	        	"$DIALOG_BACKTITLE" \
62	        	"$rmsg"             \
63	        	""                  \
64	        	"$hline"            )
65
66	#
67	# Loop until the user provides taint-free/valid input
68	#
69	local retval _password1 _password2
70	while :; do
71		eval $DIALOG \
72			--title \"\$DIALOG_TITLE\"         \
73			--backtitle \"\$DIALOG_BACKTITLE\" \
74			--hline \"\$hline\"                \
75			--ok-label \"\$msg_ok\"            \
76			--cancel-label \"\$msg_cancel\"    \
77			--insecure                         \
78			--passwordbox \"\$msg\" $size      \
79			2> $DIALOG_TMPDIR/dialog.inputbox.$$
80
81		retval=$?
82		_password1=$( f_dialog_inputstr )
83
84		# Return if user has either pressed ESC or chosen Cancel/No
85		[ $retval -eq $SUCCESS ] || return $retval
86
87		eval $DIALOG \
88			--title \"\$DIALOG_TITLE\"         \
89			--backtitle \"\$DIALOG_BACKTITLE\" \
90			--hline \"\$hline\"                \
91			--ok-label \"\$msg_ok\"            \
92			--cancel-label \"\$msg_cancel\"    \
93			--insecure                         \
94			--passwordbox \"\$rmsg\" $rsize    \
95			2> $DIALOG_TMPDIR/dialog.inputbox.$$
96
97		retval=$?
98		_password2=$( f_dialog_inputstr )
99
100		# Return if user has either pressed ESC or chosen Cancel/No
101		[ $retval -eq $SUCCESS ] || return $retval
102
103		# Check for NULL entry
104		if ! [ "$_password1" -o "$_password2" ]; then
105			f_show_msg "$msg_password_is_empty"
106			continue
107		fi
108
109		# Check for password mismatch
110		if [ "$_password1" != "$_password2" ]; then
111			f_show_msg "$msg_passwords_do_not_match"
112			continue
113		fi
114
115		pw_password="$_password1"
116		break
117	done
118
119	return $SUCCESS
120}
121
122fi # ! $_PASSWORD_PASSWORD_SUBR
123