From: J. Bruce Fields <bfields@citi.umich.edu>
Date: Mon, 24 Aug 2009 12:20:10 +0000 (-0400)
Subject: Don't give client an empty flavor list
X-Git-Tag: nfs-utils-1-2-1-rc5~9
X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=9999c036952eced407162c394ea69145752ea5c4;p=nfs-utils.git

Don't give client an empty flavor list

In the absence of an explicit sec= option on an export, rpc.mountd
is returning a zero-length flavor list to clients in the MOUNT results.

The linux client doesn't seem to mind, but the Solaris client
(reasonably enough) is giving up; the symptom is a "security mode
does not match" error on mount.

We could modify the export-parsing code to ensure the secinfo array
is nonzero.  But I think it's slightly simpler to handle this default
case in the implementation of the MOUNT call.  This is more-or-less the
same thing the kernel does when mountd passes it an export without any
security flavors specified.

Thanks to Tom Haynes for bug report and diagnosis.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Steve Dickson <steved@redhat.com>
---

diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c
index b59f939..888fd8c 100644
--- a/utils/mountd/mountd.c
+++ b/utils/mountd/mountd.c
@@ -359,6 +359,11 @@ static void set_authflavors(struct mountres3_ok *ok, nfs_export *exp)
 		flavors[i] = s->flav->fnum;
 		i++;
 	}
+	if (i == 0) {
+		/* default when there is no sec= option: */
+		i = 1;
+		flavors[0] = AUTH_UNIX;
+	}
 	ok->auth_flavors.auth_flavors_val = flavors;
 	ok->auth_flavors.auth_flavors_len = i;
 }