1 be8b315d 2004-06-17 devnull #include <u.h>
2 be8b315d 2004-06-17 devnull #include <libc.h>
3 be8b315d 2004-06-17 devnull #include <auth.h>
6 be8b315d 2004-06-17 devnull auth_getkey(char *params)
8 be8b315d 2004-06-17 devnull char *name;
11 be8b315d 2004-06-17 devnull Waitmsg *w;
13 be8b315d 2004-06-17 devnull /* start /factotum to query for a key */
14 be8b315d 2004-06-17 devnull name = "/factotum";
15 be8b315d 2004-06-17 devnull d = dirstat(name);
16 be8b315d 2004-06-17 devnull if(d == nil){
17 be8b315d 2004-06-17 devnull name = "/boot/factotum";
18 be8b315d 2004-06-17 devnull d = dirstat(name);
20 be8b315d 2004-06-17 devnull if(d == nil){
21 be8b315d 2004-06-17 devnull werrstr("auth_getkey: no /factotum or /boot/factotum: didn't get key %s", params);
22 be8b315d 2004-06-17 devnull return -1;
24 be8b315d 2004-06-17 devnull if(0) if(d->type != '/'){
25 be8b315d 2004-06-17 devnull werrstr("auth_getkey: /factotum may be bad: didn't get key %s", params);
26 be8b315d 2004-06-17 devnull return -1;
28 be8b315d 2004-06-17 devnull switch(pid = fork()){
30 be8b315d 2004-06-17 devnull werrstr("can't fork for %s: %r", name);
31 be8b315d 2004-06-17 devnull return -1;
33 be8b315d 2004-06-17 devnull execl(name, "getkey", "-g", params, nil);
34 be8b315d 2004-06-17 devnull exits(0);
37 be8b315d 2004-06-17 devnull w = wait();
38 be8b315d 2004-06-17 devnull if(w == nil)
40 be8b315d 2004-06-17 devnull if(w->pid == pid){
41 be8b315d 2004-06-17 devnull if(w->msg[0] != '\0'){
43 be8b315d 2004-06-17 devnull return -1;
46 be8b315d 2004-06-17 devnull return 0;
50 be8b315d 2004-06-17 devnull return 0;