On Mon, Jan 28, 2013 at 03:31:57PM -0500, Chuck Lever wrote: > The current GSS mech switch can find and load GSS pseudoflavor > modules by name or pseudoflavor number, but cannot find them by OID. > > This is important when dealing with a SECINFO request, especially > early in the boot process. A SECINFO reply has a list of flavors > the server can support, but they are listed by OID. Our client > currently can choose only flavors that are already loaded. We want > to be able to choose flavors where the module is available but not > yet loaded. > > Add a way for the GSS mech switch to load GSS pseudoflavor support > by OID. OK, and I was wondering how you'd set up the module aliases--I didn't know about sprint_oid. Looks nice. --b. > > Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> > --- > > net/sunrpc/Kconfig | 1 + > net/sunrpc/auth_gss/gss_krb5_mech.c | 1 + > net/sunrpc/auth_gss/gss_mech_switch.c | 7 +++++++ > 3 files changed, 9 insertions(+), 0 deletions(-) > > diff --git a/net/sunrpc/Kconfig b/net/sunrpc/Kconfig > index 03d03e3..f97f555 100644 > --- a/net/sunrpc/Kconfig > +++ b/net/sunrpc/Kconfig > @@ -3,6 +3,7 @@ config SUNRPC > > config SUNRPC_GSS > tristate > + select OID_REGISTRY > > config SUNRPC_BACKCHANNEL > bool > diff --git a/net/sunrpc/auth_gss/gss_krb5_mech.c b/net/sunrpc/auth_gss/gss_krb5_mech.c > index d3611f1..8b1005d 100644 > --- a/net/sunrpc/auth_gss/gss_krb5_mech.c > +++ b/net/sunrpc/auth_gss/gss_krb5_mech.c > @@ -750,6 +750,7 @@ MODULE_ALIAS("rpc-auth-gss-krb5p"); > MODULE_ALIAS("rpc-auth-gss-390003"); > MODULE_ALIAS("rpc-auth-gss-390004"); > MODULE_ALIAS("rpc-auth-gss-390005"); > +MODULE_ALIAS("rpc-auth-gss-1.2.840.113554.1.2.2"); > > static struct gss_api_mech gss_kerberos_mech = { > .gm_name = "krb5", > diff --git a/net/sunrpc/auth_gss/gss_mech_switch.c b/net/sunrpc/auth_gss/gss_mech_switch.c > index 883b5b8..64dbf07a 100644 > --- a/net/sunrpc/auth_gss/gss_mech_switch.c > +++ b/net/sunrpc/auth_gss/gss_mech_switch.c > @@ -36,6 +36,7 @@ > #include <linux/types.h> > #include <linux/slab.h> > #include <linux/module.h> > +#include <linux/oid_registry.h> > #include <linux/sunrpc/msg_prot.h> > #include <linux/sunrpc/gss_asn1.h> > #include <linux/sunrpc/auth_gss.h> > @@ -174,6 +175,12 @@ EXPORT_SYMBOL_GPL(gss_mech_get_by_name); > static struct gss_api_mech *gss_mech_get_by_OID(struct rpcsec_gss_oid *obj) > { > struct gss_api_mech *pos, *gm = NULL; > + char buf[32]; > + > + if (sprint_oid(obj->data, obj->len, buf, sizeof(buf)) < 0) > + return NULL; > + dprintk("RPC: %s: oid: %s\n", __func__, buf); > + request_module("rpc-auth-gss-%s", buf); > > spin_lock(®istered_mechs_lock); > list_for_each_entry(pos, ®istered_mechs, gm_list) { > > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html