)
}
-# ask_for_password
+# ask_for_password tries prompt cmd
#
# Wraps around plymouth ask-for-password and adds fallback to tty password ask
# if plymouth is not present.
-#
-# --cmd command
-# Command to execute. Required.
-# --prompt prompt
-# Password prompt. Note that function already adds ':' at the end.
-# Recommended.
-# --tries n
-# How many times repeat command on its failure. Default is 3.
-# --ply-[cmd|prompt|tries]
-# Command/prompt/tries specific for plymouth password ask only.
-# --tty-[cmd|prompt|tries]
-# Command/prompt/tries specific for tty password ask only.
-# --tty-echo-off
-# Turn off input echo before tty command is executed and turn on after.
-# It's useful when password is read from stdin.
ask_for_password() {
- ply_tries=3
- tty_tries=3
- while [ "$#" -gt 0 ]; do
- case "$1" in
- --cmd) ply_cmd="$2"; tty_cmd="$2"; shift;;
- --ply-cmd) ply_cmd="$2"; shift;;
- --tty-cmd) tty_cmd="$2"; shift;;
- --prompt) ply_prompt="$2"; tty_prompt="$2"; shift;;
- --ply-prompt) ply_prompt="$2"; shift;;
- --tty-prompt) tty_prompt="$2"; shift;;
- --tries) ply_tries="$2"; tty_tries="$2"; shift;;
- --ply-tries) ply_tries="$2"; shift;;
- --tty-tries) tty_tries="$2"; shift;;
- --tty-echo-off) tty_echo_off=yes;;
- *) echo "ask_for_password(): wrong opt '$1'" >&2;;
- esac
- shift
- done
+ tries="$1"
+ prompt="$2"
+ cmd="$3"
{
flock -s 9
# Prompt for password with plymouth, if installed and running.
if plymouth --ping 2>/dev/null; then
plymouth ask-for-password \
- --prompt "$ply_prompt" --number-of-tries="$ply_tries" | \
- eval "$ply_cmd"
+ --prompt "$prompt" --number-of-tries="$tries" | \
+ eval "$cmd"
ret=$?
else
- if [ "$tty_echo_off" = yes ]; then
- stty_orig="$(stty -g)"
- stty -echo
- fi
-
i=1
- while [ "$i" -le "$tty_tries" ]; do
- [ -n "$tty_prompt" ] && \
- printf "%s [%i/%i]:" "$tty_prompt" "$i" "$tty_tries" >&2
- eval "$tty_cmd" && ret=0 && break
+ while [ "$i" -le "$tries" ]; do
+ printf "%s [%i/%i]:" "$prompt" "$i" "$tries" >&2
+ eval "$cmd" && ret=0 && break
ret=$?
i=$((i+1))
- [ -n "$tty_prompt" ] && printf '\n' >&2
+ printf '\n' >&2
done
unset i
- [ "$tty_echo_off" = yes ] && stty "$stty_orig"
fi
} 9>/.console_lock