From 743e47ee49bc5e46e489aaf0c7f4890b0b86d200 Mon Sep 17 00:00:00 2001 From: Jay Lepreau Date: Mon, 16 Feb 1987 00:31:18 -0800 Subject: [PATCH] multiple group stuff; purge old crud (presumably by Sam 5/85, ci'ed by Jay) SCCS-vsn: local/sccscmds/sccscmds.2/com/permiss.c 1.2 SCCS-vsn: local/sccscmds/sccscmds.ok/com/permiss.c 1.2 --- .../local/sccscmds/sccscmds.2/com/permiss.c | 25 +++++++++++++------ .../local/sccscmds/sccscmds.ok/com/permiss.c | 25 +++++++++++++------ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/usr/src/local/sccscmds/sccscmds.2/com/permiss.c b/usr/src/local/sccscmds/sccscmds.2/com/permiss.c index 3b9be71e53..5451fa1ea4 100644 --- a/usr/src/local/sccscmds/sccscmds.2/com/permiss.c +++ b/usr/src/local/sccscmds/sccscmds.2/com/permiss.c @@ -1,6 +1,7 @@ +#include # include "../hdr/defines.h" -SCCSID(@(#)permiss.c 1.2); +SCCSID(@(#)permiss.c 1.2 %G%); finduser(pkt) register struct packet *pkt; @@ -8,20 +9,30 @@ register struct packet *pkt; register char *p; register int i; char *user; - char *strend(); - char userid[6]; + char *index(); + int gid, ngroups = NGROUPS, groups[NGROUPS]; int none; none = 1; user = logname(); - sprintf(userid,"%d",getuid() & 0377); + if (getgroups(&ngroups, groups) < 0) { + perror("getgroups"); + ngroups = 0; + } while ((p = getline(pkt)) != NULL && *p != CTLCHAR) { none = 0; repl(p,'\n','\0'); /* this is done for equal test below */ - if (!pkt->p_user) - if (equal(user,p) || equal(userid,p)) + if (!pkt->p_user) { + if (equal(user,p)) pkt->p_user = 1; - *(strend(p)) = '\n'; /* repl \0 end of line w/ \n again */ + else if (gid = atoi(p)) + for (i = 0; i < ngroups; i++) + if (gid == groups[i]) { + pkt->p_user = 1; + break; + } + } + *(index(p,'\0')) = '\n';/* repl \0 end of line w/ \n again */ } if (none) pkt->p_user = 1; diff --git a/usr/src/local/sccscmds/sccscmds.ok/com/permiss.c b/usr/src/local/sccscmds/sccscmds.ok/com/permiss.c index 3b9be71e53..5451fa1ea4 100644 --- a/usr/src/local/sccscmds/sccscmds.ok/com/permiss.c +++ b/usr/src/local/sccscmds/sccscmds.ok/com/permiss.c @@ -1,6 +1,7 @@ +#include # include "../hdr/defines.h" -SCCSID(@(#)permiss.c 1.2); +SCCSID(@(#)permiss.c 1.2 %G%); finduser(pkt) register struct packet *pkt; @@ -8,20 +9,30 @@ register struct packet *pkt; register char *p; register int i; char *user; - char *strend(); - char userid[6]; + char *index(); + int gid, ngroups = NGROUPS, groups[NGROUPS]; int none; none = 1; user = logname(); - sprintf(userid,"%d",getuid() & 0377); + if (getgroups(&ngroups, groups) < 0) { + perror("getgroups"); + ngroups = 0; + } while ((p = getline(pkt)) != NULL && *p != CTLCHAR) { none = 0; repl(p,'\n','\0'); /* this is done for equal test below */ - if (!pkt->p_user) - if (equal(user,p) || equal(userid,p)) + if (!pkt->p_user) { + if (equal(user,p)) pkt->p_user = 1; - *(strend(p)) = '\n'; /* repl \0 end of line w/ \n again */ + else if (gid = atoi(p)) + for (i = 0; i < ngroups; i++) + if (gid == groups[i]) { + pkt->p_user = 1; + break; + } + } + *(index(p,'\0')) = '\n';/* repl \0 end of line w/ \n again */ } if (none) pkt->p_user = 1; -- 2.20.1