* SUCH DAMAGE.
*/
+/*
+ * Map mechanism OID to a SASL mechanism name.
+ */
+
#include "gssapiP_eap.h"
OM_uint32
gss_buffer_t mech_name,
gss_buffer_t mech_description)
{
+ OM_uint32 major;
gss_buffer_t name;
krb5_enctype etype = ENCTYPE_NULL;
- krb5_context krbContext;
- char krbBuf[128] = "eap-";
- if (oidEqual(mech, GSS_EAP_MECHANISM))
- return GSS_S_UNAVAILABLE;
+ /* Dynamically construct mechanism name from Kerberos string enctype */
+ major = gssEapOidToEnctype(minor, mech, &etype);
+ if (GSS_ERROR(major))
+ return major;
- GSSEAP_KRB_INIT(&krbContext);
+ if (mech_name != GSS_C_NO_BUFFER) {
+ krb5_context krbContext;
- makeStringBuffer(minor,
- "Extensible Authentication Protocol GSS-API Mechanism",
- mech_description);
+ GSSEAP_KRB_INIT(&krbContext);
- /* Dynamically construct mechanism name from Kerberos string enctype */
- if (gssEapOidToEnctype(minor, mech, &etype) != GSS_S_COMPLETE)
- return GSS_S_BAD_MECH;
+ *minor = krbEnctypeToString(krbContext, etype, "eap-", mech_name);
+ if (*minor != 0)
+ return GSS_S_FAILURE;
+ }
- if (krb5_enctype_to_name(etype, 0, &krbBuf[4], sizeof(krbBuf) - 4) == 0)
- makeStringBuffer(minor, krbBuf, mech_name);
+ 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;
}