2010-03-16 23 views
12

Ich habe jetzt fast vier Stunden Suche und Experimentieren, so dass ich mich fragen würde nur gerade nach oben:Wie verwende ich Autorisierungsdienste?

Wie kann ich die Authorization Services API korrekt verwenden, um den Benutzer auf Systemebene Autorisierungsfenster zu zeigen, die gleichen einen, den Sie sehen, wenn Sie in den Systemeinstellungen auf ein Schlosssymbol klicken?

Von dem, was ich sagen kann, gibt es keine Möglichkeit, es mit Cocoa zu tun, wenn Sie es programmatisch tun wollen, und wenn Ihr Ziel ist es, eine ausführbare Datei aufzurufen, die /usr/bin/pmset über sudo aufgerufen werden normalerweise benötigt (in meinem Fall) Du bist auf einem Bach ohne Paddel.

Ich fordere dich heraus, ich flehe dich an: Bitte erleuchte mich.

Vielen Dank. :)

+0

Sie sind mit der Dokumentation verknüpft. Sie müssen zuerst die Autorisierung erstellen, aber die API sorgt dafür, dass der Benutzer nach dem Kennwort und anderem gefragt wird. –

+0

Ja, ich weiß. Ich kann nicht Kopf oder Zahl davon machen. Sie haben die Möglichkeit, ein funktionierendes Codebeispiel zu posten oder zu verlinken? –

Antwort

3

Offensichtlich sollten Sie echte Fehlerbehandlung tun und so, aber hier ist ein Beispiel für den Einstieg.

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

Ich bekomme Linker-Fehler, wenn ich diese Autorisierungsfunktionen aufrufen. Irgendeine Idee warum? –

+0

@RaffiKhatchadourian Sie müssen Ihrem Projekt die entsprechenden Frameworks hinzufügen. Ich glaube, das sind alle im Sicherheitsrahmen. In Lion wurden viele Änderungen an diesem Framework vorgenommen, sodass einige davon möglicherweise noch verfügbar sind oder möglicherweise in ein anderes Framework verschoben wurden. –

+0

Danke! Ich werde das versuchen. Lustigerweise funktioniert die automatische Vervollständigung ohne das Hinzufügen irgendwelcher Frameworks in Cocoa. –