}
if (cred->radiusConfigFile != NULL)
- free(cred->radiusConfigFile);
+ GSSEAP_FREE(cred->radiusConfigFile);
cred->radiusConfigFile = (char *)configFileBuffer.value;
OM_uint32 (*setOption)(OM_uint32 *, gss_cred_id_t cred,
const gss_OID, const gss_buffer_t);
} setCredOps[] = {
- /* 1.3.6.1.4.1.5322.21.3.3.1 */
+ /* 1.3.6.1.4.1.5322.22.3.3.1 */
{
- { 11, "\x2B\x06\x01\x04\x01\xA9\x4A\x15\x03\x03\x01" },
+ { 11, "\x2B\x06\x01\x04\x01\xA9\x4A\x16\x03\x03\x01" },
setCredRadiusConfig,
},
- /* 1.3.6.1.4.1.5322.21.3.3.2 */
+ /* 1.3.6.1.4.1.5322.22.3.3.2 */
{
- { 11, "\x2B\x06\x01\x04\x01\xA9\x4A\x15\x03\x03\x02" },
+ { 11, "\x2B\x06\x01\x04\x01\xA9\x4A\x16\x03\x03\x02" },
setCredFlag,
},
};
OM_uint32
gssspi_set_cred_option(OM_uint32 *minor,
- gss_cred_id_t cred,
+ gss_cred_id_t *pCred,
const gss_OID desired_object,
const gss_buffer_t value)
{
OM_uint32 major = GSS_S_UNAVAILABLE;
+ gss_cred_id_t cred = *pCred;
int i;
+ if (cred == GSS_C_NO_CREDENTIAL)
+ return GSS_S_UNAVAILABLE;
+
+ GSSEAP_MUTEX_LOCK(&cred->mutex);
+
for (i = 0; i < sizeof(setCredOps) / sizeof(setCredOps[0]); i++) {
if (oidEqual(&setCredOps[i].oid, desired_object)) {
major = (*setCredOps[i].setOption)(minor, cred,
- desired_object, value);
+ desired_object, value);
break;
}
}
+ GSSEAP_MUTEX_UNLOCK(&cred->mutex);
+
return major;
}