lkml.org 
[lkml]   [2006]   [Sep]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 007 of 9] knfsd: nfsd4: acls: fix inheritance

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

    We can be a little more flexible about the flags allowed for inheritance
    (in particular, we can deal with either the presence or the absence of
    INHERIT_ONLY), but we should probably reject other combinations that we
    don't understand.

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

    ### Diffstat output
    ./fs/nfsd/nfs4acl.c | 43 ++++++++++++++++++++++++++++++-------------
    1 file changed, 30 insertions(+), 13 deletions(-)

    diff .prev/fs/nfsd/nfs4acl.c ./fs/nfsd/nfs4acl.c
    --- .prev/fs/nfsd/nfs4acl.c 2006-09-04 17:20:49.000000000 +1000
    +++ ./fs/nfsd/nfs4acl.c 2006-09-04 17:26:00.000000000 +1000
    @@ -63,6 +63,8 @@
    #define NFS4_INHERITANCE_FLAGS (NFS4_ACE_FILE_INHERIT_ACE \
    | NFS4_ACE_DIRECTORY_INHERIT_ACE | NFS4_ACE_INHERIT_ONLY_ACE)

    +#define NFS4_SUPPORTED_FLAGS (NFS4_INHERITANCE_FLAGS | NFS4_ACE_IDENTIFIER_GROUP)
    +
    #define MASK_EQUAL(mask1, mask2) \
    ( ((mask1) & NFS4_ACE_MASK_ALL) == ((mask2) & NFS4_ACE_MASK_ALL) )

    @@ -721,22 +723,37 @@ nfs4_acl_split(struct nfs4_acl *acl, str
    ace->type != NFS4_ACE_ACCESS_DENIED_ACE_TYPE)
    return -EINVAL;

    - if ((ace->flag & NFS4_INHERITANCE_FLAGS)
    - != NFS4_INHERITANCE_FLAGS)
    - continue;
    + if (ace->flag & ~NFS4_SUPPORTED_FLAGS)
    + return -EINVAL;

    - error = nfs4_acl_add_ace(dacl, ace->type, ace->flag,
    + switch (ace->flag & NFS4_INHERITANCE_FLAGS) {
    + case 0:
    + /* Leave this ace in the effective acl: */
    + continue;
    + case NFS4_INHERITANCE_FLAGS:
    + /* Add this ace to the default acl and remove it
    + * from the effective acl: */
    + error = nfs4_acl_add_ace(dacl, ace->type, ace->flag,
    ace->access_mask, ace->whotype, ace->who);
    - if (error < 0)
    - goto out;
    -
    - list_del(h);
    - kfree(ace);
    - acl->naces--;
    + if (error)
    + return error;
    + list_del(h);
    + kfree(ace);
    + acl->naces--;
    + break;
    + case NFS4_INHERITANCE_FLAGS & ~NFS4_ACE_INHERIT_ONLY_ACE:
    + /* Add this ace to the default, but leave it in
    + * the effective acl as well: */
    + error = nfs4_acl_add_ace(dacl, ace->type, ace->flag,
    + ace->access_mask, ace->whotype, ace->who);
    + if (error)
    + return error;
    + break;
    + default:
    + return -EINVAL;
    + }
    }
    -
    -out:
    - return error;
    + return 0;
    }

    static short
    -
    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:121.012 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site