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