1*15529Skarels # include	"../hdr/defines.h"
2*15529Skarels 
3*15529Skarels SCCSID(@(#)permiss.c	1.1);
4*15529Skarels 
5*15529Skarels finduser(pkt)
6*15529Skarels register struct packet *pkt;
7*15529Skarels {
8*15529Skarels 	register char *p;
9*15529Skarels 	register int i;
10*15529Skarels 	char *user;
11*15529Skarels 	char *strend();
12*15529Skarels 	char userid[6];
13*15529Skarels 	int none;
14*15529Skarels 
15*15529Skarels 	none = 1;
16*15529Skarels 	user = logname();
17*15529Skarels 	sprintf(userid,"%d",getuid() & 0377);
18*15529Skarels 	while ((p = getline(pkt)) != NULL && *p != CTLCHAR) {
19*15529Skarels 		none = 0;
20*15529Skarels 		repl(p,'\n','\0');	/* this is done for equal test below */
21*15529Skarels 		if (!pkt->p_user)
22*15529Skarels 			if (equal(user,p) || equal(userid,p))
23*15529Skarels 				pkt->p_user = 1;
24*15529Skarels 		*(strend(p)) = '\n';	/* repl \0 end of line w/ \n again */
25*15529Skarels 	}
26*15529Skarels 	if (none)
27*15529Skarels 		pkt->p_user = 1;
28*15529Skarels 	if (p == NULL || p[1] != EUSERNAM)
29*15529Skarels 		fmterr(pkt);
30*15529Skarels }
31*15529Skarels 
32*15529Skarels 
33*15529Skarels char	*Sflags[NFLAGS];
34*15529Skarels 
35*15529Skarels doflags(pkt)
36*15529Skarels struct packet *pkt;
37*15529Skarels {
38*15529Skarels 	register char *p;
39*15529Skarels 	register int k;
40*15529Skarels 
41*15529Skarels 	for (k = 0; k < NFLAGS; k++)
42*15529Skarels 		Sflags[k] = 0;
43*15529Skarels 	while ((p = getline(pkt)) != NULL && *p++ == CTLCHAR && *p++ == FLAG) {
44*15529Skarels 		NONBLANK(p);
45*15529Skarels 		k = *p++ - 'a';
46*15529Skarels 		NONBLANK(p);
47*15529Skarels 		Sflags[k] = alloc(size(p));
48*15529Skarels 		copy(p,Sflags[k]);
49*15529Skarels 		for (p = Sflags[k]; *p++ != '\n'; )
50*15529Skarels 			;
51*15529Skarels 		*--p = 0;
52*15529Skarels 	}
53*15529Skarels }
54*15529Skarels 
55*15529Skarels 
56*15529Skarels permiss(pkt)
57*15529Skarels register struct packet *pkt;
58*15529Skarels {
59*15529Skarels 	extern char *Sflags[];
60*15529Skarels 	register char *p;
61*15529Skarels 	register int n;
62*15529Skarels 
63*15529Skarels 	if (!pkt->p_user)
64*15529Skarels 		fatal("not authorized to make deltas (co14)");
65*15529Skarels 	if (p = Sflags[FLORFLAG - 'a']) {
66*15529Skarels 		if (((unsigned)pkt->p_reqsid.s_rel) < (n = patoi(p)))
67*15529Skarels 			fatal(sprintf(Error,"release %u < %u (floor) (co15)",
68*15529Skarels 				pkt->p_reqsid.s_rel,n));
69*15529Skarels 	}
70*15529Skarels 	if (p = Sflags[CEILFLAG - 'a'])
71*15529Skarels 		if (((unsigned)pkt->p_reqsid.s_rel) > (n = patoi(p)))
72*15529Skarels 			fatal(sprintf(Error,"release %u > %u (ceiling) (co16)",
73*15529Skarels 				pkt->p_reqsid.s_rel,n));
74*15529Skarels }
75