lkml.org 
[lkml]   [2006]   [Sep]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    From
    Date
    Subject[PATCH 009 of 9] knfsd: nfsd4: acls: fix handling of zero-length acls

    From: J.Bruce Fields <bfields@fieldses.org>

    It is legal to have zero-length NFSv4 acls; they just deny everything.

    Also, nfs4_acl_nfsv4_to_posix will always return with pacl and dpacl set on
    success, so the caller doesn't need to check this.

    Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
    Signed-off-by: Neil Brown <neilb@suse.de>

    ### Diffstat output
    ./fs/nfsd/nfs4acl.c | 15 +--------------
    ./fs/nfsd/vfs.c | 10 ++++------
    2 files changed, 5 insertions(+), 20 deletions(-)

    diff .prev/fs/nfsd/nfs4acl.c ./fs/nfsd/nfs4acl.c
    --- .prev/fs/nfsd/nfs4acl.c 2006-09-04 17:27:48.000000000 +1000
    +++ ./fs/nfsd/nfs4acl.c 2006-09-04 17:28:10.000000000 +1000
    @@ -357,33 +357,20 @@ nfs4_acl_nfsv4_to_posix(struct nfs4_acl
    goto out;

    error = nfs4_acl_split(acl, dacl);
    - if (error < 0)
    + if (error)
    goto out_acl;

    - if (acl->naces == 0) {
    - error = -ENODATA;
    - goto try_dpacl;
    - }
    -
    *pacl = _nfsv4_to_posix_one(acl, flags);
    if (IS_ERR(*pacl)) {
    error = PTR_ERR(*pacl);
    *pacl = NULL;
    goto out_acl;
    }
    -try_dpacl:
    - if (dacl->naces == 0) {
    - if (pacl == NULL || *pacl == NULL)
    - error = -ENODATA;
    - goto out_acl;
    - }

    - error = 0;
    *dpacl = _nfsv4_to_posix_one(dacl, flags);
    if (IS_ERR(*dpacl)) {
    error = PTR_ERR(*dpacl);
    *dpacl = NULL;
    - goto out_acl;
    }
    out_acl:
    if (error) {
    diff .prev/fs/nfsd/vfs.c ./fs/nfsd/vfs.c
    --- .prev/fs/nfsd/vfs.c 2006-09-04 17:09:47.000000000 +1000
    +++ ./fs/nfsd/vfs.c 2006-09-04 17:28:10.000000000 +1000
    @@ -447,13 +447,11 @@ nfsd4_set_nfs4_acl(struct svc_rqst *rqst
    } else if (error < 0)
    goto out_nfserr;

    - if (pacl) {
    - error = set_nfsv4_acl_one(dentry, pacl, POSIX_ACL_XATTR_ACCESS);
    - if (error < 0)
    - goto out_nfserr;
    - }
    + error = set_nfsv4_acl_one(dentry, pacl, POSIX_ACL_XATTR_ACCESS);
    + if (error < 0)
    + goto out_nfserr;

    - if (dpacl) {
    + if (S_ISDIR(inode->i_mode)) {
    error = set_nfsv4_acl_one(dentry, dpacl, POSIX_ACL_XATTR_DEFAULT);
    if (error < 0)
    goto out_nfserr;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-09-05 01:21    [W:0.022 / U:91.524 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site