[2599] | 1 | from afs._util cimport * |
---|
| 2 | from afs._util import pyafs_error |
---|
| 3 | |
---|
| 4 | cdef extern from "afs/prs_fs.h": |
---|
| 5 | enum: |
---|
| 6 | PRSFS_READ, PRSFS_WRITE, PRSFS_INSERT, PRSFS_LOOKUP, |
---|
| 7 | PRSFS_DELETE, PRSFS_LOCK, PRSFS_ADMINISTER, |
---|
| 8 | PRSFS_USR0, PRSFS_USR1, PRSFS_USR2, PRSFS_USR2, PRSFS_USR3, |
---|
| 9 | PRSFS_USR4, PRSFS_USR5, PRSFS_USR6, PRSFS_USR7 |
---|
| 10 | |
---|
| 11 | # This is defined in afs/afs.h, but I can't figure how to include the |
---|
| 12 | # header. Also, venus/fs.c redefines the struct, so why not! |
---|
| 13 | cdef struct vcxstat2: |
---|
| 14 | afs_int32 callerAccess |
---|
| 15 | afs_int32 cbExpires |
---|
| 16 | afs_int32 anyAccess |
---|
| 17 | char mvstat |
---|
| 18 | |
---|
| 19 | READ = PRSFS_READ |
---|
| 20 | WRITE = PRSFS_WRITE |
---|
| 21 | INSERT = PRSFS_INSERT |
---|
| 22 | LOOKUP = PRSFS_LOOKUP |
---|
| 23 | DELETE = PRSFS_DELETE |
---|
| 24 | LOCK = PRSFS_LOCK |
---|
| 25 | ADMINISTER = PRSFS_ADMINISTER |
---|
| 26 | USR0 = PRSFS_USR0 |
---|
| 27 | USR1 = PRSFS_USR1 |
---|
| 28 | USR2 = PRSFS_USR2 |
---|
| 29 | USR3 = PRSFS_USR3 |
---|
| 30 | USR4 = PRSFS_USR4 |
---|
| 31 | USR5 = PRSFS_USR5 |
---|
| 32 | USR6 = PRSFS_USR6 |
---|
| 33 | USR7 = PRSFS_USR7 |
---|
| 34 | |
---|
| 35 | DEF MAXSIZE = 2048 |
---|
| 36 | |
---|
| 37 | def getAcl(char* dir, int follow=1): |
---|
| 38 | cdef char space[MAXSIZE] |
---|
| 39 | pioctl_read(dir, VIOCGETAL, space, MAXSIZE, follow) |
---|
| 40 | return space |
---|
| 41 | |
---|
| 42 | def getCallerAccess(char *dir, int follow=1): |
---|
| 43 | cdef vcxstat2 stat |
---|
| 44 | pioctl_read(dir, VIOC_GETVCXSTATUS2, <void*>&stat, sizeof(vcxstat2), follow) |
---|
| 45 | return stat.callerAccess |
---|
| 46 | |
---|
| 47 | def setAcl(char* dir, char* acl, int follow=1): |
---|
| 48 | pioctl_write(dir, VIOCSETAL, acl, follow) |
---|