Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/11/2013, à 17: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, à 15:59)


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
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, à 02: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, à 16: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
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, à 23: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, à 23: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
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