diff options
Diffstat (limited to 'sys/fs/nfs/nfs_commonacl.c')
-rw-r--r-- | sys/fs/nfs/nfs_commonacl.c | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/sys/fs/nfs/nfs_commonacl.c b/sys/fs/nfs/nfs_commonacl.c index 0ac1590..d639cfc 100644 --- a/sys/fs/nfs/nfs_commonacl.c +++ b/sys/fs/nfs/nfs_commonacl.c @@ -37,7 +37,6 @@ extern int nfsrv_useacl; static int nfsrv_acemasktoperm(u_int32_t acetype, u_int32_t mask, int owner, enum vtype type, acl_perm_t *permp); -#if defined(NFS4_ACL_EXTATTR_NAME) /* * Handle xdr for an ace. */ @@ -263,189 +262,7 @@ nfsrv_acemasktoperm(u_int32_t acetype, u_int32_t mask, int owner, *permp = perm; return (0); } -#else -/* - * Handle xdr for an ace. - */ -APPLESTATIC int -nfsrv_dissectace(struct nfsrv_descript *nd, struct acl_entry *acep, - int *aceerrp, int *acesizep, NFSPROC_T *p) -{ - u_int32_t *tl; - int len, gotid = 0, owner = 0, error = 0, aceerr = 0; - u_char *name, namestr[NFSV4_SMALLSTR + 1]; - u_int32_t flag, mask, acetype; - gid_t gid; - uid_t uid; - - *aceerrp = 0; - NFSM_DISSECT(tl, u_int32_t *, 4 * NFSX_UNSIGNED); - acetype = fxdr_unsigned(u_int32_t, *tl++); - flag = fxdr_unsigned(u_int32_t, *tl++); - mask = fxdr_unsigned(u_int32_t, *tl++); - len = fxdr_unsigned(int, *tl); - if (len < 0) { - return (NFSERR_BADXDR); - } else if (len == 0) { - /* Netapp filers return a 0 length who for nil users */ - acep->ae_tag = ACL_UNDEFINED_TAG; - acep->ae_id = ACL_UNDEFINED_ID; - acep->ae_perm = (acl_perm_t)0; - if (acesizep) - *acesizep = 4 * NFSX_UNSIGNED; - return (0); - } - if (len > NFSV4_SMALLSTR) - name = malloc(len + 1, M_NFSSTRING, M_WAITOK); - else - name = namestr; - error = nfsrv_mtostr(nd, name, len); - if (error) { - if (len > NFSV4_SMALLSTR) - free(name, M_NFSSTRING); - return (error); - } - if (len == 6) { - if (!NFSBCMP(name, "OWNER@", 6)) { - acep->ae_tag = ACL_USER_OBJ; - acep->ae_id = ACL_UNDEFINED_ID; - owner = 1; - gotid = 1; - } else if (!NFSBCMP(name, "GROUP@", 6)) { - acep->ae_tag = ACL_GROUP_OBJ; - acep->ae_id = ACL_UNDEFINED_ID; - gotid = 1; - flag &= ~NFSV4ACE_IDENTIFIERGROUP; - } - } else if (len == 9 && !NFSBCMP(name, "EVERYONE@", 9)) { - acep->ae_tag = ACL_OTHER; - acep->ae_id = ACL_UNDEFINED_ID; - gotid = 1; - } - if (!gotid) { - if (flag & NFSV4ACE_IDENTIFIERGROUP) { - flag &= ~NFSV4ACE_IDENTIFIERGROUP; - acep->ae_tag = ACL_GROUP; - aceerr = nfsv4_strtogid(name, len, &gid, p); - if (!aceerr) - acep->ae_id = (uid_t)gid; - } else { - acep->ae_tag = ACL_USER; - aceerr = nfsv4_strtouid(name, len, &uid, p); - if (!aceerr) - acep->ae_id = uid; - } - } - if (len > NFSV4_SMALLSTR) - free(name, M_NFSSTRING); - - /* - * Now, check for unsupported types or flag bits. - */ - if (!aceerr && ((acetype != NFSV4ACE_ALLOWEDTYPE && - acetype != NFSV4ACE_AUDITTYPE && acetype != NFSV4ACE_ALARMTYPE - && acetype != NFSV4ACE_DENIEDTYPE) || flag)) - aceerr = NFSERR_ATTRNOTSUPP; - - /* - * And turn the mask into perm bits. - */ - if (!aceerr) - aceerr = nfsrv_acemasktoperm(acetype, mask, owner, VREG, - &acep->ae_perm); - *aceerrp = aceerr; - if (acesizep) - *acesizep = NFSM_RNDUP(len) + (4 * NFSX_UNSIGNED); - return (0); -nfsmout: - return (error); -} - -/* - * Turn an NFSv4 ace mask into R/W/X flag bits. - */ -static int -nfsrv_acemasktoperm(u_int32_t acetype, u_int32_t mask, int owner, - enum vtype type, acl_perm_t *permp) -{ - acl_perm_t perm = 0x0; - - if (acetype != NFSV4ACE_ALLOWEDTYPE && acetype != NFSV4ACE_DENIEDTYPE){ - if (mask & ~NFSV4ACE_AUDITMASK) - return (NFSERR_ATTRNOTSUPP); - } - if (mask & NFSV4ACE_DELETE) { - return (NFSERR_ATTRNOTSUPP); - } - if (acetype == NFSV4ACE_DENIEDTYPE) { - if (mask & NFSV4ACE_ALLFILESMASK) { - return (NFSERR_ATTRNOTSUPP); - } - if (owner) { - if (mask & NFSV4ACE_OWNERMASK) { - return (NFSERR_ATTRNOTSUPP); - } - } else { - if ((mask & NFSV4ACE_OWNERMASK) != NFSV4ACE_OWNERMASK) { - return (NFSERR_ATTRNOTSUPP); - } - mask &= ~NFSV4ACE_OWNERMASK; - } - } else if (acetype == NFSV4ACE_ALLOWEDTYPE) { - if ((mask & NFSV4ACE_ALLFILESMASK) != NFSV4ACE_ALLFILESMASK) { - return (NFSERR_ATTRNOTSUPP); - } - mask &= ~NFSV4ACE_ALLFILESMASK; - if (owner) { - if ((mask & NFSV4ACE_OWNERMASK) != NFSV4ACE_OWNERMASK) { - return (NFSERR_ATTRNOTSUPP); - } - mask &= ~NFSV4ACE_OWNERMASK; - } else if (mask & NFSV4ACE_OWNERMASK) { - return (NFSERR_ATTRNOTSUPP); - } - } - if (type == VDIR) { - if ((mask & NFSV4ACE_DIRREADMASK) == NFSV4ACE_DIRREADMASK) { - perm |= ACL_READ; - mask &= ~NFSV4ACE_DIRREADMASK; - } - if ((mask & NFSV4ACE_DIRWRITEMASK) == NFSV4ACE_DIRWRITEMASK) { - perm |= ACL_WRITE; - mask &= ~NFSV4ACE_DIRWRITEMASK; - } - if ((mask & NFSV4ACE_DIREXECUTEMASK)==NFSV4ACE_DIREXECUTEMASK){ - perm |= ACL_EXECUTE; - mask &= ~NFSV4ACE_DIREXECUTEMASK; - } - } else { - if (acetype == NFSV4ACE_DENIEDTYPE && - (mask & NFSV4ACE_SYNCHRONIZE)) { - return (NFSERR_ATTRNOTSUPP); - } - mask &= ~(NFSV4ACE_SYNCHRONIZE | NFSV4ACE_DELETECHILD); - if ((mask & NFSV4ACE_READMASK) == NFSV4ACE_READMASK) { - perm |= ACL_READ; - mask &= ~NFSV4ACE_READMASK; - } - if ((mask & NFSV4ACE_WRITEMASK) == NFSV4ACE_WRITEMASK) { - perm |= ACL_WRITE; - mask &= ~NFSV4ACE_WRITEMASK; - } - if ((mask & NFSV4ACE_EXECUTEMASK) == NFSV4ACE_EXECUTEMASK) { - perm |= ACL_EXECUTE; - mask &= ~NFSV4ACE_EXECUTEMASK; - } - } - if (mask) { - return (NFSERR_ATTRNOTSUPP); - } - *permp = perm; - return (0); -} -#endif /* !NFS4_ACL_EXTATTR_NAME */ -#ifdef NFS4_ACL_EXTATTR_NAME /* local functions */ static int nfsrv_buildace(struct nfsrv_descript *, u_char *, int, enum vtype, int, int, struct acl_entry *); @@ -742,5 +559,3 @@ nfsrv_compareacl(NFSACL_T *aclp1, NFSACL_T *aclp2) } return (0); } - -#endif /* NFS4_ACL_EXTATTR_NAME */ |