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