diff --git a/lib/gssapi/gssapi_mech.h b/lib/gssapi/gssapi_mech.h index 634e16b32..e6179ba11 100644 --- a/lib/gssapi/gssapi_mech.h +++ b/lib/gssapi/gssapi_mech.h @@ -701,6 +701,9 @@ gss_cred_id_t _gss_mg_find_mech_cred(gss_const_cred_id_t cred_handle, gss_const_OID mech_type); +GSSAPI_LIB_FUNCTION gss_const_OID +GSSAPI_CALLCONV gss_mg_name_to_oid(const char *); + #include /* diff --git a/lib/gssapi/libgssapi-exports.def b/lib/gssapi/libgssapi-exports.def index 10e487f13..00ef309b1 100644 --- a/lib/gssapi/libgssapi-exports.def +++ b/lib/gssapi/libgssapi-exports.def @@ -69,6 +69,7 @@ EXPORTS gss_krb5_set_allowable_enctypes gss_localname gss_mg_collect_error + gss_mg_name_to_oid gss_mo_get gss_mo_set gss_mo_list diff --git a/lib/gssapi/mech/gss_mech_switch.c b/lib/gssapi/mech/gss_mech_switch.c index 3a5b96072..2db9dbb69 100644 --- a/lib/gssapi/mech/gss_mech_switch.c +++ b/lib/gssapi/mech/gss_mech_switch.c @@ -490,3 +490,21 @@ _gss_mg_support_mechanism(gss_const_OID mech) } return NULL; } + +GSSAPI_LIB_FUNCTION gss_const_OID GSSAPI_CALLCONV +gss_mg_name_to_oid(const char *name) +{ + struct _gss_mech_switch *m; + gss_OID oid = GSS_C_NO_OID; + + if (isdigit(name[0]) && _gss_string_to_oid(name, &oid) == 0) + return oid; + + _gss_load_mech(); + HEIM_TAILQ_FOREACH(m, &_gss_mechs, gm_link) { + if (m->gm_mech.gm_name && + strcmp(m->gm_mech.gm_name, name) == 0) + return m->gm_mech_oid; + } + return NULL; +} diff --git a/lib/gssapi/version-script.map b/lib/gssapi/version-script.map index 0a731c430..b44581b52 100644 --- a/lib/gssapi/version-script.map +++ b/lib/gssapi/version-script.map @@ -69,6 +69,7 @@ HEIMDAL_GSS_2.0 { gss_krb5_set_allowable_enctypes; gss_localname; gss_mg_collect_error; + gss_mg_name_to_oid; gss_oid_equal; gss_oid_to_str; gss_pname_to_uid;