IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apple Discussion :

modification nécessitant le mot de passe de session admin [Cocoa]


Sujet :

Apple

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut modification nécessitant le mot de passe de session admin
    Bonjour à tous.

    J'aimerai savoir comment faut-il faire pour enregistrer les modifications dans un fichier .plist se trouvant dans /Library/LaunchDaemons/.
    Car pour l'instant la modification que j'y apporte ne s'enregistre pas.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //ouverture du fichier plist
          NSMutableDictionary* backupInformations;
          NSString* path = @"/Library/LaunchDaemons/com.company.software.plist";
          backupInformations = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
    
    //récupération d'un NSString contenu dans un NSTextField pour le réinjecter dans le fichier .plist
          NSArray *chemin = [[NSArray alloc] initWithObjects:[txtfield stringValue], nil];
          [backupInformations setObject:chemin forKey:@"QueueDirectories"];
    
    //enregistrement du fichier .plist
          [backupInformations writeToFile:path atomically:YES];
    Le fichier ne s'enregistre pas.
    Il me semble que c'est parce que toutes les modifications dans "/Library/LaunchDaemons/" sont soumises à mot de passe administrateur ?

    Auquel cas, quelqu'un a-t'il une solution ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 958
    Points : 4 387
    Points
    4 387
    Par défaut
    Voir le framework Security/Authorization

    le principe est d'appeler AuthorizationCreate et AuthorizationExecuteWithPrivileges pour exécuter une commande qui copiera le fichier que vous sauvegardez dans un endroit où vous pouvez écrire (le temporary folder de l'utilisateur courant) vers /Library/LaunchDaemons

    Il y a plein d'exemples sur le net : Cocoasudo, OSXSlightlyBetterAuth, …

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci pour le coup de main, je vais tester de suite.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Les pistes que tu m'as donné m'ont étés d'une grande aide.

    Cependant, il me reste un bout de code, que je n'arrive pas a exécuter avec les droits admin.

    code que voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char *tool = "/usr/sbin/chown";
    char *args[] = {"root:admin", "/var/tmp/com._mycompany_.plist"};
    
    FILE *pipe = NULL;
    status = AuthorizationExecuteWithPrivileges(authorizationRef, tool,
                                                    kAuthorizationFlagDefaults, args, &pipe);
    ça me sort un code erreur imbuvable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [92041:903] Error: -2129264641
    Y aurait-il un problème quant à l'exécution de la commande "chown" avec la méthode "AuthorizationExecuteWithPrivileges" ?

    Merci d'avance.

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 958
    Points : 4 387
    Points
    4 387
    Par défaut
    Citation Envoyé par Wismerhill50 Voir le message
    Bonjour,

    Les pistes que tu m'as donné m'ont étés d'une grande aide.

    Cependant, il me reste un bout de code, que je n'arrive pas a exécuter avec les droits admin.

    code que voici:

    char *tool = "/usr/sbin/chown";
    char *args[] = {"root:admin", "/var/tmp/com._mycompany_.plist"};

    FILE *pipe = NULL;
    status = AuthorizationExecuteWithPrivileges(authorizationRef, tool,
    kAuthorizationFlagDefaults, args, &pipe);


    ça me sort un code erreur imbuvable: [92041:903] Error: -2129264641

    Y aurait-il un problème quant à l'exécution de la commande "chown" avec la méthode "AuthorizationExecuteWithPrivileges" ?

    Merci d'avance.
    apparemment ce n'est pas dans ce code que se situe le problème, et un test ici montre que chown fonctionne évidemment très bien à travers AuthorizationExecuteWithPrivileges donc les pistes à explorer sont liées à authorizationRef :
    d'où il vient et ce que vous en avez fait avant, si AuthorizationCopyRights a été utilisé correctement, etc.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Je n'ai pas eu le temps de revoir le code aujourd'hui, mais j'ai repris le code de l'exemple de OSXSlightlyBetterAuth.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    OSStatus status;
    AuthorizationRef authorizationRef;
    
    status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
                                 kAuthorizationFlagDefaults, &authorizationRef);
    if (status != errAuthorizationSuccess)
        NSLog(@"Error Creating Initial Authorization: %d", status);
    
    // kAuthorizationRightExecute == "system.privilege.admin"
    AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0};
    AuthorizationRights rights = {1, &right};
    AuthorizationFlags flags = kAuthorizationFlagDefaults |
                               kAuthorizationFlagInteractionAllowed |
                               kAuthorizationFlagPreAuthorize |
                               kAuthorizationFlagExtendRights;
    
    status = AuthorizationCopyRights(authorizationRef, &rights, NULL, flags, NULL);
    if (status != errAuthorizationSuccess)
        NSLog(@"Copy Rights Unsuccessful: %d", status);
    
    char *tool = "/usr/sbin/chown";
    char *args[] = {"root:admin", "/var/tmp/com._mycompany_.plist"};
    FILE *pipe = NULL;
    
    status = AuthorizationExecuteWithPrivileges(authorizationRef, tool,
                                                kAuthorizationFlagDefaults, args, &pipe);
    if (status != errAuthorizationSuccess)
        NSLog(@"Error: %d", status);
    
    status = AuthorizationFree(authorizationRef, kAuthorizationFlagDestroyRights);
    Je n'ai pas eu le temps de revoir le code aujourd'hui

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 958
    Points : 4 387
    Points
    4 387
    Par défaut
    Citation Envoyé par Wismerhill50 Voir le message
    AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0};
    right.value <- le path de la commande à exécuter
    right.valueLength <- la longueur du path

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    très bien, j'essai ça dès que possible.

    Merci pour ton aide.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Ça fonctionne,

    Encore merci JeitEmgie pour ta précieuse aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/06/2012, 09h10
  2. [WinCVS] Mot de passe de session Windows
    Par Moy37 dans le forum CVS
    Réponses: 2
    Dernier message: 19/03/2007, 11h59
  3. Impossible de saisir le mot de passe de session
    Par GD91 dans le forum Windows XP
    Réponses: 4
    Dernier message: 20/10/2006, 19h22
  4. Perte de mots de passe de session XP
    Par koKoTis dans le forum Windows XP
    Réponses: 8
    Dernier message: 21/08/2006, 17h13
  5. [C#] Mot de passe de session
    Par bletz dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/06/2005, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo