shithub: gefs

Download patch

ref: aff2fa032ba3feb3f2dd3725a0cf71a6da533846
parent: 73ecfeda6df68dc89a93e17799cad0de3d786497
author: Ori Bernstein <ori@eigenstate.org>
date: Thu Nov 30 19:48:50 EST 2023

users: make reloading the user file safer

we shouldn't clobber the ids until after we fully load the
user file successfully.

--- a/user.c
+++ b/user.c
@@ -135,10 +135,6 @@
 		snprint(u->name, sizeof(u->name), "%s", f);
 		u->memb = nil;
 		u->nmemb = 0;
-		if(strcmp(u->name, "none") == 0)
-			noneid = u->id;
-		if(strcmp(u->name, "adm") == 0)
-			admid = u->id;
 		i++;
 	}
 	nusers = i;
@@ -195,8 +191,6 @@
 			}
 			grp = g;
 			grp[ngrp++] = u->id;
-			if(strcmp(u->name, "nogroup") == 0)
-				nogroupid = u->id;
 		}
 		users[i].memb = grp;
 		users[i].nmemb = ngrp;
@@ -228,6 +222,7 @@
 	char *s, *e;
 	vlong len;
 	Qid q;
+	User *u;
 
 	if(walk1(t, -1, "", &q, &len) == -1)
 		error(Efs);
@@ -240,11 +235,20 @@
 	s = slurp(t, q.path, len);
 	e = parseusers(fd, s);
 	if(e != nil){
-		if(fs->users != nil)
+		if(fs->users != nil){
+			fprint(2, "load users: %s\n", e);
+			fprint(2, "keeping old table\n");
 			error(e);
+		}
 		fprint(2, "user table broken: %s\n", e);
 		fprint(2, "\tfalling back to default\n");
 		parseusers(fd, "-1:adm::\n0:none::\n");
 	}
+	if((u = name2user("none")) != nil)
+		noneid = u->id;
+	if((u = name2user("adm")) != nil)
+		admid = u->id;
+	if((u = name2user("nogroup")) != nil)
+		nogroupid = u->id;
 	free(s);
 }