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 * become the authenticated user
9 be8b315d 2004-06-17 devnull auth_chuid(AuthInfo *ai, char *ns)
11 be8b315d 2004-06-17 devnull int rv, fd;
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;
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;
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;
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, "");
36 be8b315d 2004-06-17 devnull /* set up new namespace */
37 be8b315d 2004-06-17 devnull return newns(ai->cuid, ns);