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-all mailing list