130494Slepreau #include <sys/param.h>
215529Skarels # include "../hdr/defines.h"
315529Skarels
4*33424Sbostic SCCSID(@(#)permiss.c 1.3 02/02/88);
515529Skarels
finduser(pkt)615529Skarels finduser(pkt)
715529Skarels register struct packet *pkt;
815529Skarels {
915529Skarels register char *p;
1015529Skarels register int i;
1115529Skarels char *user;
1230494Slepreau char *index();
1330494Slepreau int gid, ngroups = NGROUPS, groups[NGROUPS];
1415529Skarels int none;
1515529Skarels
1615529Skarels none = 1;
1715529Skarels user = logname();
1830494Slepreau if (getgroups(&ngroups, groups) < 0) {
1930494Slepreau perror("getgroups");
2030494Slepreau ngroups = 0;
2130494Slepreau }
2215529Skarels while ((p = getline(pkt)) != NULL && *p != CTLCHAR) {
2315529Skarels none = 0;
2415529Skarels repl(p,'\n','\0'); /* this is done for equal test below */
2530494Slepreau if (!pkt->p_user) {
2630494Slepreau if (equal(user,p))
2715529Skarels pkt->p_user = 1;
2830494Slepreau else if (gid = atoi(p))
2930494Slepreau for (i = 0; i < ngroups; i++)
3030494Slepreau if (gid == groups[i]) {
3130494Slepreau pkt->p_user = 1;
3230494Slepreau break;
3330494Slepreau }
3430494Slepreau }
3530494Slepreau *(index(p,'\0')) = '\n';/* repl \0 end of line w/ \n again */
3615529Skarels }
3715529Skarels if (none)
3815529Skarels pkt->p_user = 1;
3915529Skarels if (p == NULL || p[1] != EUSERNAM)
4015529Skarels fmterr(pkt);
4115529Skarels }
4215529Skarels
4315529Skarels
4415529Skarels char *Sflags[NFLAGS];
4515529Skarels
4615529Skarels doflags(pkt)
4715529Skarels struct packet *pkt;
4815529Skarels {
4915529Skarels register char *p;
5015529Skarels register int k;
5115529Skarels
5215529Skarels for (k = 0; k < NFLAGS; k++)
5315529Skarels Sflags[k] = 0;
5415529Skarels while ((p = getline(pkt)) != NULL && *p++ == CTLCHAR && *p++ == FLAG) {
5515529Skarels NONBLANK(p);
5615529Skarels k = *p++ - 'a';
5715529Skarels NONBLANK(p);
5815529Skarels Sflags[k] = alloc(size(p));
5915529Skarels copy(p,Sflags[k]);
6015529Skarels for (p = Sflags[k]; *p++ != '\n'; )
6115529Skarels ;
6215529Skarels *--p = 0;
6315529Skarels }
6415529Skarels }
6515529Skarels
6615529Skarels
permiss(pkt)6715529Skarels permiss(pkt)
6815529Skarels register struct packet *pkt;
6915529Skarels {
7015529Skarels extern char *Sflags[];
7115529Skarels register char *p;
7215529Skarels register int n;
7315529Skarels
7415529Skarels if (!pkt->p_user)
7515529Skarels fatal("not authorized to make deltas (co14)");
7615529Skarels if (p = Sflags[FLORFLAG - 'a']) {
77*33424Sbostic if (((unsigned)pkt->p_reqsid.s_rel) < (n = patoi(p))) {
78*33424Sbostic sprintf(Error,"release %u < %u (floor) (co15)",pkt->p_reqsid.s_rel,n);
79*33424Sbostic fatal(Error);
80*33424Sbostic }
8115529Skarels }
8215529Skarels if (p = Sflags[CEILFLAG - 'a'])
83*33424Sbostic if (((unsigned)pkt->p_reqsid.s_rel) > (n = patoi(p))) {
84*33424Sbostic sprintf(Error,"release %u > %u (ceiling) (co16)",pkt->p_reqsid.s_rel,n);
85*33424Sbostic fatal(Error);
86*33424Sbostic }
8715529Skarels }
88