• Frank Filz's avatar
    nfsd: Allow AIX client to read dir containing mountpoints · 406a7ea9
    Frank Filz authored
    This patch addresses a compatibility issue with a Linux NFS server and
    AIX NFS client.
    
    I have exported /export as fsid=0 with sec=krb5:krb5i
    I have mount --bind /home onto /export/home
    I have exported /export/home with sec=krb5i
    
    The AIX client mounts / -o sec=krb5:krb5i onto /mnt
    
    If I do an ls /mnt, the AIX client gets a permission error. Looking at
    the network traceIwe see a READDIR looking for attributes
    FATTR4_RDATTR_ERROR and FATTR4_MOUNTED_ON_FILEID. The response gives a
    NFS4ERR_WRONGSEC which the AIX client is not expecting.
    
    Since the AIX client is only asking for an attribute that is an
    attribute of the parent file system (pseudo root in my example), it
    seems reasonable that there should not be an error.
    
    In discussing this issue with Bruce Fields, I initially proposed
    ignoring the error in nfsd4_encode_dirent_fattr() if all that was being
    asked for was FATTR4_RDATTR_ERROR and FATTR4_MOUNTED_ON_FILEID, however,
    Bruce suggested that we avoid calling cross_mnt() if only these
    attributes are requested.
    
    The following patch implements bypassing cross_mnt() if only
    FATTR4_RDATTR_ERROR and FATTR4_MOUNTED_ON_FILEID are called. Since there
    is some complexity in the code in nfsd4_encode_fattr(), I didn't want to
    duplicate code (and introduce a maintenance nightmare), so I added a
    parameter to nfsd4_encode_fattr() that indicates whether it should
    ignore cross mounts and simply fill in the attribute using the passed in
    dentry as opposed to it's parent.
    Signed-off-by: default avatarFrank Filz <ffilzlnx@us.ibm.com>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
    406a7ea9
nfs4proc.c 29.7 KB