1*28942eadSforsyth #include "logfsos.h"
237da2899SCharles.Forsyth #include "logfs.h"
337da2899SCharles.Forsyth #include "local.h"
437da2899SCharles.Forsyth
537da2899SCharles.Forsyth int
logfsuserpermcheck(LogfsServer * s,Entry * e,Fid * f,ulong permmask)637da2899SCharles.Forsyth logfsuserpermcheck(LogfsServer *s, Entry *e, Fid *f, ulong permmask)
737da2899SCharles.Forsyth {
837da2899SCharles.Forsyth if(s->openflags & LogfsOpenFlagNoPerm)
937da2899SCharles.Forsyth return 1;
1037da2899SCharles.Forsyth if((e->perm & permmask) == permmask)
1137da2899SCharles.Forsyth /* the whole world can do this */
1237da2899SCharles.Forsyth return 1;
1337da2899SCharles.Forsyth if(((e->perm >> 6) & permmask) == permmask) {
1437da2899SCharles.Forsyth /* maybe we're the owner */
1537da2899SCharles.Forsyth char *uname = logfsisfindnamefromid(s->is, e->uid);
1637da2899SCharles.Forsyth if(uname == f->uname)
1737da2899SCharles.Forsyth return 1;
1837da2899SCharles.Forsyth }
1937da2899SCharles.Forsyth if(((e->perm >> 3) & permmask) == permmask) {
2037da2899SCharles.Forsyth /* maybe we're in the group */
2137da2899SCharles.Forsyth Group *g = logfsisfindgroupfromid(s->is, e->gid);
2237da2899SCharles.Forsyth return g && logfsisgroupunameismember(s->is, g, f->uname);
2337da2899SCharles.Forsyth }
2437da2899SCharles.Forsyth return 0;
2537da2899SCharles.Forsyth }
26