X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=util_cred.c;h=1377f5e9c08c199da3d12648770088581abd27b0;hb=d4fe7ce93304facaf069792c347b01b25ab765ae;hp=984ebac31804c78d946f27c8a9cce7e2aeda7fee;hpb=fccb62a45fe5beeb53a8660237e2919760e9e2c2;p=mech_eap.orig diff --git a/util_cred.c b/util_cred.c index 984ebac..1377f5e 100644 --- a/util_cred.c +++ b/util_cred.c @@ -38,7 +38,7 @@ gssEapAllocCred(OM_uint32 *minor, gss_cred_id_t *pCred) OM_uint32 tmpMinor; gss_cred_id_t cred; - assert(*pCred == GSS_C_NO_CREDENTIAL); + *pCred = GSS_C_NO_CREDENTIAL; cred = (gss_cred_id_t)GSSEAP_CALLOC(1, sizeof(*cred)); if (cred == NULL) { @@ -52,8 +52,6 @@ gssEapAllocCred(OM_uint32 *minor, gss_cred_id_t *pCred) return GSS_S_FAILURE; } - cred->expiryTime = ~0; - *pCred = cred; *minor = 0; @@ -106,11 +104,39 @@ gssEapAcquireCred(OM_uint32 *minor, if (GSS_ERROR(major)) goto cleanup; + switch (credUsage) { + case GSS_C_BOTH: + cred->flags |= CRED_FLAG_INITIATE | CRED_FLAG_ACCEPT; + break; + case GSS_C_INITIATE: + cred->flags |= CRED_FLAG_INITIATE; + break; + case GSS_C_ACCEPT: + cred->flags |= CRED_FLAG_ACCEPT; + break; + default: + major = GSS_S_FAILURE; + goto cleanup; + break; + } + if (desiredName != GSS_C_NO_NAME) { major = gss_duplicate_name(minor, desiredName, &cred->name); if (GSS_ERROR(major)) goto cleanup; } else { + if (cred->flags & CRED_FLAG_INITIATE) { + gss_buffer_desc buf; + + buf.value = getlogin(); /* XXX */ + buf.length = strlen((char *)buf.value); + + major = gss_import_name(&minor, &buf, + GSS_C_NT_USER_NAME, &cred->name); + if (GSS_ERROR(major)) + goto cleanup; + } + cred->flags |= CRED_FLAG_DEFAULT_IDENTITY; } @@ -130,22 +156,6 @@ gssEapAcquireCred(OM_uint32 *minor, if (GSS_ERROR(major)) goto cleanup; - switch (credUsage) { - case GSS_C_BOTH: - cred->flags |= CRED_FLAG_INITIATE | CRED_FLAG_ACCEPT; - break; - case GSS_C_INITIATE: - cred->flags |= CRED_FLAG_INITIATE; - break; - case GSS_C_ACCEPT: - cred->flags |= CRED_FLAG_ACCEPT; - break; - default: - major = GSS_S_FAILURE; - goto cleanup; - break; - } - if (pActualMechs != NULL) { major = duplicateOidSet(minor, cred->mechanisms, pActualMechs); if (GSS_ERROR(major))