uid.c 517 B

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