1*7dd7cddfSDavid du Colombier #include <u.h> 2*7dd7cddfSDavid du Colombier #include <libc.h> 3*7dd7cddfSDavid du Colombier #include <auth.h> 4*7dd7cddfSDavid du Colombier #include <fcall.h> 5*7dd7cddfSDavid du Colombier #include <thread.h> 6*7dd7cddfSDavid du Colombier #include <9p.h> 7*7dd7cddfSDavid du Colombier 8*7dd7cddfSDavid du Colombier /* 9*7dd7cddfSDavid du Colombier * simplistic permission checking. assume that 10*7dd7cddfSDavid du Colombier * each user is the leader of her own group. 11*7dd7cddfSDavid du Colombier */ 12*7dd7cddfSDavid du Colombier int hasperm(File * f,char * uid,int p)13*7dd7cddfSDavid du Colombierhasperm(File *f, char *uid, int p) 14*7dd7cddfSDavid du Colombier { 15*7dd7cddfSDavid du Colombier int m; 16*7dd7cddfSDavid du Colombier 17*7dd7cddfSDavid du Colombier m = f->mode & 7; /* other */ 18*7dd7cddfSDavid du Colombier if((p & m) == p) 19*7dd7cddfSDavid du Colombier return 1; 20*7dd7cddfSDavid du Colombier 21*7dd7cddfSDavid du Colombier if(strcmp(f->uid, uid) == 0) { 22*7dd7cddfSDavid du Colombier m |= (f->mode>>6) & 7; 23*7dd7cddfSDavid du Colombier if((p & m) == p) 24*7dd7cddfSDavid du Colombier return 1; 25*7dd7cddfSDavid du Colombier } 26*7dd7cddfSDavid du Colombier 27*7dd7cddfSDavid du Colombier if(strcmp(f->gid, uid) == 0) { 28*7dd7cddfSDavid du Colombier m |= (f->mode>>3) & 7; 29*7dd7cddfSDavid du Colombier if((p & m) == p) 30*7dd7cddfSDavid du Colombier return 1; 31*7dd7cddfSDavid du Colombier } 32*7dd7cddfSDavid du Colombier 33*7dd7cddfSDavid du Colombier return 0; 34*7dd7cddfSDavid du Colombier } 35