Blame


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