From a7c11ee05e1640700a61815ebbf4d6fbadb03a52 Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Thu, 25 Nov 2010 20:45:52 -0800 Subject: [PATCH] add _gss_mo_get_ctx_as_value --- lib/gssapi/mech/gss_mo.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/gssapi/mech/gss_mo.c b/lib/gssapi/mech/gss_mo.c index 542a998e3..60f5328bc 100644 --- a/lib/gssapi/mech/gss_mo.c +++ b/lib/gssapi/mech/gss_mo.c @@ -54,7 +54,19 @@ _gss_mo_get_option_0(gss_const_OID mech, gss_mo_desc *mo, gss_buffer_t value) return get_option_def(0, mech, mo, value); } -GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL +int +_gss_mo_get_ctx_as_value(gss_const_OID mech, gss_mo_desc *mo, gss_buffer_t value) +{ + if (value) { + value->value = strdup((char *)mo->ctx); + if (value->value == NULL) + return 1; + value->length = strlen((char *)mo->ctx); + } + return 0; +} + +GSSAPI_LIB_FUNCTION int GSSAPI_LIB_CALL gss_mo_set(gss_const_OID mech, gss_const_OID option, int enable, gss_buffer_t value) { @@ -70,7 +82,7 @@ gss_mo_set(gss_const_OID mech, gss_const_OID option, return 0; } -GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL +GSSAPI_LIB_FUNCTION int GSSAPI_LIB_CALL gss_mo_get(gss_const_OID mech, gss_const_OID option, gss_buffer_t value) { gssapi_mech_interface m; @@ -153,7 +165,10 @@ mo_name(const gss_const_OID mech, gss_const_OID option, gss_buffer_t name) if (name == NULL) return GSS_S_COMPLETE; - return gss_mo_name(mech, option, name); + if (gss_mo_get(mech, option, name) != 0 && value->length == 0) + return GSS_S_FAILURE; + + return GSS_S_COMPLETE; } /** @@ -225,7 +240,7 @@ gss_inquire_mech_for_saslname(OM_uint32 *minor_status, *mech_type = NULL; SLIST_FOREACH(m, &_gss_mechs, gm_link) { - major = gss_mo_name(&m->gm_mech_oid, GSS_MA_SASL_MECH_NAME, &name); + major = mo_name(&m->gm_mech_oid, GSS_MA_SASL_MECH_NAME, &name); if (major) continue; if (name.length == sasl_mech_name->length && @@ -342,6 +357,8 @@ gss_display_mech_attr(OM_uint32 * minor_status, if (minor_status) *minor_status = 0; + /* XXX check if the mech implements this, if it does, lets ask it for its idea first */ + for (n = 0; ma == NULL && _gss_ont_ma[n].oid; n++) if (gss_oid_equal(mech_attr, _gss_ont_ma[n].oid)) ma = &_gss_ont_ma[n];