NFSv4: use mach cred for SECINFO_NO_NAME w/ integrity
authorWeston Andros Adamson <dros@netapp.com>
Wed, 4 Sep 2013 16:13:19 +0000 (12:13 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Sat, 7 Sep 2013 22:39:25 +0000 (18:39 -0400)
commitb1b3e136948a2bf4915326acb0d825d7d180753f
treebba218c0ba86f3030f8f91e3c3d19dd445812d81
parent0aea92bf67321fc600b6c61627e0fd46e8889a49
NFSv4: use mach cred for SECINFO_NO_NAME w/ integrity

Commit 97431204ea005ec8070ac94bc3251e836daa7ca7 introduced a regression
that causes SECINFO_NO_NAME to fail without sending an RPC if:

 1) the nfs_client's rpc_client is using krb5i/p (now tried by default)
 2) the current user doesn't have valid kerberos credentials

This situation is quite common - as of now a sec=sys mount would use
krb5i for the nfs_client's rpc_client and a user would hardly be faulted
for not having run kinit.

The solution is to use the machine cred when trying to use an integrity
protected auth flavor for SECINFO_NO_NAME.

Older servers may not support using the machine cred or an integrity
protected auth flavor for SECINFO_NO_NAME in every circumstance, so we fall
back to using the user's cred and the filesystem's auth flavor in this case.

We run into another problem when running against linux nfs servers -
they return NFS4ERR_WRONGSEC when using integrity auth flavor (unless the
mount is also that flavor) even though that is not a valid error for
SECINFO*.  Even though it's against spec, handle WRONGSEC errors on
SECINFO_NO_NAME by falling back to using the user cred and the
filesystem's auth flavor.

Signed-off-by: Weston Andros Adamson <dros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfs4proc.c