X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=mech_eap%2Finquire_mech_for_saslname.c;h=c2f7914e417108c4858b14392c7a598580546d56;hb=refs%2Fheads%2Fjson-name;hp=f42df285ef8c5c6f40a91a22e567c04796ae7172;hpb=a6d2f06389ab7e5f95403d9223f651e34fbad66e;p=moonshot.git diff --git a/mech_eap/inquire_mech_for_saslname.c b/mech_eap/inquire_mech_for_saslname.c index f42df28..c2f7914 100644 --- a/mech_eap/inquire_mech_for_saslname.c +++ b/mech_eap/inquire_mech_for_saslname.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, JANET(UK) + * Copyright (c) 2011, JANET(UK) * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,6 +30,10 @@ * SUCH DAMAGE. */ +/* + * Map mechanism OID to a SASL mechanism name. + */ + #include "gssapiP_eap.h" OM_uint32 @@ -39,11 +43,42 @@ gss_inquire_saslname_for_mech(OM_uint32 *minor, gss_buffer_t mech_name, gss_buffer_t mech_description) { + OM_uint32 major; gss_buffer_t name; + krb5_enctype etype = ENCTYPE_NULL; + + /* Dynamically construct mechanism name from Kerberos string enctype */ + major = gssEapOidToEnctype(minor, mech, &etype); + if (GSS_ERROR(major)) + return major; + + if (mech_name != GSS_C_NO_BUFFER) { + krb5_context krbContext; + + GSSEAP_KRB_INIT(&krbContext); + + *minor = krbEnctypeToString(krbContext, etype, "eap-", mech_name); + if (*minor != 0) + return GSS_S_FAILURE; + } + + if (mech_description != GSS_C_NO_BUFFER) { + major = makeStringBuffer(minor, + "Extensible Authentication Protocol GSS-API Mechanism", + mech_description); + if (GSS_ERROR(major)) + return major; + } - name = gssEapOidToSaslName(mech); - if (name == GSS_C_NO_BUFFER) - return GSS_S_BAD_MECH; + if (sasl_mech_name != GSS_C_NO_BUFFER) { + name = gssEapOidToSaslName(mech); + if (name == GSS_C_NO_BUFFER) { + major = GSS_S_BAD_MECH; + *minor = GSSEAP_WRONG_MECH; + } else { + major = duplicateBuffer(minor, name, sasl_mech_name); + } + } - return duplicateBuffer(minor, name, sasl_mech_name); + return major; }