diff --git a/sys/src/libauth/procsetuser.c b/sys/src/libauth/procsetuser.c index f9cac306b..f3aad38d8 100644 --- a/sys/src/libauth/procsetuser.c +++ b/sys/src/libauth/procsetuser.c @@ -5,16 +5,30 @@ int procsetuser(char *user) { - int fd, n; + char name[32]; + Dir dir; - fd = open("#c/user", OWRITE|OCEXEC); - if(fd < 0) - return -1; - n = strlen(user); - if(write(fd, user, n) != n){ + nulldir(&dir); + dir.uid = user; + snprint(name, sizeof(name), "/proc/%lud/ctl", (ulong)getpid()); + if(dirwstat(name, &dir) < 0){ + /* + * this is backwards compatibility code as + * devproc initially didnt allow changing + * the user to none. + */ + int fd; + + if(strcmp(user, "none") != 0) + return -1; + fd = open("#c/user", OWRITE|OCEXEC); + if(fd < 0) + return -1; + if(write(fd, "none", 4) != 4){ + close(fd); + return -1; + } close(fd); - return -1; } - close(fd); return 0; }