Pages : 1
#1 Le 29/11/2013, à 16:50
- Arbiel
[fonction bash] sudo par zenity
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 "${*}" ]] && "${@}"
}
Dernière modification par Arbiel (Le 06/12/2013, à 14:59)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 30/11/2013, à 01:48
- n3o51
Re : [fonction bash] sudo par zenity
si c'est une demande
UID_ROOT=0
if [ "$UID" -ne "$UID_ROOT" ]
then
une boite de dialogue zenity le signale
exit
fi
ton action
pour moi ce serait le mieux si le script n'est pas en lancer en étant en super user alors une boite de dialogue s'ouvre et demande de le relancer avec les droits sinon ton action
désole mais un peut de mal a comprendre lol en ayant lu en diagonale.
Welcome to the real world
________________________________
Hors ligne
#3 Le 30/11/2013, à 15:13
- Arbiel
Re : [fonction bash] sudo par zenity
Bonjour
Non, non, ce n'est pas du tout le sens de cette fonction. Il ne s'agit pas du tout d'afficher un message si l'utilisateur n'est pas "root", mais d'utiliser zenity pour gérer le dialogue de saisie de son mot de passe
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#4 Le 02/12/2013, à 22:31
- n3o51
Re : [fonction bash] sudo par zenity
pourquoi ne pas utiliser zenity --password plutot que zenity --text
Welcome to the real world
________________________________
Hors ligne
#5 Le 02/12/2013, à 22:39
- Arbiel
Re : [fonction bash] sudo par zenity
Pour un écho éventuel en clair, en fonction de la variable d'environnement PRAM_MDP_ECHO
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne