xref: /inferno-os/liblogfs/perm.c (revision d0e1d143ef6f03c75c008c7ec648859dd260cbab)
1  #include "lib9.h"
2  #include "logfs.h"
3  #include "local.h"
4  
5  int
6  logfsuserpermcheck(LogfsServer *s, Entry *e, Fid *f, ulong permmask)
7  {
8  	if(s->openflags & LogfsOpenFlagNoPerm)
9  		return 1;
10  	if((e->perm & permmask) == permmask)
11  		/* the whole world can do this */
12  		return 1;
13  	if(((e->perm >> 6) & permmask) == permmask) {
14  		/* maybe we're the owner */
15  		char *uname = logfsisfindnamefromid(s->is, e->uid);
16  		if(uname == f->uname)
17  			return 1;
18  	}
19  	if(((e->perm >> 3) & permmask) == permmask) {
20  		/* maybe we're in the group */
21  		Group *g = logfsisfindgroupfromid(s->is, e->gid);
22  		return g && logfsisgroupunameismember(s->is, g, f->uname);
23  	}
24  	return 0;
25  }
26