svn commit: r265724 - in stable/9/sys/fs: nfs nfsserver
Rick Macklem
rmacklem at FreeBSD.org
Fri May 9 00:34:30 UTC 2014
Author: rmacklem
Date: Fri May 9 00:34:29 2014
New Revision: 265724
URL: http://svnweb.freebsd.org/changeset/base/265724
Log:
MFC: r265252
The new draft specification for NFSv4.0 specifies that a server
should either accept owner and owner_group strings that are just
the digits of the uid/gid or return NFS4ERR_BADOWNER.
This patch adds a sysctl vfs.nfsd.enable_stringtouid, which can
be set to enable the server w.r.t. accepting numeric string. It
also ensures that NFS4ERR_BADOWNER is returned if numeric uid/gid
strings are not enabled. This fixes the server for recent Linux
nfs4 clients that use numeric uid/gid strings by default.
Modified:
stable/9/sys/fs/nfs/nfs_commonsubs.c
stable/9/sys/fs/nfsserver/nfs_nfsdport.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/fs/ (props changed)
Modified: stable/9/sys/fs/nfs/nfs_commonsubs.c
==============================================================================
--- stable/9/sys/fs/nfs/nfs_commonsubs.c Fri May 9 00:28:07 2014 (r265723)
+++ stable/9/sys/fs/nfs/nfs_commonsubs.c Fri May 9 00:34:29 2014 (r265724)
@@ -65,6 +65,7 @@ uid_t nfsrv_defaultuid;
gid_t nfsrv_defaultgid;
int nfsrv_lease = NFSRV_LEASE;
int ncl_mbuf_mlen = MLEN;
+int nfsd_enable_stringtouid = 0;
NFSNAMEIDMUTEX;
NFSSOCKMUTEX;
@@ -2621,9 +2622,14 @@ nfsv4_strtouid(struct nfsrv_descript *nd
/* If a string of digits and an AUTH_SYS mount, just convert it. */
str0 = str;
tuid = (uid_t)strtoul(str0, &endstr, 10);
- if ((endstr - str0) == len &&
- (nd->nd_flag & (ND_KERBV | ND_NFSCL)) == ND_NFSCL) {
- *uidp = tuid;
+ if ((endstr - str0) == len) {
+ /* A numeric string. */
+ if ((nd->nd_flag & ND_KERBV) == 0 &&
+ ((nd->nd_flag & ND_NFSCL) != 0 ||
+ nfsd_enable_stringtouid != 0))
+ *uidp = tuid;
+ else
+ error = NFSERR_BADOWNER;
goto out;
}
/*
@@ -2826,9 +2832,14 @@ nfsv4_strtogid(struct nfsrv_descript *nd
/* If a string of digits and an AUTH_SYS mount, just convert it. */
str0 = str;
tgid = (gid_t)strtoul(str0, &endstr, 10);
- if ((endstr - str0) == len &&
- (nd->nd_flag & (ND_KERBV | ND_NFSCL)) == ND_NFSCL) {
- *gidp = tgid;
+ if ((endstr - str0) == len) {
+ /* A numeric string. */
+ if ((nd->nd_flag & ND_KERBV) == 0 &&
+ ((nd->nd_flag & ND_NFSCL) != 0 ||
+ nfsd_enable_stringtouid != 0))
+ *gidp = tgid;
+ else
+ error = NFSERR_BADOWNER;
goto out;
}
/*
Modified: stable/9/sys/fs/nfsserver/nfs_nfsdport.c
==============================================================================
--- stable/9/sys/fs/nfsserver/nfs_nfsdport.c Fri May 9 00:28:07 2014 (r265723)
+++ stable/9/sys/fs/nfsserver/nfs_nfsdport.c Fri May 9 00:34:29 2014 (r265724)
@@ -80,6 +80,7 @@ static int nfs_commit_blks;
static int nfs_commit_miss;
extern int nfsrv_issuedelegs;
extern int nfsrv_dolocallocks;
+extern int nfsd_enable_stringtouid;
SYSCTL_NODE(_vfs, OID_AUTO, nfsd, CTLFLAG_RW, 0, "New NFS server");
SYSCTL_INT(_vfs_nfsd, OID_AUTO, mirrormnt, CTLFLAG_RW,
@@ -92,6 +93,8 @@ SYSCTL_INT(_vfs_nfsd, OID_AUTO, issue_de
&nfsrv_issuedelegs, 0, "Enable nfsd to issue delegations");
SYSCTL_INT(_vfs_nfsd, OID_AUTO, enable_locallocks, CTLFLAG_RW,
&nfsrv_dolocallocks, 0, "Enable nfsd to acquire local locks on files");
+SYSCTL_INT(_vfs_nfsd, OID_AUTO, enable_stringtouid, CTLFLAG_RW,
+ &nfsd_enable_stringtouid, 0, "Enable nfsd to accept numeric owner_names");
#define MAX_REORDERED_RPC 16
#define NUM_HEURISTIC 1031
More information about the svn-src-stable
mailing list