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 /*
6 be8b315d 2004-06-17 devnull * become the authenticated user
7 be8b315d 2004-06-17 devnull */
8 be8b315d 2004-06-17 devnull int
9 be8b315d 2004-06-17 devnull auth_chuid(AuthInfo *ai, char *ns)
10 be8b315d 2004-06-17 devnull {
11 be8b315d 2004-06-17 devnull int rv, fd;
12 be8b315d 2004-06-17 devnull
13 be8b315d 2004-06-17 devnull if(ai == nil || ai->cap == nil){
14 be8b315d 2004-06-17 devnull werrstr("no capability");
15 be8b315d 2004-06-17 devnull return -1;
16 be8b315d 2004-06-17 devnull }
17 be8b315d 2004-06-17 devnull
18 be8b315d 2004-06-17 devnull /* change uid */
19 be8b315d 2004-06-17 devnull fd = open("#¤/capuse", OWRITE);
20 be8b315d 2004-06-17 devnull if(fd < 0){
21 be8b315d 2004-06-17 devnull werrstr("opening #¤/capuse: %r");
22 be8b315d 2004-06-17 devnull return -1;
23 be8b315d 2004-06-17 devnull }
24 be8b315d 2004-06-17 devnull rv = write(fd, ai->cap, strlen(ai->cap));
25 be8b315d 2004-06-17 devnull close(fd);
26 be8b315d 2004-06-17 devnull if(rv < 0){
27 be8b315d 2004-06-17 devnull werrstr("writing %s to #¤/capuse: %r", ai->cap);
28 be8b315d 2004-06-17 devnull return -1;
29 be8b315d 2004-06-17 devnull }
30 be8b315d 2004-06-17 devnull
31 be8b315d 2004-06-17 devnull /* get a link to factotum as new user */
32 be8b315d 2004-06-17 devnull fd = open("/srv/factotum", ORDWR);
33 be8b315d 2004-06-17 devnull if(fd >= 0)
34 be8b315d 2004-06-17 devnull mount(fd, -1, "/mnt", MREPL, "");
35 be8b315d 2004-06-17 devnull
36 be8b315d 2004-06-17 devnull /* set up new namespace */
37 be8b315d 2004-06-17 devnull return newns(ai->cuid, ns);
38 be8b315d 2004-06-17 devnull }