Bonsoir à tous
La fonction bash ci-dessous utilise zenity pour gérer le dialogue de saisie du mot de passe. Pour l'utiliser, il faut soit la recopier dans le script, soit l'y introduire par "source", puis remplacer tous les "sudo" par "pram_sudo". Le premier appel peut se faire sans paramètre.
J'ai essayé, sans succès, d'utiliser "alias sudo" et "unalias sudo" pour fonctionner avec des "sudo" dans le reste du script.
Elle accepte les variables d'environnement suivantes :
- PRAM_MDP_ECHO : valeur booléenne pour faire ou non l'écho de la saisie ; par défaut, pas d'écho
- PRAM_MDP_ESSAIS : le nombre de tentatives de saisie ; par défaut 3 ; après autant d'échecs avec des tentatives sans écho. une dernière tentative avec écho est proposée
- PRAM_MDP : le mot de passe ; bonne ou mauvaise idée ?
Nouvelle version : si la variable PRAM_MDP est erronée, la fonction bascule sur la saisie et le contrôle du mot de passe au lieu de renvoyer directement un code d'erreur
#! /bin/bash
function pram_sudo () {
local msg_echo="Entrez votre mot de passe"
function ctrl_mdp () {
[[ -z "${1}" ]] && return 1 ;
echo "${1}" | sudo -Svp "" &>/dev/null
return $((${?}))
}
function z_echo () {
[[ -n "${1}" ]] && ${1} && echo "" || echo "--hide-text"
}
function init_mdp () {
for (( ; mdp_essais-- ; )); do
mdp=""
! mdp=$(zenity --entry --title="Saisie du mot de passe" --text="${msg_echo}" $(z_echo ${mdp_echo})) && return 1;
ctrl_mdp "${mdp}" && return 0
msg_echo="Mot de passe "'"'"${mdp}"'"'" erroné."$'\n'"Nouvel essai."
done
! ${mdp_echo} && zenity --title="Saisie du mot de passe" --question --ok-label="Oui, réessayer" --cancel-label="Non, merci" \
--text="Mot de passe "'"'"${mdp}"'"'" erroné."$'\n'"Voulez-vous essayer une dernière fois"$'\n'"en affichant votre saisie ?"
if [[ "${?}" = "0" ]]; then
mdp=$(zenity --entry --text="Mot de passe : ultime tentative" --title="Saisie du mot de passe")
ctrl_mdp "${mdp}" && return 0 || mdp=""
fi
return 1
}
###############################################################
# Début de la fonction principale
################################################################
[[ -z "${PRAM_MDP_ECHO}" ]] && mdp_echo=false || mdp_echo=${PRAM_MDP_ECHO}
[[ -z "${PRAM_MDP_ESSAIS}" ]] && mdp_essais=3 || mdp_essais=$((${PRAM_MDP_ESSAIS}))
if ! [[ "${USER}" = "root" ]]; then
[[ -n "${PRAM_MDP}" ]] && [[ -z "${mdp}" ]] && { ctrl_mdp "${PRAM_MDP}" \
&& mdp="${PRAM_MDP}" || msg_echo="Le mot de passe \"${PRAM_MDP}\" est erroné" ; }
[[ -z "${mdp}" ]] && ! init_mdp && return 1 ;
[[ -z "${*}" ]] && return 0 || echo "${mdp}" | sudo -Sp "" "${@}"; return $((${?})) ;
fi
[[ -n "${*}" ]] && "${@}"
}