NFS: Attempt AUTH_UNIX style mount before guessing authflavors
Subsystems (2)
PATCH 1/2 NFS: Attempt AUTH_UNIX style mount before guessing authflavors
If an AUTH_UNIX mount returns -EPERM, we guess the authflavor needed to perform the mount.
Signed-off-by Bryan Schumaker <[email protected]>
--- fs/nfs/nfs4proc.c | 26 +++++++++++++++++--------- 1 files changed, 17 insertions(+), 9 deletions(-)
fs/nfs/nfs4proc.c +17 -9
@@ -2208,19 +2208,15 @@ out:return ret; } -/* -* get the file handle for the "/" directory on the server -*/ -static int nfs4_proc_get_root (struct nfs_server *server,struct nfs_fh *fhandle, +static int nfs4_find_root_sec (struct nfs_server *server,struct nfs_fh *fhandle,struct nfs_fsinfo *info) {int i, len, status =0 ; -rpc_authflavor_t flav_array[NFS_MAX_SECFLAVORS +2 ]; +rpc_authflavor_t flav_array[NFS_MAX_SECFLAVORS ]; - flav_array[0 ] =RPC_AUTH_UNIX ; - len =gss_mech_list_pseudoflavors (&flav_array[1 ]); - flav_array[1 +len] =RPC_AUTH_NULL ; - len +=2 ; + len =gss_mech_list_pseudoflavors (&flav_array[0 ]); + flav_array[len] =RPC_AUTH_NULL ; + len +=1 ;for (i =0 ; i < len; i++) { status =nfs4_lookup_root_sec (server, fhandle, info, flav_array[i]);
@@ -2228,6 +2224,18 @@ static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle,continue ;break ; } +return status; +} + +/* +* get the file handle for the "/" directory on the server +*/ +static int nfs4_proc_get_root (struct nfs_server *server,struct nfs_fh *fhandle, +struct nfs_fsinfo *info) +{ +int status =nfs4_lookup_root (server, fhandle, info); +if (status == -EPERM ) + status =nfs4_find_root_sec (server, fhandle, info);if (status ==0 ) status =nfs4_server_capabilities (server, fhandle);if (status ==0 )
Signature · 1 line
1.7.4.4
Quoted 46 lines · Bryan Schumaker
If an
AUTH_UNIXmount returns-EPERM, we guess the authflavor needed to perform the mount.Signed-off-by Bryan Schumaker <[email protected]>--- fs/nfs/nfs4proc.c | 26 +++++++++++++++++--------- 1 files changed, 17 insertions(+), 9 deletions(-)fs/nfs/nfs4proc.c +10
-9@@ -2208,19 +2208,15 @@ out:return ret; } -/* -* get the file handle for the "/" directory on the server -*/ -static int nfs4_proc_get_root (struct nfs_server *server,struct nfs_fh *fhandle, +static int nfs4_find_root_sec (struct nfs_server *server,struct nfs_fh *fhandle,struct nfs_fsinfo *info) {int i, len, status =0 ; -rpc_authflavor_t flav_array[NFS_MAX_SECFLAVORS +2 ]; +rpc_authflavor_t flav_array[NFS_MAX_SECFLAVORS ]; - flav_array[0 ] =RPC_AUTH_UNIX ; - len =gss_mech_list_pseudoflavors (&flav_array[1 ]); - flav_array[1 +len] =RPC_AUTH_NULL ; - len +=2 ; + len =gss_mech_list_pseudoflavors (&flav_array[0 ]); + flav_array[len] =RPC_AUTH_NULL ; + len +=1 ;for (i =0 ; i < len; i++) { status =nfs4_lookup_root_sec (server, fhandle, info, flav_array[i]);@@ -2228,6 +2224,18 @@ static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle,continue ;break ; } +return status; +} + +/* +* get the file handle for the "/" directory on the server
fs/nfs/nfs4proc.c static int nfs4_proc_get_root(struct nfs_server *server, struct nfs_fh *fhandle, · line 2241
Quoted 10 lines
fs/nfs/nfs4proc.c +7
-0+*/ +static int nfs4_proc_get_root (struct nfs_server *server,struct nfs_fh *fhandle, +struct nfs_fsinfo *info) +{ +int status =nfs4_lookup_root (server, fhandle, info); +if (status == -EPERM ) + status =nfs4_find_root_sec (server, fhandle, info);if (status ==0 ) status =nfs4_server_capabilities (server, fhandle);if (status ==0 )
Wait. This is still wrong.
What if I have specified 'sec=krb5p' on my 'mount' command line?
Signature · 6 lines
Trond Myklebust Linux NFS client maintainer NetApp [email protected] www.netapp.com