19a747e4fSDavid du Colombier #include <u.h> 29a747e4fSDavid du Colombier #include <libc.h> 39a747e4fSDavid du Colombier #include <auth.h> 49a747e4fSDavid du Colombier 59a747e4fSDavid du Colombier int auth_getkey(char * params)69a747e4fSDavid du Colombierauth_getkey(char *params) 79a747e4fSDavid du Colombier { 8*d9306527SDavid du Colombier char *name; 99a747e4fSDavid du Colombier Dir *d; 109a747e4fSDavid du Colombier int pid; 119a747e4fSDavid du Colombier Waitmsg *w; 129a747e4fSDavid du Colombier 139a747e4fSDavid du Colombier /* start /factotum to query for a key */ 14*d9306527SDavid du Colombier name = "/factotum"; 15*d9306527SDavid du Colombier d = dirstat(name); 169a747e4fSDavid du Colombier if(d == nil){ 17*d9306527SDavid du Colombier name = "/boot/factotum"; 18*d9306527SDavid du Colombier d = dirstat(name); 19*d9306527SDavid du Colombier } 20*d9306527SDavid du Colombier if(d == nil){ 21*d9306527SDavid du Colombier werrstr("auth_getkey: no /factotum or /boot/factotum: didn't get key %s", params); 229a747e4fSDavid du Colombier return -1; 239a747e4fSDavid du Colombier } 249a747e4fSDavid du Colombier if(0) if(d->type != '/'){ 259a747e4fSDavid du Colombier werrstr("auth_getkey: /factotum may be bad: didn't get key %s", params); 269a747e4fSDavid du Colombier return -1; 279a747e4fSDavid du Colombier } 289a747e4fSDavid du Colombier switch(pid = fork()){ 299a747e4fSDavid du Colombier case -1: 30*d9306527SDavid du Colombier werrstr("can't fork for %s: %r", name); 319a747e4fSDavid du Colombier return -1; 329a747e4fSDavid du Colombier case 0: 33*d9306527SDavid du Colombier execl(name, "getkey", "-g", params, nil); 349a747e4fSDavid du Colombier exits(0); 359a747e4fSDavid du Colombier default: 369a747e4fSDavid du Colombier for(;;){ 379a747e4fSDavid du Colombier w = wait(); 389a747e4fSDavid du Colombier if(w == nil) 399a747e4fSDavid du Colombier break; 409a747e4fSDavid du Colombier if(w->pid == pid){ 419a747e4fSDavid du Colombier if(w->msg[0] != '\0'){ 429a747e4fSDavid du Colombier free(w); 439a747e4fSDavid du Colombier return -1; 449a747e4fSDavid du Colombier } 459a747e4fSDavid du Colombier free(w); 469a747e4fSDavid du Colombier return 0; 479a747e4fSDavid du Colombier } 489a747e4fSDavid du Colombier } 499a747e4fSDavid du Colombier } 509a747e4fSDavid du Colombier return 0; 519a747e4fSDavid du Colombier } 52