xref: /plan9/sys/src/cmd/upas/common/become.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*9a747e4fSDavid du Colombier #include "common.h"
2*9a747e4fSDavid du Colombier #include <auth.h>
3*9a747e4fSDavid du Colombier #include <ndb.h>
4*9a747e4fSDavid du Colombier 
5*9a747e4fSDavid du Colombier /*
6*9a747e4fSDavid du Colombier  *  become powerless user
7*9a747e4fSDavid du Colombier  */
8*9a747e4fSDavid du Colombier int
become(char ** cmd,char * who)9*9a747e4fSDavid du Colombier become(char **cmd, char *who)
10*9a747e4fSDavid du Colombier {
11*9a747e4fSDavid du Colombier 	int fd;
12*9a747e4fSDavid du Colombier 
13*9a747e4fSDavid du Colombier 	USED(cmd);
14*9a747e4fSDavid du Colombier 	if(strcmp(who, "none") == 0) {
15*9a747e4fSDavid du Colombier 		fd = open("#c/user", OWRITE);
16*9a747e4fSDavid du Colombier 		if(fd < 0 || write(fd, "none", strlen("none")) < 0) {
17*9a747e4fSDavid du Colombier 			werrstr("can't become none");
18*9a747e4fSDavid du Colombier 			return -1;
19*9a747e4fSDavid du Colombier 		}
20*9a747e4fSDavid du Colombier 		close(fd);
21*9a747e4fSDavid du Colombier 		if(newns("none", 0)) {
22*9a747e4fSDavid du Colombier 			werrstr("can't set new namespace");
23*9a747e4fSDavid du Colombier 			return -1;
24*9a747e4fSDavid du Colombier 		}
25*9a747e4fSDavid du Colombier 	}
26*9a747e4fSDavid du Colombier 	return 0;
27*9a747e4fSDavid du Colombier }
28*9a747e4fSDavid du Colombier 
29