M port/auth.c => port/auth.c +2 -1
@@ 34,7 34,7 @@ struct
Crypt *free;
} cryptalloc;
-char eve[NAMELEN] = "bootes";
+char eve[NAMELEN];
char evekey[DESKEYLEN];
char hostdomain[DOMLEN];
@@ 595,6 595,7 @@ hostownerwrite(char *a, int n)
strncpy(buf, a, n);
if(buf[0] == 0)
error(Ebadarg);
+ renameuser(eve, buf);
memmove(eve, buf, NAMELEN);
memmove(up->user, buf, NAMELEN);
up->basepri = PriNormal;
M port/portfns.h => port/portfns.h +1 -0
@@ 211,6 211,7 @@ int readnum(ulong, char*, ulong, ulong, int);
int readstr(ulong, char*, ulong, char*);
void ready(Proc*);
void relocateseg(Segment*, ulong);
+void renameuser(char*, char*);
void resched(char*);
void resetscsi(void);
void resrcwait(char*);
M port/proc.c => port/proc.c +15 -0
@@ 938,3 938,18 @@ killbig(void)
kp->procctl = Proc_exitme;
postnote(kp, 1, "killed: proc too big", NExit);
}
+
+/*
+ * change ownership to 'new' of all processes owned by 'old'. Used when
+ * eve changes.
+ */
+void
+renameuser(char *old, char *new)
+{
+ Proc *p, *ep;
+
+ ep = procalloc.arena+conf.nproc;
+ for(p = procalloc.arena; p < ep; p++)
+ if(strcmp(old, p->user) == 0)
+ memmove(p->user, new, NAMELEN);
+}