nfsd dependency on auth_gss
Subsystems (3)
Michael Guntsche points out that we screwed up when we added /proc/fs/nfsd/supported_krb5_enctypes, by calling into auth_gss and thus creating an unnecessary dependency.
The following is simple, though it's a kludge.
I guess it would have been better to put this in some gss- or krb5- specific place instead of in the nfsd filesystem. I don't know where that would be, though.
--b.
Author: J. Bruce Fields <[email protected]> Date: Tue May 31 12:24:58 2011 -0400
nfsd: fix dependency of nfsd on auth_gss
It's a little ad hoc, but since the only piece of information nfsd needs from auth_gss is a single static string, we can just share it with an include file.
Reported-by Michael Guntsche <[email protected]>
Signed-off-by J. Bruce Fields <[email protected]>
fs/nfsd/nfsctl.c +6 -13
@@ -13,6 +13,7 @@#include <linux/lockd/lockd.h> #include <linux/sunrpc/clnt.h> #include <linux/sunrpc/gss_api.h> +#include <linux/sunrpc/gss_krb5_enctypes.h> #include "idmap.h" #include "nfsd.h"
@@ -189,18 +190,10 @@ static struct file_operations export_features_operations = { .release = single_release, }; -#ifdef CONFIG_SUNRPC_GSS +#if defined(CONFIG_SUNRPC_GSS ) || defined(CONFIG_SUNRPC_GSS_MODULE )static int supported_enctypes_show (struct seq_file *m,void *v) { -struct gss_api_mech *k5mech; - - k5mech =gss_mech_get_by_name ("krb5" ); -if (k5mech ==NULL ) - goto out; -if (k5mech->gm_upcall_enctypes !=NULL ) -seq_printf (m, k5mech->gm_upcall_enctypes); -gss_mech_put (k5mech); -out: +seq_printf (m,KRB5_SUPPORTED_ENCTYPES );return 0 ; }
@@ -215,7 +208,7 @@ static struct file_operations supported_enctypes_ops = { .llseek = seq_lseek, .release = single_release, }; -#endif /* CONFIG_SUNRPC_GSS */ +#endif /* CONFIG_SUNRPC_GSS or CONFIG_SUNRPC_GSS_MODULE */ extern int nfsd_pool_stats_open (struct inode *inode,struct file *file);extern int nfsd_pool_stats_release (struct inode *inode,struct file *file);
@@ -1427,9 +1420,9 @@ static int nfsd_fill_super(struct super_block * sb, void * data, int silent) [NFSD_Versions] = {"versions", &transaction_ops, S_IWUSR|S_IRUSR}, [NFSD_Ports] = {"portlist", &transaction_ops, S_IWUSR|S_IRUGO}, [NFSD_MaxBlkSize] = {"max_block_size" , &transaction_ops,S_IWUSR |S_IRUGO }, -#ifdef CONFIG_SUNRPC_GSS +#if defined(CONFIG_SUNRPC_GSS) || defined(CONFIG_SUNRPC_GSS_MODULE) [NFSD_SupportedEnctypes] = {"supported_krb5_enctypes" , &supported_enctypes_ops,S_IRUGO }, -#endif /* CONFIG_SUNRPC_GSS */ +#endif /* CONFIG_SUNRPC_GSS or CONFIG_SUNRPC_GSS_MODULE */ #ifdef CONFIG_NFSD_V4 [NFSD_Leasetime] = {"nfsv4leasetime", &transaction_ops, S_IWUSR|S_IRUSR}, [NFSD_Gracetime] = {"nfsv4gracetime", &transaction_ops, S_IWUSR|S_IRUSR},
include/linux/sunrpc/gss_krb5_enctypes.h new file +4 -0
@@ -0,0 +1,4 @@ +/* +* Dumb way to share this static piece of information with nfsd +*/ +#define KRB5_SUPPORTED_ENCTYPES "18,17,16,23,3,1,2"
net/sunrpc/auth_gss/gss_krb5_mech.c +2 -1
@@ -43,6 +43,7 @@#include <linux/sunrpc/gss_krb5.h> #include <linux/sunrpc/xdr.h> #include <linux/crypto.h> +#include <linux/sunrpc/gss_krb5_enctypes.h> #ifdef RPC_DEBUG # define RPCDBG_FACILITY RPCDBG_AUTH
@@ -750,7 +751,7 @@ static struct gss_api_mech gss_kerberos_mech = { .gm_ops = &gss_kerberos_ops, .gm_pf_num = ARRAY_SIZE(gss_kerberos_pfs), .gm_pfs = gss_kerberos_pfs, - .gm_upcall_enctypes = "18,17,16,23,3,1,2", + .gm_upcall_enctypes = KRB5_SUPPORTED_ENCTYPES, };static int __init init_kerberos_module (void )