Droits administrateur
Salut à tous,
J'ai créée une application qui se charge de maintenant à jour + de 800 logiciels.
Cependant j'avais oublié quelque chose ! Le cas où un utilisateur dit "normal" (sans droits admin) veut faire une mise à jour sur un logiciel qui nécessite les droits admin pour être supprimé, car je supprime l'ancienne version et remplace par la nouvelle évidemment.
J'ai donc fouillé un peu le code de Sparkle et j'ai trouvé mon bonheur. Enfin à moitié. ça marche plutôt bien, ça fait ce que je voulais que ça fasse. Sauf que j'aimerai que mon application demande les droits administrateur au lancement de l'application et qu'il les conserve tout le temps, jusqu'à l'extinction de mon application.
Donc voilà mes 2 questions :
- Comment détecter si l'utilisateur actuel a les droits administrateur ou non ?
- Si il n'a pas les droits, afficher un panneau qui demande le nom d'utilisateur + mdp de l'administrateur. Et ainsi pouvoir effectuer des manipulation de fichiers sans devoir retaper le mot de passe à chaque fois.
J'ai pas trop compris comment afficher un panneau de ce genre et conserver les droits.. j'ai l'impression qu'en fait c'est pas sorcier mais je vois vraiment pas comment.
Merci d'avance
J'ai créée une application qui se charge de maintenant à jour + de 800 logiciels.
Cependant j'avais oublié quelque chose ! Le cas où un utilisateur dit "normal" (sans droits admin) veut faire une mise à jour sur un logiciel qui nécessite les droits admin pour être supprimé, car je supprime l'ancienne version et remplace par la nouvelle évidemment.
J'ai donc fouillé un peu le code de Sparkle et j'ai trouvé mon bonheur. Enfin à moitié. ça marche plutôt bien, ça fait ce que je voulais que ça fasse. Sauf que j'aimerai que mon application demande les droits administrateur au lancement de l'application et qu'il les conserve tout le temps, jusqu'à l'extinction de mon application.
Donc voilà mes 2 questions :
- Comment détecter si l'utilisateur actuel a les droits administrateur ou non ?
- Si il n'a pas les droits, afficher un panneau qui demande le nom d'utilisateur + mdp de l'administrateur. Et ainsi pouvoir effectuer des manipulation de fichiers sans devoir retaper le mot de passe à chaque fois.
J'ai pas trop compris comment afficher un panneau de ce genre et conserver les droits.. j'ai l'impression qu'en fait c'est pas sorcier mais je vois vraiment pas comment.
Merci d'avance
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si tu veux une interface avec le petit cadenas, Security Interface
Par contre, la seule chose qu'on peut faire avec les droits admins, c'est lancer un autre exécutable ; le processus en cours ne peut obtenir de " promotion ".
J'en ai parlé ici.
Sinon, c'est comme "sudo", donc limité dans le temps ; si tu veux le garder plus longtemps, il faut jouer avec le trousseau (je ne sais pas comment ça par contre).
Super merci
Ce code va t'afficher la fenêtre d'authentification jusqu'au moment où le mdp est bon ou que l'utilisateur a cliqué sur annuler (tu testes authStat).
Mon application va remplacer les fichiers système (du genre les skins du Dock), et pour ça j'ai besoin des autorisations admins.
Petit problème : Lorsqu'un fichier est manquant !
Voici le code de Sparkle que j'utilise, ce que je ne pige pas bien c'est tout ce qui est dans "_movePathWithForcedAuthentication:toPath:" qui est appelé si on a besoin des autorisations administrateur :
Donc il faudrait que mon code s'adapte au cas où le fichier est inexistant et qu'il le copie bien. J'avais commencé, ce qui est en commentaire dans le code c'est ce que j'ai rajouté pour gérer cette situation, mais ça marche pas, car je suppose que ça n'est pas suffisant et qu'il faut changer d'autres trucs (Schlum, t'es ptête mon sauveur )
En bref, vous l'aurez compris, il me faudrait adapter ce code dans le cas où j'ai des fichiers de destination (dst) inexistants, enfin d'eviter la méthode de suppression.
Autre problème aussi, c'est que lorsque je remplace par des nouveaux fichiers et que tous les originaux sont bien existants, il me demande le mot de passe autant de fois qu'il y a de fichier à copier.
Oh oui, on a bien maté ...
Blagues a part, faut regarder la méthode _copy.. (je ne me souviens plus du reste du nom) dans NSFileManager+Authorization.m
J'utilise authentificationCreate(...) donc le seul Framework dont j'ai besoin c'est bien Security?
Je l'ai donc importé, et pourtant j'ai cette erreur à la compilation:
Qui il me semble arrive notamment lorsqu'on oubli d'importer un Framework?
Mais bon ça doit aussi être autre chose puisque là je l'importe bien.
[edit] Bon c'est finalement une erreur toute bête, j'avait pas importer le bon framework. J'avais importé SecurityFoundation ::)
Il me reste un souci. Certes mon outils se lance bien en mode root mais j'ai besoin de récupérer la valeur du résultat pour savoir si ça c'est bien passer ou pas.
Or dans la doc de AuthorizationExecuteWithPrivileges, rien vue qui parlais de ça.
Si je comprend bien c'est un autre Thread qui est lancé, donc il me faudrait un moyen de s'y accrocher. Je sais pas si ça veut dire grand choses ce que je dit
Pour la communication, il faut un pipe ou de la mémoire partagée.