multiple group stuff; purge old crud (presumably by Sam 5/85, ci'ed by Jay)
authorJay Lepreau <lepreau@ucbvax.Berkeley.EDU>
Mon, 16 Feb 1987 08:31:18 +0000 (00:31 -0800)
committerJay Lepreau <lepreau@ucbvax.Berkeley.EDU>
Mon, 16 Feb 1987 08:31:18 +0000 (00:31 -0800)
SCCS-vsn: local/sccscmds/sccscmds.2/com/permiss.c 1.2
SCCS-vsn: local/sccscmds/sccscmds.ok/com/permiss.c 1.2

usr/src/local/sccscmds/sccscmds.2/com/permiss.c
usr/src/local/sccscmds/sccscmds.ok/com/permiss.c

index 3b9be71..5451fa1 100644 (file)
@@ -1,6 +1,7 @@
+#include <sys/param.h>
 # include      "../hdr/defines.h"
 
 # include      "../hdr/defines.h"
 
-SCCSID(@(#)permiss.c   1.2);
+SCCSID(@(#)permiss.c   1.2     %G%);
 
 finduser(pkt)
 register struct packet *pkt;
 
 finduser(pkt)
 register struct packet *pkt;
@@ -8,20 +9,30 @@ register struct packet *pkt;
        register char *p;
        register int i;
        char *user;
        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();
        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 */
        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;
                                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;
        }
        if (none)
                pkt->p_user = 1;
index 3b9be71..5451fa1 100644 (file)
@@ -1,6 +1,7 @@
+#include <sys/param.h>
 # include      "../hdr/defines.h"
 
 # include      "../hdr/defines.h"
 
-SCCSID(@(#)permiss.c   1.2);
+SCCSID(@(#)permiss.c   1.2     %G%);
 
 finduser(pkt)
 register struct packet *pkt;
 
 finduser(pkt)
 register struct packet *pkt;
@@ -8,20 +9,30 @@ register struct packet *pkt;
        register char *p;
        register int i;
        char *user;
        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();
        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 */
        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;
                                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;
        }
        if (none)
                pkt->p_user = 1;