X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=util_context.c;h=03bad1c44bd393d2173eed37bab63cc46ef2a7bf;hb=refs%2Fheads%2Fmeeting%2Fmoonshot2;hp=37bdb3866a07c90ffd17d076a3b8691883efe7a4;hpb=8f57ef91f6f6dc070405104f701aa8bd05789e43;p=mech_eap.orig diff --git a/util_context.c b/util_context.c index 37bdb38..03bad1c 100644 --- a/util_context.c +++ b/util_context.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. */ +/* + * Utility routines for context handles. + */ + #include "gssapiP_eap.h" OM_uint32 @@ -53,7 +57,7 @@ gssEapAllocContext(OM_uint32 *minor, return GSS_S_FAILURE; } - ctx->state = EAP_STATE_IDENTITY; + ctx->state = GSSEAP_STATE_INITIAL; /* * Integrity, confidentiality, sequencing and replay detection are @@ -76,9 +80,6 @@ gssEapAllocContext(OM_uint32 *minor, static void releaseInitiatorContext(struct gss_eap_initiator_ctx *ctx) { - OM_uint32 minor; - - gssEapReleaseCred(&minor, &ctx->defaultCred); eap_peer_sm_deinit(ctx->eap); } @@ -87,12 +88,15 @@ releaseAcceptorContext(struct gss_eap_acceptor_ctx *ctx) { OM_uint32 tmpMinor; - if (ctx->avps != NULL) - rc_avpair_free(ctx->avps); - if (ctx->radHandle != NULL) - rc_config_free(ctx->radHandle); - + if (ctx->radConn != NULL) + rs_conn_destroy(ctx->radConn); + if (ctx->radContext != NULL) + rs_context_destroy(ctx->radContext); + if (ctx->radServer != NULL) + GSSEAP_FREE(ctx->radServer); gss_release_buffer(&tmpMinor, &ctx->state); + if (ctx->vps != NULL) + gssEapRadiusFreeAvps(&tmpMinor, &ctx->vps); } OM_uint32 @@ -110,7 +114,7 @@ gssEapReleaseContext(OM_uint32 *minor, gssEapKerberosInit(&tmpMinor, &krbContext); #ifdef GSSEAP_ENABLE_REAUTH - if (ctx->flags & CTX_FLAG_KRB_REAUTH_GSS) { + if (ctx->flags & CTX_FLAG_KRB_REAUTH) { gssDeleteSecContext(&tmpMinor, &ctx->kerberosCtx, GSS_C_NO_BUFFER); } else #endif @@ -123,8 +127,9 @@ gssEapReleaseContext(OM_uint32 *minor, krb5_free_keyblock_contents(krbContext, &ctx->rfc3961Key); gssEapReleaseName(&tmpMinor, &ctx->initiatorName); gssEapReleaseName(&tmpMinor, &ctx->acceptorName); - gss_release_oid(&tmpMinor, &ctx->mechanismUsed); + gssEapReleaseOid(&tmpMinor, &ctx->mechanismUsed); sequenceFree(&tmpMinor, &ctx->seqState); + gssEapReleaseCred(&tmpMinor, &ctx->defaultCred); GSSEAP_MUTEX_DESTROY(&ctx->mutex); @@ -187,8 +192,10 @@ gssEapVerifyToken(OM_uint32 *minor, return major; if (ctx->mechanismUsed == GSS_C_NO_OID) { - if (!gssEapIsConcreteMechanismOid(oid)) + if (!gssEapIsConcreteMechanismOid(oid)) { + *minor = GSSEAP_WRONG_MECH; return GSS_S_BAD_MECH; + } if (!gssEapInternalizeOid(oid, &ctx->mechanismUsed)) { major = duplicateOid(minor, oid, &ctx->mechanismUsed); @@ -209,14 +216,6 @@ gssEapContextTime(OM_uint32 *minor, gss_ctx_id_t context_handle, OM_uint32 *time_rec) { - if (context_handle == GSS_C_NO_CONTEXT) { - return GSS_S_NO_CONTEXT; - } - - if (!CTX_IS_ESTABLISHED(context_handle)) { - return GSS_S_NO_CONTEXT; - } - *minor = 0; if (context_handle->expiryTime == 0) {