X-Git-Url: http://www.project-moonshot.org/gitweb/?p=mech_eap.git;a=blobdiff_plain;f=mech_eap%2Fset_cred_option.c;h=98bb4824f608e616842ed42175e6fc9b41b71657;hp=bfffa1fc241130d2c604df7c1c7aa461aba0ab3c;hb=HEAD;hpb=fa210a112d16848a282d662f16f9b8589dd371df diff --git a/mech_eap/set_cred_option.c b/mech_eap/set_cred_option.c index bfffa1f..98bb482 100644 --- a/mech_eap/set_cred_option.c +++ b/mech_eap/set_cred_option.c @@ -42,7 +42,7 @@ setCredRadiusConfigFile(OM_uint32 *minor, const gss_OID oid GSSEAP_UNUSED, const gss_buffer_t buffer) { - OM_uint32 major; + OM_uint32 major, tmpMinor; gss_buffer_desc configFileBuffer = GSS_C_EMPTY_BUFFER; if (buffer != GSS_C_NO_BUFFER && buffer->length != 0) { @@ -51,10 +51,8 @@ setCredRadiusConfigFile(OM_uint32 *minor, return major; } - if (cred->radiusConfigFile != NULL) - GSSEAP_FREE(cred->radiusConfigFile); - - cred->radiusConfigFile = (char *)configFileBuffer.value; + gss_release_buffer(&tmpMinor, &cred->radiusConfigFile); + cred->radiusConfigFile = configFileBuffer; *minor = 0; return GSS_S_COMPLETE; @@ -66,7 +64,7 @@ setCredRadiusConfigStanza(OM_uint32 *minor, const gss_OID oid GSSEAP_UNUSED, const gss_buffer_t buffer) { - OM_uint32 major; + OM_uint32 major, tmpMinor; gss_buffer_desc configStanzaBuffer = GSS_C_EMPTY_BUFFER; if (buffer != GSS_C_NO_BUFFER && buffer->length != 0) { @@ -75,10 +73,8 @@ setCredRadiusConfigStanza(OM_uint32 *minor, return major; } - if (cred->radiusConfigStanza != NULL) - GSSEAP_FREE(cred->radiusConfigStanza); - - cred->radiusConfigStanza = (char *)configStanzaBuffer.value; + gss_release_buffer(&tmpMinor, &cred->radiusConfigStanza); + cred->radiusConfigStanza = configStanzaBuffer; *minor = 0; return GSS_S_COMPLETE; @@ -116,6 +112,24 @@ setCredFlag(OM_uint32 *minor, return GSS_S_COMPLETE; } +static OM_uint32 +setCredPassword(OM_uint32 *minor, + gss_cred_id_t cred, + const gss_OID oid GSSEAP_UNUSED, + const gss_buffer_t buffer) +{ + return gssEapSetCredPassword(minor, cred, buffer); +} + +static OM_uint32 +setCredPrivateKey(OM_uint32 *minor, + gss_cred_id_t cred, + const gss_OID oid GSSEAP_UNUSED, + const gss_buffer_t buffer) +{ + return gssEapSetCredClientCertificate(minor, cred, GSS_C_NO_BUFFER, buffer); +} + static struct { gss_OID_desc oid; OM_uint32 (*setOption)(OM_uint32 *, gss_cred_id_t cred, @@ -136,13 +150,25 @@ static struct { { 11, "\x2B\x06\x01\x04\x01\xA9\x4A\x16\x03\x03\x03" }, setCredFlag, }, + /* 1.3.6.1.4.1.5322.22.3.3.4 */ + { + { 11, "\x2B\x06\x01\x04\x01\xA9\x4A\x16\x03\x03\x04" }, + setCredPassword, + }, + /* 1.3.6.1.4.1.5322.22.3.3.5 */ + { + { 11, "\x2B\x06\x01\x04\x01\xA9\x4A\x16\x03\x03\x05" }, + setCredPrivateKey, + }, }; gss_OID GSS_EAP_CRED_SET_RADIUS_CONFIG_FILE = &setCredOps[0].oid; gss_OID GSS_EAP_CRED_SET_RADIUS_CONFIG_STANZA = &setCredOps[1].oid; gss_OID GSS_EAP_CRED_SET_CRED_FLAG = &setCredOps[2].oid; +gss_OID GSS_EAP_CRED_SET_CRED_PASSWORD = &setCredOps[3].oid; +gss_OID GSS_EAP_CRED_SET_CRED_PRIVATE_KEY = &setCredOps[4].oid; -OM_uint32 +OM_uint32 GSSAPI_CALLCONV gssspi_set_cred_option(OM_uint32 *minor, gss_cred_id_t *pCred, const gss_OID desired_object,