#include <u.h> | |
#include <libc.h> | |
#include <auth.h> | |
/* | |
* become the authenticated user | |
*/ | |
int | |
auth_chuid(AuthInfo *ai, char *ns) | |
{ | |
int rv, fd; | |
if(ai == nil || ai->cap == nil){ | |
werrstr("no capability"); | |
return -1; | |
} | |
/* change uid */ | |
fd = open("#¤/capuse", OWRITE); | |
if(fd < 0){ | |
werrstr("opening #¤/capuse: %r"); | |
return -1; | |
} | |
rv = write(fd, ai->cap, strlen(ai->cap)); | |
close(fd); | |
if(rv < 0){ | |
werrstr("writing %s to #¤/capuse: %r", ai->cap); | |
return -1; | |
} | |
/* get a link to factotum as new user */ | |
fd = open("/srv/factotum", ORDWR); | |
if(fd >= 0) | |
mount(fd, -1, "/mnt", MREPL, ""); | |
/* set up new namespace */ | |
return newns(ai->cuid, ns); | |
} |