svn commit: r265252 - in head/sys/fs: nfs nfsserver
Rick Macklem
rmacklem at uoguelph.ca
Sat May 3 00:19:10 UTC 2014
I wrote:
> Author: rmacklem
> Date: Sat May 3 00:13:45 2014
> New Revision: 265252
> URL: http://svnweb.freebsd.org/changeset/base/265252
>
> Log:
> 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.
>
> Reported and tested by: craigyk at gmail.com
> MFC after: 2 weeks
>
Oops, I meant to MFC in 1 week, since I'd like to get this in 9.3.
rick
> Modified:
> head/sys/fs/nfs/nfs_commonsubs.c
> head/sys/fs/nfsserver/nfs_nfsdport.c
>
> Modified: head/sys/fs/nfs/nfs_commonsubs.c
> ==============================================================================
> --- head/sys/fs/nfs/nfs_commonsubs.c Fri May 2 23:47:14 2014
> (r265251)
> +++ head/sys/fs/nfs/nfs_commonsubs.c Sat May 3 00:13:45 2014
> (r265252)
> @@ -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;
>
> @@ -2640,9 +2641,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;
> }
> /*
> @@ -2845,9 +2851,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: head/sys/fs/nfsserver/nfs_nfsdport.c
> ==============================================================================
> --- head/sys/fs/nfsserver/nfs_nfsdport.c Fri May 2 23:47:14 2014
> (r265251)
> +++ head/sys/fs/nfsserver/nfs_nfsdport.c Sat May 3 00:13:45 2014
> (r265252)
> @@ -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-head
mailing list