Home | History | Annotate | Download | only in linux
      1 /*
      2  * File: linux/nfsacl.h
      3  *
      4  * (C) 2003 Andreas Gruenbacher <agruen (at) suse.de>
      5  */
      6 #ifndef __LINUX_NFSACL_H
      7 #define __LINUX_NFSACL_H
      8 
      9 #define NFS_ACL_PROGRAM	100227
     10 
     11 #define ACLPROC2_GETACL		1
     12 #define ACLPROC2_SETACL		2
     13 #define ACLPROC2_GETATTR	3
     14 #define ACLPROC2_ACCESS		4
     15 
     16 #define ACLPROC3_GETACL		1
     17 #define ACLPROC3_SETACL		2
     18 
     19 
     20 /* Flags for the getacl/setacl mode */
     21 #define NFS_ACL			0x0001
     22 #define NFS_ACLCNT		0x0002
     23 #define NFS_DFACL		0x0004
     24 #define NFS_DFACLCNT		0x0008
     25 
     26 /* Flag for Default ACL entries */
     27 #define NFS_ACL_DEFAULT		0x1000
     28 
     29 #ifdef __KERNEL__
     30 
     31 #include <linux/posix_acl.h>
     32 
     33 /* Maximum number of ACL entries over NFS */
     34 #define NFS_ACL_MAX_ENTRIES	1024
     35 
     36 #define NFSACL_MAXWORDS		(2*(2+3*NFS_ACL_MAX_ENTRIES))
     37 #define NFSACL_MAXPAGES		((2*(8+12*NFS_ACL_MAX_ENTRIES) + PAGE_SIZE-1) \
     38 				 >> PAGE_SHIFT)
     39 
     40 static inline unsigned int
     41 nfsacl_size(struct posix_acl *acl_access, struct posix_acl *acl_default)
     42 {
     43 	unsigned int w = 16;
     44 	w += max(acl_access ? (int)acl_access->a_count : 3, 4) * 12;
     45 	if (acl_default)
     46 		w += max((int)acl_default->a_count, 4) * 12;
     47 	return w;
     48 }
     49 
     50 extern unsigned int
     51 nfsacl_encode(struct xdr_buf *buf, unsigned int base, struct inode *inode,
     52 	      struct posix_acl *acl, int encode_entries, int typeflag);
     53 extern unsigned int
     54 nfsacl_decode(struct xdr_buf *buf, unsigned int base, unsigned int *aclcnt,
     55 	      struct posix_acl **pacl);
     56 
     57 #endif /* __KERNEL__ */
     58 #endif  /* __LINUX_NFSACL_H */
     59