]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - usr.sbin/bsdconfig/password/share/password.subr
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / usr.sbin / bsdconfig / password / share / password.subr
1 if [ ! "$_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
31 BSDCFG_SHARE="/usr/share/bsdconfig"
32 . $BSDCFG_SHARE/common.subr || exit 1
33 f_dprintf "%s: loading includes..." password/password.subr
34 f_include $BSDCFG_SHARE/dialog.subr
35
36 BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="040.password"
37 f_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 #
46 f_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
122 f_dprintf "%s: Successfully loaded." password/password.subr
123
124 fi # ! $_PASSWORD_PASSWORD_SUBR