summaryrefslogtreecommitdiffstats
path: root/releases/2.6.39.3/nfsd-fix-dependency-of-nfsd-on-auth_rpcgss.patch
diff options
context:
space:
mode:
Diffstat (limited to 'releases/2.6.39.3/nfsd-fix-dependency-of-nfsd-on-auth_rpcgss.patch')
-rw-r--r--releases/2.6.39.3/nfsd-fix-dependency-of-nfsd-on-auth_rpcgss.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/releases/2.6.39.3/nfsd-fix-dependency-of-nfsd-on-auth_rpcgss.patch b/releases/2.6.39.3/nfsd-fix-dependency-of-nfsd-on-auth_rpcgss.patch
new file mode 100644
index 0000000000..021e3e091e
--- /dev/null
+++ b/releases/2.6.39.3/nfsd-fix-dependency-of-nfsd-on-auth_rpcgss.patch
@@ -0,0 +1,106 @@
+From b084f598df36b62dfae83c10ed17f0b66b50f442 Mon Sep 17 00:00:00 2001
+From: "J. Bruce Fields" <bfields@redhat.com>
+Date: Tue, 31 May 2011 12:24:58 -0400
+Subject: nfsd: fix dependency of nfsd on auth_rpcgss
+
+From: "J. Bruce Fields" <bfields@redhat.com>
+
+commit b084f598df36b62dfae83c10ed17f0b66b50f442 upstream.
+
+Commit b0b0c0a26e84 "nfsd: add proc file listing kernel's gss_krb5
+enctypes" added an nunnecessary dependency of nfsd on the auth_rpcgss
+module.
+
+It's a little ad hoc, but since the only piece of information nfsd needs
+from rpcsec_gss_krb5 is a single static string, one solution is just to
+share it with an include file.
+
+Reported-by: Michael Guntsche <mike@it-loops.com>
+Cc: Kevin Coffman <kwc@citi.umich.edu>
+Signed-off-by: J. Bruce Fields <bfields@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/nfsd/nfsctl.c | 19 ++++++-------------
+ include/linux/sunrpc/gss_krb5_enctypes.h | 4 ++++
+ net/sunrpc/auth_gss/gss_krb5_mech.c | 3 ++-
+ 3 files changed, 12 insertions(+), 14 deletions(-)
+
+--- a/fs/nfsd/nfsctl.c
++++ b/fs/nfsd/nfsctl.c
+@@ -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_fea
+ .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_
+ .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_
+ [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},
+--- /dev/null
++++ b/include/linux/sunrpc/gss_krb5_enctypes.h
+@@ -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"
+--- a/net/sunrpc/auth_gss/gss_krb5_mech.c
++++ b/net/sunrpc/auth_gss/gss_krb5_mech.c
+@@ -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_
+ .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)