Blame


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>
4 be8b315d 2004-06-17 devnull
5 be8b315d 2004-06-17 devnull int
6 be8b315d 2004-06-17 devnull auth_getkey(char *params)
7 be8b315d 2004-06-17 devnull {
8 be8b315d 2004-06-17 devnull char *name;
9 be8b315d 2004-06-17 devnull Dir *d;
10 be8b315d 2004-06-17 devnull int pid;
11 be8b315d 2004-06-17 devnull Waitmsg *w;
12 be8b315d 2004-06-17 devnull
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);
19 be8b315d 2004-06-17 devnull }
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;
23 be8b315d 2004-06-17 devnull }
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;
27 be8b315d 2004-06-17 devnull }
28 be8b315d 2004-06-17 devnull switch(pid = fork()){
29 be8b315d 2004-06-17 devnull case -1:
30 be8b315d 2004-06-17 devnull werrstr("can't fork for %s: %r", name);
31 be8b315d 2004-06-17 devnull return -1;
32 be8b315d 2004-06-17 devnull case 0:
33 be8b315d 2004-06-17 devnull execl(name, "getkey", "-g", params, nil);
34 be8b315d 2004-06-17 devnull exits(0);
35 be8b315d 2004-06-17 devnull default:
36 be8b315d 2004-06-17 devnull for(;;){
37 be8b315d 2004-06-17 devnull w = wait();
38 be8b315d 2004-06-17 devnull if(w == nil)
39 be8b315d 2004-06-17 devnull break;
40 be8b315d 2004-06-17 devnull if(w->pid == pid){
41 be8b315d 2004-06-17 devnull if(w->msg[0] != '\0'){
42 be8b315d 2004-06-17 devnull free(w);
43 be8b315d 2004-06-17 devnull return -1;
44 be8b315d 2004-06-17 devnull }
45 be8b315d 2004-06-17 devnull free(w);
46 be8b315d 2004-06-17 devnull return 0;
47 be8b315d 2004-06-17 devnull }
48 be8b315d 2004-06-17 devnull }
49 be8b315d 2004-06-17 devnull }
50 be8b315d 2004-06-17 devnull return 0;
51 be8b315d 2004-06-17 devnull }