Blob
1 #include <u.h>2 #include <libc.h>3 #include <auth.h>5 int6 auth_getkey(char *params)7 {8 char *name;9 int pid;10 Waitmsg *w;12 /* start /factotum to query for a key */13 name = unsharp("#9/bin/factotum");14 if(name == nil || access(name, AEXEC) < 0){15 werrstr("auth_getkey: no $PLAN9/bin/factotum: didn't get key %s", params);16 return -1;17 }18 switch(pid = fork()){19 case -1:20 werrstr("can't fork for %s: %r", name);21 return -1;22 case 0:23 execl(name, "getkey", "-g", params, nil);24 exits(0);25 default:26 free(name);27 for(;;){28 w = wait();29 if(w == nil)30 break;31 if(w->pid == pid){32 if(w->msg[0] != '\0'){33 free(w);34 return -1;35 }36 free(w);37 return 0;38 }39 }40 }41 return 0;42 }