diff options
author | Devin Teske <dteske@FreeBSD.org> | 2013-06-02 05:45:25 +0000 |
---|---|---|
committer | Devin Teske <dteske@FreeBSD.org> | 2013-06-02 05:45:25 +0000 |
commit | ec7120b5b2d110c16e43de0e66e7f971efd52717 (patch) | |
tree | c82ae86b5bfe7b5e527099673025931ffda2e584 | |
parent | 45de1d006d9c93c49834c4395eab7e434cb15745 (diff) | |
download | src-ec7120b5b2d110c16e43de0e66e7f971efd52717.tar.gz src-ec7120b5b2d110c16e43de0e66e7f971efd52717.zip |
Similar to r251236, improve the portion of dialog(1) API in dialog.subr
responsible for retrieving stored input (for the --inputbox and --password
widgets).
When we (Ron McDowell and I) developed the first version of bsdconfig, it
used temporary files to store responses from dialog(1). That hasn't been
true for a very long time, so the need to always execute some clean-up
function is long-deprecated. The function that used to perform these clean-
up routines for these widgets was f_dialog_inputstr().
We really don't need f_dialog_inputstr() for its originally designed purpose
as all dialog invocations no longer require temporary files.
Just as in r251236, redesign f_dialog_inputstr() in the following four ways:
1. Rename f_dialog_inputstr() to f_dialog_inputstr_fetch()
2. Introduce the new first-argument of $var_to_set to reduce forking
3. Create a corresponding f_dialog_inputstr_store() to abstract storage
4. Offload the sanitization to a new function, f_dialog_line_sanitize()
It should be noted that f_dialog_line_sanitize() -- unlike its cousin from
SVN r251236, f_dialog_data_sanitize() -- trims leading/trailing whitespace
from the user's input. This helps prevent errors and common mistakes caused
by the fact that the new cdialog implementation allows the right-arrow
cursor key to go beyond the last byte of realtime input (adding whitespace
at the end of the typed value).
While we're centralizing the sanitization, let's rewrite f_dialog_input()
while we're here to likewise reduce forking. The f_dialog_input() function
now expects the first argument of $var_to_set instead of producing results
on standard-out.
These changes greatly improve readability and also improve performance.
Notes
Notes:
svn path=/head/; revision=251242
-rwxr-xr-x | usr.sbin/bsdconfig/console/saver | 6 | ||||
-rwxr-xr-x | usr.sbin/bsdconfig/mouse/flags | 5 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/networking/share/hostname.subr | 5 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/networking/share/ipaddr.subr | 5 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/networking/share/media.subr | 8 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/networking/share/netmask.subr | 5 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/networking/share/resolv.subr | 5 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/networking/share/routing.subr | 7 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/password/share/password.subr | 29 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/share/dialog.subr | 128 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/share/media/tcpip.subr | 30 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/share/mustberoot.subr | 12 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/share/variable.subr | 3 | ||||
-rwxr-xr-x | usr.sbin/bsdconfig/startup/misc | 2 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/startup/share/rcconf.subr | 5 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/startup/share/rcedit.subr | 5 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/usermgmt/share/group_input.subr | 32 | ||||
-rw-r--r-- | usr.sbin/bsdconfig/usermgmt/share/user_input.subr | 82 |
18 files changed, 183 insertions, 191 deletions
diff --git a/usr.sbin/bsdconfig/console/saver b/usr.sbin/bsdconfig/console/saver index f2c9cf7c8307..d0150a78e5c3 100755 --- a/usr.sbin/bsdconfig/console/saver +++ b/usr.sbin/bsdconfig/console/saver @@ -183,9 +183,9 @@ while :; do break ;; "$msg_timeout") # Set the screen saver timeout interval f_dialog_title "$msg_value_required" - blanktime=$( f_dialog_input "$msg_enter_timeout_period" \ - "$( f_sysrc_get blanktime )" - ) && f_sysrc_set blanktime "$blanktime" + f_dialog_input blanktime "$msg_enter_timeout_period" \ + "$( f_sysrc_get blanktime )" && + f_sysrc_set blanktime "$blanktime" f_dialog_title_restore ;; esac diff --git a/usr.sbin/bsdconfig/mouse/flags b/usr.sbin/bsdconfig/mouse/flags index d6f50e821a84..4d646d3a6034 100755 --- a/usr.sbin/bsdconfig/mouse/flags +++ b/usr.sbin/bsdconfig/mouse/flags @@ -79,9 +79,8 @@ flags=$( f_sysrc_get moused_flags ) # Prompt the user with the current value # f_dialog_title "$msg_value_required" -flags=$( f_dialog_input "$msg_please_specify_the_mouse_daemon_flags" \ - "$flags" - ) || f_die +f_dialog_input flags "$msg_please_specify_the_mouse_daemon_flags" \ + "$flags" || f_die f_dialog_title_restore # diff --git a/usr.sbin/bsdconfig/networking/share/hostname.subr b/usr.sbin/bsdconfig/networking/share/hostname.subr index 61df2b4b0e7f..5fc3f5af565f 100644 --- a/usr.sbin/bsdconfig/networking/share/hostname.subr +++ b/usr.sbin/bsdconfig/networking/share/hostname.subr @@ -108,9 +108,8 @@ f_dialog_input_hostname() # Loop until the user provides taint-free input. # while :; do - hostname=$( f_dialog_input "$msg" "$hostname" \ - "$hline_alnum_punc_tab_enter" - ) || return + f_dialog_input hostname "$msg" "$hostname" \ + "$hline_alnum_punc_tab_enter" || return # Taint-check the user's input f_dialog_validate_hostname "$hostname" && break done diff --git a/usr.sbin/bsdconfig/networking/share/ipaddr.subr b/usr.sbin/bsdconfig/networking/share/ipaddr.subr index 4b39dd23be31..69777b2316f8 100644 --- a/usr.sbin/bsdconfig/networking/share/ipaddr.subr +++ b/usr.sbin/bsdconfig/networking/share/ipaddr.subr @@ -162,9 +162,8 @@ f_dialog_input_ipaddr() # - User has either pressed ESC or chosen Cancel/No # - User has not made any changes to the given value # - _input=$( f_dialog_input "$msg" "$_ipaddr" \ - "$hline_num_punc_tab_enter" - ) || return + f_dialog_input _input "$msg" "$_ipaddr" \ + "$hline_num_punc_tab_enter" || return [ "$_ipaddr" = "$_input" ] && return $FAILURE # Return success if NULL value was entered diff --git a/usr.sbin/bsdconfig/networking/share/media.subr b/usr.sbin/bsdconfig/networking/share/media.subr index 0ed763750b43..3c7f4734b3b7 100644 --- a/usr.sbin/bsdconfig/networking/share/media.subr +++ b/usr.sbin/bsdconfig/networking/share/media.subr @@ -122,8 +122,8 @@ f_dialog_input_options() local msg="$( printf "$msg_please_enter_mediaopts" "$interface" )" local hline="$hline_alnum_punc_tab_enter" - local dialog_inputbox - dialog_inputbox=$( $DIALOG \ + local _options + _options=$( $DIALOG \ --title "$DIALOG_TITLE" \ --backtitle "$DIALOG_BACKTITLE" \ --hline "$hline" \ @@ -133,10 +133,8 @@ f_dialog_input_options() "$options" \ 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD ) - local retval=$? - setvar DIALOG_INPUTBOX_$$ "$dialog_inputbox" - local _options="$( f_dialog_inputstr )" + f_dialog_line_sanitize _options [ $retval -eq $SUCCESS ] && options="$_options" diff --git a/usr.sbin/bsdconfig/networking/share/netmask.subr b/usr.sbin/bsdconfig/networking/share/netmask.subr index e6838e52c0f7..079b21d40522 100644 --- a/usr.sbin/bsdconfig/networking/share/netmask.subr +++ b/usr.sbin/bsdconfig/networking/share/netmask.subr @@ -110,9 +110,8 @@ f_dialog_input_netmask() # - User has either pressed ESC or chosen Cancel/No # - User has not made any changes to the given value # - _input=$( f_dialog_input "$msg" "$_netmask" \ - "$hline_num_punc_tab_enter" - ) || return + f_dialog_input _input "$msg" "$_netmask" \ + "$hline_num_punc_tab_enter" || return [ "$_netmask" = "$_input" ] && return $FAILURE # Return success if NULL value was entered diff --git a/usr.sbin/bsdconfig/networking/share/resolv.subr b/usr.sbin/bsdconfig/networking/share/resolv.subr index 0793c814a2e6..59e033205972 100644 --- a/usr.sbin/bsdconfig/networking/share/resolv.subr +++ b/usr.sbin/bsdconfig/networking/share/resolv.subr @@ -311,9 +311,8 @@ f_dialog_input_nameserver() # Loop until the user provides taint-free input. # while :; do - new_ns=$( f_dialog_input "$msg" "$ns" \ - "$hline_num_punc_tab_enter" - ) || return + f_dialog_input new_ns "$msg" "$ns" \ + "$hline_num_punc_tab_enter" || return # Take only the first "word" of the user's input new_ns="${new_ns%%[$IFS]*}" diff --git a/usr.sbin/bsdconfig/networking/share/routing.subr b/usr.sbin/bsdconfig/networking/share/routing.subr index 2d8cafcf6e17..32c53f55fa49 100644 --- a/usr.sbin/bsdconfig/networking/share/routing.subr +++ b/usr.sbin/bsdconfig/networking/share/routing.subr @@ -83,10 +83,9 @@ f_dialog_input_defaultrouter() # local retval while :; do - defaultrouter=$( f_dialog_input \ - "$msg_please_enter_default_router" \ - "$defaultrouter" "$hline_num_punc_tab_enter" - ) + f_dialog_input defaultrouter \ + "$msg_please_enter_default_router" \ + "$defaultrouter" "$hline_num_punc_tab_enter" retval=$? [ "$defaultrouter" ] || return $SUCCESS [ $retval -eq $SUCCESS ] || return $retval diff --git a/usr.sbin/bsdconfig/password/share/password.subr b/usr.sbin/bsdconfig/password/share/password.subr index 2d407c40a55b..ad1b2a1efb8a 100644 --- a/usr.sbin/bsdconfig/password/share/password.subr +++ b/usr.sbin/bsdconfig/password/share/password.subr @@ -69,10 +69,9 @@ f_dialog_input_password() # # Loop until the user provides taint-free/valid input # - local retval _password1 _password2 + local _password1 _password2 while :; do - local dialog_inputbox - dialog_inputbox=$( $DIALOG \ + _password1=$( $DIALOG \ --title "$DIALOG_TITLE" \ --backtitle "$DIALOG_BACKTITLE" \ --hline "$hline" \ @@ -82,16 +81,11 @@ f_dialog_input_password() --passwordbox "$msg" \ $height1 $width1 \ 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD - ) + ) || return $? + # Return if user either pressed ESC or chose Cancel/No + debug= f_dialog_line_sanitize _password1 - retval=$? - setvar DIALOG_INPUTBOX_$$ "$dialog_inputbox" - _password1=$( f_dialog_inputstr ) - - # Return if user has either pressed ESC or chosen Cancel/No - [ $retval -eq $SUCCESS ] || return $retval - - dialog_inputbox=$( $DIALOG \ + _password2=$( $DIALOG \ --title "$DIALOG_TITLE" \ --backtitle "$DIALOG_BACKTITLE" \ --hline "$hline" \ @@ -101,14 +95,9 @@ f_dialog_input_password() --passwordbox "$rmsg" \ $height2 $width2 \ 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD - ) - - retval=$? - setvar DIALOG_INPUTBOX_$$ "$dialog_inputbox" - _password2=$( f_dialog_inputstr ) - - # Return if user has either pressed ESC or chosen Cancel/No - [ $retval -eq $SUCCESS ] || return $retval + ) || return $? + # Return if user either pressed ESC or chose Cancel/No + debug= f_dialog_line_sanitize _password2 # Check for NULL entry if ! [ "$_password1" -o "$_password2" ]; then diff --git a/usr.sbin/bsdconfig/share/dialog.subr b/usr.sbin/bsdconfig/share/dialog.subr index bfbe1dbdf675..2b65d3100273 100644 --- a/usr.sbin/bsdconfig/share/dialog.subr +++ b/usr.sbin/bsdconfig/share/dialog.subr @@ -144,6 +144,48 @@ f_dialog_data_sanitize() done } +# f_dialog_line_sanitize $var_to_edit ... +# +# When using dialog(1) or Xdialog(1) sometimes unintended warnings or errors +# are generated from underlying libraries. For example, if $LANG is set to an +# invalid or unknown locale, the warnings from the Xdialog(1) libraries will +# clutter the output. This function helps by providing a centralied function +# that removes spurious warnings from the dialog(1) (or Xdialog(1)) response. +# +# Simply pass the name of one or more variables that need to be sanitized. +# After execution, the variables will hold their newly-sanitized data. +# +# This function, unlike f_dialog_data_sanitize(), also removes leading/trailing +# whitespace from each line. +# +f_dialog_line_sanitize() +{ + if [ "$#" -eq 0 ]; then + f_dprintf "%s: called with zero arguments" \ + f_dialog_response_sanitize + return $FAILURE + fi + + local __var_to_edit + for __var_to_edit in $*; do + # Skip warnings and trim leading/trailing whitespace + setvar $__var_to_edit "$( f_getvar $__var_to_edit | awk ' + BEGIN { data = 0 } + { + if ( ! data ) + { + if ( $0 ~ /^$/ ) next + if ( $0 ~ /^Gdk-WARNING \*\*:/ ) next + data = 1 + } + sub(/^[[:space:]]*/, "") + sub(/[[:space:]]*$/, "") + print + } + ' )" + done +} + ############################################################ TITLE FUNCTIONS # f_dialog_title [$new_title] @@ -1588,33 +1630,45 @@ f_dialog_noyes() ############################################################ INPUT FUNCTIONS -# f_dialog_inputstr +# f_dialog_inputstr_store [-s] $text +# +# Store some text from a dialog(1) inputbox to be retrieved later by +# f_dialog_inputstr_fetch(). If the first argument is `-s', the text is +# sanitized before being stored. +# +f_dialog_inputstr_store() +{ + local sanitize= + [ "$1" = "-s" ] && sanitize=1 && shift 1 # -s + local text="$1" + + # Sanitize the line before storing it if desired + [ "$sanitize" ] && f_dialog_line_sanitize text + + setvar DIALOG_INPUTBOX_$$ "$text" +} + +# f_dialog_inputstr_fetch [$var_to_set] # # Obtain the inputstr entered by the user from the most recently displayed -# dialog(1) inputbox and clean up any temporary files/variables. +# dialog(1) inputbox (previously stored with f_dialog_inputstr_store() above). +# If $var_to_set is NULL or missing, output is printed to stdout (which is less +# recommended due to performance degradation; in a loop for example). # -f_dialog_inputstr() +f_dialog_inputstr_fetch() { - # Skip warnings and trim leading/trailing whitespace from user input - eval echo \"\$DIALOG_INPUTBOX_$$\" | awk ' - BEGIN { found = 0 } - { - if ( ! found ) - { - if ( $0 ~ /^$/ ) next - if ( $0 ~ /^Gdk-WARNING \*\*:/ ) next - found = 1 - } - sub(/^[[:space:]]*/, "") - sub(/[[:space:]]*$/, "") - print - } - ' + local __var_to_set="$1" __cp + + debug= f_getvar DIALOG_INPUTBOX_$$ "${__var_to_set:-__cp}" # get data setvar DIALOG_INPUTBOX_$$ "" # scrub memory in case data was sensitive + + # Return the line on standard-out if desired + [ "$__var_to_set" ] || echo "$__cp" + return $SUCCESS } -# f_dialog_input $prompt [$init [$hline]] +# f_dialog_input $var_to_set $prompt [$init [$hline]] # # Prompt the user with a dialog(1) inputbox to enter some value. The inputbox # remains until the the user presses ENTER or ESC, or otherwise ends the @@ -1629,34 +1683,38 @@ f_dialog_inputstr() # f_dialog_input() { - local prompt="$1" init="$2" hline="$3" - local height width - f_dialog_inputbox_size height width \ + local __var_to_set="$1" __prompt="$2" __init="$3" __hline="$4" + + # NOTE: Function name appended to prevent __var_{height,width} values + # from becoming local (and thus preventing setvar from working). + local __height_input __width_input + f_dialog_inputbox_size __height_input __width_input \ "$DIALOG_TITLE" "$DIALOG_BACKTITLE" \ - "$prompt" "$init" "$hline" + "$__prompt" "$__init" "$__hline" - local opterm="--" - [ "$USE_XDIALOG" ] && opterm= + local __opterm="--" + [ "$USE_XDIALOG" ] && __opterm= - local dialog_input - dialog_input=$( + local __dialog_input + __dialog_input=$( $DIALOG \ --title "$DIALOG_TITLE" \ --backtitle "$DIALOG_BACKTITLE" \ - --hline "$hline" \ + --hline "$__hline" \ --ok-label "$msg_ok" \ --cancel-label "$msg_cancel" \ - --inputbox "$prompt" \ - $height $width \ - $opterm "$init" \ + --inputbox "$__prompt" \ + $__height_input $__width_input \ + $__opterm "$__init" \ 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD ) - local retval=$? + local __retval=$? - setvar DIALOG_INPUTBOX_$$ "$dialog_input" - f_dialog_inputstr + # Remove warnings and leading/trailing whitespace from user input + f_dialog_line_sanitize __dialog_input - return $retval + setvar "$__var_to_set" "$__dialog_input" + return $__retval } ############################################################ MENU FUNCTIONS diff --git a/usr.sbin/bsdconfig/share/media/tcpip.subr b/usr.sbin/bsdconfig/share/media/tcpip.subr index f1b4ac783627..b7b7b7e300c7 100644 --- a/usr.sbin/bsdconfig/share/media/tcpip.subr +++ b/usr.sbin/bsdconfig/share/media/tcpip.subr @@ -1422,29 +1422,23 @@ f_device_dialog_tcp() "$_netmask" \ && break ;; "$msg_host_name_including_domain:") - cp=$( f_dialog_input "$cp" \ - "$_hostname" - ) && _hostname="$cp" ;; + f_dialog_input cp "$cp" "$_hostname" \ + && _hostname="$cp" ;; "$msg_ipv4_gateway:") - cp=$( f_dialog_input "$cp" \ - "$_gateway" - ) && _gateway="$cp" ;; + f_dialog_input cp "$cp" "$_gateway" \ + && _gateway="$cp" ;; "$msg_name_server:") - cp=$( f_dialog_input "$cp" \ - "$_nameserver" - ) && _nameserver="$cp" ;; + f_dialog_input cp "$cp" "$_nameserver" \ + && _nameserver="$cp" ;; "$msg_ipv4_address:") - cp=$( f_dialog_input "$cp" \ - "$_ipaddr" - ) && _ipaddr="$cp" ;; + f_dialog_input cp "$cp" "$_ipaddr" \ + && _ipaddr="$cp" ;; "$msg_netmask:") - cp=$( f_dialog_input "$cp" \ - "$_netmask" - ) && _netmask="$cp" ;; + f_dialog_input cp "$cp" "$_netmask" \ + && _netmask="$cp" ;; "$msg_extra_options_to_ifconfig") - cp=$( f_dialog_input "$cp" \ - "$_extras" - ) && _extras="$cp" ;; + f_dialog_input cp "$cp" "$_extras" \ + && _extras="$cp" ;; esac done diff --git a/usr.sbin/bsdconfig/share/mustberoot.subr b/usr.sbin/bsdconfig/share/mustberoot.subr index 3f23e113c017..bf8dd67669b0 100644 --- a/usr.sbin/bsdconfig/share/mustberoot.subr +++ b/usr.sbin/bsdconfig/share/mustberoot.subr @@ -177,8 +177,7 @@ f_become_root_via_sudo() [ $retval -eq 255 ] && f_die $retval "$password" else - local dialog_inputbox - dialog_inputbox=$( $DIALOG \ + password=$( $DIALOG \ --title "$DIALOG_TITLE" \ --backtitle "$DIALOG_BACKTITLE" \ --hline "$hline" \ @@ -188,14 +187,9 @@ f_become_root_via_sudo() --passwordbox "$msg" \ $height $width \ 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD - ) - retval=$? - setvar DIALOG_INPUTBOX_$$ "$dialog_inputbox" - password=$( f_dialog_inputstr ) + ) || exit $? fi - - # Exit if the user cancelled. - [ $retval -eq $SUCCESS ] || exit $retval + debug= f_dialog_line_sanitize password # # Validate sudo(8) credentials diff --git a/usr.sbin/bsdconfig/share/variable.subr b/usr.sbin/bsdconfig/share/variable.subr index f51ebd6f6940..079c5643f379 100644 --- a/usr.sbin/bsdconfig/share/variable.subr +++ b/usr.sbin/bsdconfig/share/variable.subr @@ -93,8 +93,7 @@ f_variable_get_value() if ! { f_getvar $var cp && ! f_interactive; }; then shift 1 # var - cp=$( f_dialog_input "$( printf "$@" )" "$cp" ) && - setvar $var "$cp" + f_dialog_input cp "$( printf "$@" )" "$cp" && setvar $var "$cp" fi return $SUCCESS diff --git a/usr.sbin/bsdconfig/startup/misc b/usr.sbin/bsdconfig/startup/misc index c964129806eb..6e33462456ff 100755 --- a/usr.sbin/bsdconfig/startup/misc +++ b/usr.sbin/bsdconfig/startup/misc @@ -303,7 +303,7 @@ dialog_input_value() local prompt="$1" _input="$2" f_dialog_title "$msg_value_required" - _input=$( f_dialog_input "$prompt" "$_input" "$hline_alnum_tab_enter" ) + f_dialog_input _input "$prompt" "$_input" "$hline_alnum_tab_enter" local retval=$? f_dialog_title_restore diff --git a/usr.sbin/bsdconfig/startup/share/rcconf.subr b/usr.sbin/bsdconfig/startup/share/rcconf.subr index 1c641378ebff..ed8553ab9021 100644 --- a/usr.sbin/bsdconfig/startup/share/rcconf.subr +++ b/usr.sbin/bsdconfig/startup/share/rcconf.subr @@ -454,9 +454,8 @@ f_dialog_input_rcvar() while :; do # Return if user either pressed ESC or chosen Cancel/No - _input=$( f_dialog_input "$msg_please_enter_rcvar_name" \ - "$_input" "$hline_alnum_tab_enter" - ) || return + f_dialog_input _input "$msg_please_enter_rcvar_name" \ + "$_input" "$hline_alnum_tab_enter" || return # Check for invalid entry (1of2) if ! echo "$_input" | grep -q "^[[:alpha:]_]"; then diff --git a/usr.sbin/bsdconfig/startup/share/rcedit.subr b/usr.sbin/bsdconfig/startup/share/rcedit.subr index cb4a4116961e..64ee1ccf0d84 100644 --- a/usr.sbin/bsdconfig/startup/share/rcedit.subr +++ b/usr.sbin/bsdconfig/startup/share/rcedit.subr @@ -68,9 +68,8 @@ f_dialog_rcedit() fi # Return if user has either pressed ESC or chosen Cancel/No - _input=$( f_dialog_input "$msg" "$_input" \ - "$hline_alnum_punc_tab_enter" - ) || return + f_dialog_input _input "$msg" "$_input" \ + "$hline_alnum_punc_tab_enter" || return # Return if the value has not changed from current local cur_val="$( f_sysrc_get "$var" )" diff --git a/usr.sbin/bsdconfig/usermgmt/share/group_input.subr b/usr.sbin/bsdconfig/usermgmt/share/group_input.subr index 16d9083ec53c..49986cf94451 100644 --- a/usr.sbin/bsdconfig/usermgmt/share/group_input.subr +++ b/usr.sbin/bsdconfig/usermgmt/share/group_input.subr @@ -125,9 +125,8 @@ f_dialog_input_group_name() while :; do # Return if user has either pressed ESC or chosen Cancel/No - _input=$( f_dialog_input "$msg_group" "$_input" \ - "$hline_alnum_tab_enter" - ) || return + f_dialog_input _input "$msg_group" "$_input" \ + "$hline_alnum_tab_enter" || return # Check for no-change [ "$_input" = "$_name" ] && return $SUCCESS @@ -198,8 +197,7 @@ f_dialog_input_group_password() # local retval _password1 _password2 while :; do - local dialog_inputbox - dialog_inputbox=$( $DIALOG \ + _password1=$( $DIALOG \ --title "$DIALOG_TITLE" \ --backtitle "$DIALOG_BACKTITLE" \ --hline "$hline" \ @@ -210,15 +208,13 @@ f_dialog_input_group_password() $height1 $width1 \ 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD ) - retval=$? - setvar DIALOG_INPUTBOX_$$ "$dialog_inputbox" - _password1=$( f_dialog_inputstr ) + debug= f_dialog_line_sanitize _password1 # Return if user has either pressed ESC or chosen Cancel/No [ $retval -eq $SUCCESS ] || return $retval - dialog_inputbox=$( $DIALOG \ + _password2=$( $DIALOG \ --title "$DIALOG_TITLE" \ --backtitle "$DIALOG_BACKTITLE" \ --hline "$hline" \ @@ -229,10 +225,8 @@ f_dialog_input_group_password() $height2 $width2 \ 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD ) - retval=$? - setvar DIALOG_INPUTBOX_$$ "$dialog_inputbox" - _password2=$( f_dialog_inputstr ) + debug= f_dialog_line_sanitize _password2 # Return if user has either pressed ESC or chosen Cancel/No [ $retval -eq $SUCCESS ] || return $retval @@ -275,9 +269,8 @@ f_dialog_input_group_gid() local _input="$1" # Return if user has either pressed ESC or chosen Cancel/No - _input=$( f_dialog_input "$msg_group_id_leave_empty_for_default" \ - "$_input" "$hline_num_tab_enter" - ) || return + f_dialog_input _input "$msg_group_id_leave_empty_for_default" \ + "$_input" "$hline_num_tab_enter" || return group_gid="$_input" save_flag=1 @@ -392,11 +385,10 @@ f_dialog_input_group_members() 2) # Enter Group Members manually msg="$msg_group_members ($msg_separated_by_commas)" - # Return to previous menu if user has either - # pressed ESC or chosen Cancel/No - _group_members=$( f_dialog_input "$msg" "$_input" \ - "$hline_num_tab_enter" - ) || continue + f_dialog_input _group_members "$msg" "$_input" \ + "$hline_num_tab_enter" || continue + # Return to previous menu if user either + # pressed ESC or chose Cancel/No _input="$_group_members" ;; diff --git a/usr.sbin/bsdconfig/usermgmt/share/user_input.subr b/usr.sbin/bsdconfig/usermgmt/share/user_input.subr index 68df2cf0500a..7b79d7b44351 100644 --- a/usr.sbin/bsdconfig/usermgmt/share/user_input.subr +++ b/usr.sbin/bsdconfig/usermgmt/share/user_input.subr @@ -226,9 +226,8 @@ f_dialog_input_name() while :; do # Return if user has either pressed ESC or chosen Cancel/No - _input=$( f_dialog_input "$msg_login" "$_input" \ - "$hline_alnum_tab_enter" - ) || return + f_dialog_input _input "$msg_login" "$_input" \ + "$hline_alnum_tab_enter" || return # Check for no-change [ "$_input" = "$_name" ] && return $SUCCESS @@ -297,10 +296,9 @@ f_dialog_input_password() # # Loop until the user provides taint-free/valid input # - local retval _password1 _password2 + local _password1 _password2 while :; do - local dialog_inputbox - dialog_inputbox=$( $DIALOG \ + _password1=$( $DIALOG \ --title "$DIALOG_TITLE" \ --backtitle "$DIALOG_BACKTITLE" \ --hline "$hline" \ @@ -310,13 +308,11 @@ f_dialog_input_password() --passwordbox "$msg" \ $height1 $width1 \ 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD - ) - - retval=$? - setvar DIALOG_INPUTBOX_$$ "$dialog_inputbox" - _password1=$( f_dialog_inputstr ) + ) || return $? + # Return if user either pressed ESC or chose Cancel/No + debug= f_dialog_line_sanitize _password1 - dialog_inputbox=$( $DIALOG \ + _password2=$( $DIALOG \ --title "$DIALOG_TITLE" \ --backtitle "$DIALOG_BACKTITLE" \ --hline "$hline" \ @@ -326,14 +322,9 @@ f_dialog_input_password() --passwordbox "$rmsg" \ $height2 $width2 \ 2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD - ) - - retval=$? - setvar DIALOG_INPUTBOX_$$ "$dialog_inputbox" - _password2=$( f_dialog_inputstr ) - - # Return if user has either pressed ESC or chosen Cancel/No - [ $retval -eq $SUCCESS ] || return $retval + ) || return $? + # Return if user either pressed ESC or chose Cancel/No + debug= f_dialog_line_sanitize _password2 # Check for password mismatch if [ "$_password1" != "$_password2" ]; then @@ -373,9 +364,8 @@ f_dialog_input_gecos() local _input="$1" # Return if user has either pressed ESC or chosen Cancel/No - _input=$( f_dialog_input "$msg_full_name" "$_input" \ - "$hline_alnum_punc_tab_enter" - ) || return + f_dialog_input _input "$msg_full_name" "$_input" \ + "$hline_alnum_punc_tab_enter" || return pw_gecos="$_input" save_flag=1 @@ -396,9 +386,8 @@ f_dialog_input_uid() local _input="$1" # Return if user has either pressed ESC or chosen Cancel/No - _input=$( f_dialog_input "$msg_user_id_leave_empty_for_default" \ - "$_input" "$hline_num_tab_enter" - ) || return + f_dialog_input _input "$msg_user_id_leave_empty_for_default" \ + "$_input" "$hline_num_tab_enter" || return pw_uid="$_input" save_flag=1 @@ -419,9 +408,8 @@ f_dialog_input_gid() local _input="$1" # Return if user has either pressed ESC or chosen Cancel/No - _input=$( f_dialog_input "$msg_group_id_leave_empty_for_default" \ - "$_input" "$hline_num_tab_enter" - ) || return + f_dialog_input _input "$msg_group_id_leave_empty_for_default" \ + "$_input" "$hline_num_tab_enter" || return pw_gid="$_input" save_flag=1 @@ -442,9 +430,8 @@ f_dialog_input_class() local _input="$1" # Return if user has either pressed ESC or chosen Cancel/No - _input=$( f_dialog_input "$msg_login_class" "$_input" \ - "$hline_alnum_tab_enter" - ) || return + f_dialog_input _input "$msg_login_class" "$_input" \ + "$hline_alnum_tab_enter" || return pw_class="$_input" save_flag=1 @@ -585,10 +572,9 @@ f_dialog_input_change() ret_days=$(( $ret_days + 1 )) # Return to menu if either ESC or Cancel/No - ret_days=$( f_dialog_input \ + f_dialog_input ret_days \ "$msg_password_expires_in_how_many_days" \ - "$ret_days" "$hline" - ) || continue + "$ret_days" "$hline" || continue # Taint-check the user's input if ! f_isinteger "$ret_days"; then @@ -606,16 +592,12 @@ f_dialog_input_change() break ;; 4) # Enter value manually - local ret_secs - msg=$( printf "$msg_number_of_seconds_since_epoch" \ "$( date -r 1 "+%c %Z" )" ) # Return to menu if either ESC or Cancel/No - ret_secs=$( f_dialog_input \ - "$msg" "$_input" "$hline" ) || continue - - _input="$ret_secs" + f_dialog_input _input \ + "$msg" "$_input" "$hline" || continue # Taint-check the user's input if ! f_isinteger "${_input:-0}"; then @@ -771,10 +753,9 @@ f_dialog_input_expire() ret_days=$(( $ret_days + 1 )) # Return to menu if either ESC or Cancel/No - ret_days=$( f_dialog_input \ + f_dialog_input ret_days \ "$msg_account_expires_in_how_many_days" \ - "$ret_days" "$hline" - ) || continue + "$ret_days" "$hline" || continue # Taint-check the user's input if ! f_isinteger "$ret_days"; then @@ -792,16 +773,12 @@ f_dialog_input_expire() break ;; 4) # Enter value manually - local ret_secs - msg=$( printf "$msg_number_of_seconds_since_epoch" \ "$( date -r 1 "+%c %Z" )" ) # Return to menu if either ESC or Cancel/No - ret_secs=$( f_dialog_input \ - "$msg" "$_input" "$hline" ) || continue - - _input="$ret_secs" + f_dialog_input _input "$msg" \ + "$_input" "$hline" || continue # Taint-check the user's input if ! f_isinteger "${_input:-0}"; then @@ -837,9 +814,8 @@ f_dialog_input_home_dir() local _input="$1" # Return if user has either pressed ESC or chosen Cancel/No - _input=$( f_dialog_input "$msg_home_directory" "$_input" \ - "$hline_alnum_punc_tab_enter" - ) || return + f_dialog_input _input "$msg_home_directory" "$_input" \ + "$hline_alnum_punc_tab_enter" || return pw_home_dir="$_input" save_flag=1 |