From 3be2b486058758cfcd16c8af0a8f560159e77cda Mon Sep 17 00:00:00 2001 From: Robbie Harwood Date: Mon, 11 Jan 2016 17:50:39 -0500 Subject: [PATCH] Enable interposing gss_inquire_attrs_for_mech() Use gssint_select_mech_type() to locate an interposer mechanism, and pass the public mech OID to the mech. Also call map_error() on the resulting minor code. ticket: 8330 (new) --- src/lib/gssapi/mechglue/g_mechattr.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/lib/gssapi/mechglue/g_mechattr.c b/src/lib/gssapi/mechglue/g_mechattr.c index e9299f4..57c0e52 100644 --- a/src/lib/gssapi/mechglue/g_mechattr.c +++ b/src/lib/gssapi/mechglue/g_mechattr.c @@ -160,6 +160,7 @@ gss_inquire_attrs_for_mech( gss_OID_set *known_mech_attrs) { OM_uint32 status, tmpMinor; + gss_OID selected_mech, public_mech; gss_mechanism mech; if (minor == NULL) @@ -173,14 +174,20 @@ gss_inquire_attrs_for_mech( if (known_mech_attrs != NULL) *known_mech_attrs = GSS_C_NO_OID_SET; - mech = gssint_get_mechanism((gss_OID)mech_oid); + status = gssint_select_mech_type(minor, mech_oid, &selected_mech); + if (status != GSS_S_COMPLETE) + return status; + + mech = gssint_get_mechanism(selected_mech); if (mech != NULL && mech->gss_inquire_attrs_for_mech != NULL) { - status = mech->gss_inquire_attrs_for_mech(minor, - mech_oid, + public_mech = gssint_get_public_oid(selected_mech); + status = mech->gss_inquire_attrs_for_mech(minor, public_mech, mech_attrs, known_mech_attrs); - if (GSS_ERROR(status)) + if (GSS_ERROR(status)) { + map_error(minor, mech); return status; + } } if (known_mech_attrs != NULL && *known_mech_attrs == GSS_C_NO_OID_SET) { -- 2.7.0