2010-03-16 15 views
12

ho cercato e sperimentato per quasi quattro ore oggi, quindi sto andando chiedo solo verso l'alto:Come utilizzo effettivamente i Servizi di autorizzazione?

Come posso usare correttamente il Authorization Services API per mostrare all'utente una finestra di autorizzazione a livello di sistema, lo stesso quello che vedi quando fai clic sull'icona di un lucchetto in Preferenze di Sistema?

Da quello che posso dire, non v'è alcun modo per farlo utilizzando cacao, se si vuole fare a livello di codice, e se il vostro obiettivo è quello di chiamare un eseguibile che deve normalmente essere chiamato tramite sudo (nel mio caso, /usr/bin/pmset) sei su un torrente senza una pagaia.

Ti sfido, ti imploro: Per favore, mi illumini.

Grazie. :)

+0

È collegato alla documentazione. È necessario prima creare l'autorizzazione, ma l'API si occupa di richiedere all'utente la password e così via. –

+0

Sì, lo so. Non posso farmi testa o croce. Qualche possibilità di pubblicare o collegare ad un esempio di codice funzionante? –

risposta

3

Ovviamente si dovrebbe fare vera gestione degli errori e così, ma qui è un esempio per iniziare.

AuthorizationRef auth = NULL; 
OSStatus err; 
err = AuthorizationCreate(NULL, 
      NULL, 
      kAuthorizationFlagExtendRights|kAuthorizationFlagInteractionAllowed, 
      &auth); 
if(err != errAuthorizationSuccess) { 
    fprintf(stderr, "oops: %ld\n", (long int)err); 
    exit(-1); 
} 
char *opts[] = { "some", "parameters", "to", "pm", NULL }; 
err = AuthorizationExecuteWithPrivileges(
    auth, 
    "/usr/bin/pmset", 
    kAuthorizationFlagDefaults, 
    opts, 
    NULL); 
AuthorizationFree(auth, kAuthorizationFlagDefaults); 
if(err != errAuthorizationSuccess) { 
    fprintf(stderr, "oops: %ld\n", (long int)err); 
    exit(-1); 
} 
+0

Ricevo errori del linker quando chiamo queste funzioni di autorizzazione. Qualche idea del perché? –

+0

@RaffiKhatchadourian È necessario aggiungere i framework appropriati al progetto. Credo che questi siano tutti nel quadro della sicurezza. Ci sono stati molti cambiamenti a questo quadro in Lion, quindi alcuni di questi potrebbero non essere ancora disponibili o potrebbero essere stati spostati in un'altra struttura. –

+0

Grazie! Ci proverò. Abbastanza divertente il completamento automatico funziona senza l'aggiunta di alcun framework in Cocoa. –

Problemi correlati