1if [ ! "$_PASSWORD_PASSWORD_SUBR" ]; then _PASSWORD_PASSWORD_SUBR=1
2#
3# Copyright (c) 2012-2013 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$
28#
29############################################################ INCLUDES
30
31BSDCFG_SHARE="/usr/share/bsdconfig"
32. $BSDCFG_SHARE/common.subr || exit 1
33f_dprintf "%s: loading includes..." password/password.subr
34f_include $BSDCFG_SHARE/dialog.subr
35
36BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="040.password"
37f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
38
39############################################################ FUNCTIONS
40
41# f_dialog_input_password
42#
43# Prompt the user to enter a password (twice). If the user does not cancel or
44# press ESC, the $pw_password environment variable will hold the password.
45#
46f_dialog_input_password()
47{
48	local prompt1="$msg_enter_new_password"
49	local prompt2="$msg_reenter_password"
50	local hline="$hline_alnum_punc_tab_enter"
51
52	local height1 width1
53	f_dialog_inputbox_size height1 width1 \
54	                       "$DIALOG_TITLE"     \
55	                       "$DIALOG_BACKTITLE" \
56	                       "$prompt1"          \
57	                       ""                  \
58	                       "$hline"
59
60	local height2 width2
61	f_dialog_inputbox_size height2 width2 \
62	                       "$DIALOG_TITLE"     \
63	                       "$DIALOG_BACKTITLE" \
64	                       "$prompt2"          \
65	                       ""                  \
66	                       "$hline"
67
68	#
69	# Loop until the user provides taint-free/valid input
70	#
71	local _password1 _password2
72	while :; do
73		_password1=$( $DIALOG \
74			--title "$DIALOG_TITLE"         \
75			--backtitle "$DIALOG_BACKTITLE" \
76			--hline "$hline"                \
77			--ok-label "$msg_ok"            \
78			--cancel-label "$msg_cancel"    \
79			--insecure                      \
80			--passwordbox "$prompt1"        \
81			$height1 $width1                \
82			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
83		) || return $?
84			# Return if user either pressed ESC or chose Cancel/No
85		debug= f_dialog_line_sanitize _password1
86
87		_password2=$( $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 "$prompt2"        \
95			$height2 $width2                \
96			2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
97		) || return $?
98			# Return if user either pressed ESC or chose Cancel/No
99		debug= f_dialog_line_sanitize _password2
100
101		# Check for NULL entry
102		if ! [ "$_password1" -o "$_password2" ]; then
103			f_show_msg "$msg_password_is_empty"
104			continue
105		fi
106
107		# Check for password mismatch
108		if [ "$_password1" != "$_password2" ]; then
109			f_show_msg "$msg_passwords_do_not_match"
110			continue
111		fi
112
113		pw_password="$_password1"
114		break
115	done
116
117	return $DIALOG_OK
118}
119
120############################################################ MAIN
121
122f_dprintf "%s: Successfully loaded." password/password.subr
123
124fi # ! $_PASSWORD_PASSWORD_SUBR
125