Bienvenue visiteur (Inscription |  Connexion)
Qui est en ligne ?
Il y a : 14 utilisateurs en ligne, consultez le détail
Auteur Message
zephyroth
#0 Message posté le : 11-04-2008 à 13:11:43


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 13-07-2005
Nombre de messages : 204
Bonjour @ tous !

Je crée actuellement une application basée sur AppleScript et des scripts Bash.

Je sais qu'on peut lancer un script Bash via AppleScript avec la commande suivante :
do shell script "monscript" password "mypass" with administrator privileges.

Cette commande affiche une fenêtre dans laquelle l'utilisateur doit entrer son mot de passe avant l'exécution du script (si celui-ci nécessite les droits administrateur).
Le problème avec ce type de commande c'est qu'au bout de 5 minutes les droits redeviennent ceux de l'utilisateur actuel. Or mon programme a pas mal de scripts différents à lancer durant l'exécution et la plupart s'exécute durant plus de 5 min donc à chaque fois l'utilisateur doit entrer de nouveau son mot de passe.

J'ai donc créer une fenêtre qui demande le mot de passe (secure text field).
Au clic sur "OK" le programme récupère le mot de passe entré dans une variable.

Mon problème c'est : comment vérifier que le mot de passe entré est bien celui de l'utilisateur ?

J'ai bien tenté do shell script "echo " & my_pass & " | sudo -S ls / > /dev/null 2> /dev/null; echo $?".

Mais si l'utilisateur a déjà lancé la commande sudo en utilisant son sytème, lorsque mon programme demande le mot de passe, peu importe le mot de passe entré il est considéré comme exact !

J'avais pensé terminé le processus qui fait que la commande sudo dure 5 min mais impossible de savoir lequel c'est ... Bref je m'arrache les cheveux donc si l'un d'entre vous à une idée ...


--Message édité par zephyroth le 11-04-2008 à 13:13:43--
zephyroth
#1 Message posté le : 11-04-2008 à 15:45:35


Scarabée


Forum : Inscrit
Association :
Arrivé(e) le : 13-07-2005
Nombre de messages : 204
OK j'ai trouvé tout seul comme le grand garçon que je suis ...

En fait il suffisait de changer la commande :

do shell script "echo " & my_pass & " | sudo -S ls / > /dev/null 2> /dev/null; echo $?"

par

do shell script "sudo -k;echo " & my_pass & " | sudo -S ls / > /dev/null 2> /dev/null; echo $?"

Voici l'explication de la command "sudo -k" tirée des pages du manuel Anglais:

-k The -k (kill) option to sudo invalidates the user's timestamp by setting the time on it to the epoch. The next
time sudo is run a password will be required. This option does not require a password and was added to allow a
user to revoke sudo permissions from a .logout file