2010-03-16 10 views
12

He estado buscando y experimentando durante casi cuatro horas ahora, así que simplemente voy a preguntar directamente hacia arriba:¿Cómo uso realmente los servicios de autorización?

¿Cómo puedo usar correctamente la API Authorization Services para mostrar al usuario una ventana de autorización a nivel de sistema, el mismo uno que ve cuando hace clic en un ícono de candado en Preferencias del sistema?

Por lo que puedo decir, no hay forma de hacerlo usando Cocoa si desea hacerlo mediante programación, y si su objetivo es llamar a un ejecutable que normalmente necesita ser llamado a través del sudo (en mi caso, /usr/bin/pmset) estás en un arroyo sin una paleta.

Te desafío, te lo imploro: Por favor, ilumíname.

Gracias. :)

+0

Has vinculado a la documentación. Primero debe crear la autorización, pero la API se encarga de pedirle al usuario la contraseña y demás. –

+0

Sí, lo sé. No puedo entenderlo. ¿Alguna posibilidad de publicar o vincular un ejemplo de código de trabajo? –

Respuesta

3

Obviamente que debe hacer el tratamiento de errores real y tal, pero aquí es un ejemplo para que pueda empezar.

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

Recibo errores del enlazador cuando llamo a estas funciones de autorización. ¿Alguna idea de por qué? –

+0

@RaffiKhatchadourian Necesita agregar los marcos adecuados a su proyecto. Creo que todo esto está en el marco de seguridad. Ha habido muchos cambios en ese marco en Lion, por lo que parte de esto puede estar disponible o no, o puede haber cambiado a otro marco. –

+0

Gracias! Probaré eso. Curiosamente, la autocompletación funciona sin la adición de ningún marco en Cocoa. –

Cuestiones relacionadas