Commit Diff


commit - d93cc14ecee8fbb0dc0fc746713aba7ee0979c4c
commit + 63fcc2bc3c1b37227cc9f5b9b8ca45ce091a1477
blob - 57f46489e70eab780e43f5a2328f4d1ddeab7a93
blob + 517dc773469820d5ca1f819a534c935120525e24
--- src/lib9/_p9dir.c
+++ src/lib9/_p9dir.c
@@ -77,6 +77,7 @@ disksize(int fd, int dev)
 #define _HAVESTGEN
 #endif
 
+int _p9usepwlibrary = 1;
 /*
  * Caching the last group and passwd looked up is
  * a significant win (stupidly enough) on most systems.
@@ -123,11 +124,11 @@ _p9dir(struct stat *lst, struct stat *st, char *name, 
 	/* user */
 	if(p && st->st_uid == uid && p->pw_uid == uid)
 		;
-	else{
+	else if(_p9usepwlibrary){
 		p = getpwuid(st->st_uid);
 		uid = st->st_uid;
 	}
-	if(p == nil){
+	if(p == nil || st->st_uid != uid || p->pw_uid != uid){
 		snprint(tmp, sizeof tmp, "%d", (int)st->st_uid);
 		s = tmp;
 	}else
@@ -146,11 +147,11 @@ _p9dir(struct stat *lst, struct stat *st, char *name, 
 	/* group */
 	if(g && st->st_gid == gid && g->gr_gid == gid)
 		;
-	else{
+	else if(_p9usepwlibrary){
 		g = getgrgid(st->st_gid);
 		gid = st->st_gid;
 	}
-	if(g == nil){
+	if(g == nil || st->st_gid != gid || g->gr_gid != gid){
 		snprint(tmp, sizeof tmp, "%d", (int)st->st_gid);
 		s = tmp;
 	}else