From: NeilBrown <neilb@suse.de>
Date: Tue, 1 May 2012 19:20:31 +0000 (-0400)
Subject: auth_authenticate_newcache: prefer non-V4ROOT export over V4ROOT exports
X-Git-Tag: nfs-utils-1-2-6-rc7~10
X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=3d7faa0249332e23a2dc2e3e78020ed6bc66036a;p=nfs-utils.git

auth_authenticate_newcache: prefer non-V4ROOT export over V4ROOT exports

Currently auth_authenticate_internal finds an export and if it
is a V4ROOT export, it reports that there is no match.  Unlike
lookup_export() it doesn't keep looking for an acceptable export.

So remove the test from auth_authenticate_internal(), and add it to
auth_authenticate_newcache(), where the search can be allowed to
continue.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Steve Dickson <steved@redhat.com>
---

diff --git a/utils/mountd/auth.c b/utils/mountd/auth.c
index ccc849a..3843756 100644
--- a/utils/mountd/auth.c
+++ b/utils/mountd/auth.c
@@ -159,6 +159,9 @@ auth_authenticate_newcache(const struct sockaddr *caller,
 				continue;
 			if (use_ipaddr && !client_check(exp->m_client, ai))
 				continue;
+			if (exp->m_export.e_flags & NFSEXP_V4ROOT)
+				/* not acceptable for v[23] export */
+				continue;
 			break;
 		}
 	*error = not_exported;
@@ -187,10 +190,6 @@ auth_authenticate_internal(const struct sockaddr *caller, const char *path,
 			return NULL;
 		}
 	}
-	if (exp->m_export.e_flags & NFSEXP_V4ROOT) {
-		*error = no_entry;
-		return NULL;
-	}
 	if (!(exp->m_export.e_flags & NFSEXP_INSECURE_PORT) &&
 		     nfs_get_port(caller) >= IPPORT_RESERVED) {
 		*error = illegal_port;