X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=mech_eap%2Fimport_sec_context.c;h=1533a1661e7a933e407d0cb14f786c580dc3fb9a;hb=HEAD;hp=a2a712c69565abadb6fcc9c559ec4ff01b7f83de;hpb=5bf61a81066da96847e6317c00db9d4f96447db2;p=mech_eap.orig diff --git a/mech_eap/import_sec_context.c b/mech_eap/import_sec_context.c index a2a712c..1533a16 100644 --- a/mech_eap/import_sec_context.c +++ b/mech_eap/import_sec_context.c @@ -106,7 +106,7 @@ gssEapImportPartialContext(OM_uint32 *minor, } #ifdef GSSEAP_DEBUG - assert(remain == 0); + GSSEAP_ASSERT(remain == 0); #endif *pBuf = p; @@ -152,13 +152,19 @@ importKerberosKey(OM_uint32 *minor, size_t *pRemain, krb5_cksumtype *checksumType, krb5_enctype *pEncryptionType, - krb5_keyblock *key) + krb5_keyblock *pKey) { unsigned char *p = *pBuf; size_t remain = *pRemain; OM_uint32 encryptionType; OM_uint32 length; - gss_buffer_desc tmp; + krb5_context krbContext; + krb5_keyblock key; + krb5_error_code code; + + GSSEAP_KRB_INIT(&krbContext); + + KRB_KEY_INIT(pKey); if (remain < 12) { *minor = GSSEAP_TOK_TRUNC; @@ -179,14 +185,19 @@ importKerberosKey(OM_uint32 *minor, return GSS_S_DEFECTIVE_TOKEN; } - if (load_buffer(&p[12], length, &tmp) == NULL) { - *minor = ENOMEM; - return GSS_S_FAILURE; - } + if (encryptionType != ENCTYPE_NULL) { + KRB_KEY_INIT(&key); - KRB_KEY_TYPE(key) = encryptionType; - KRB_KEY_LENGTH(key) = tmp.length; - KRB_KEY_DATA(key) = (unsigned char *)tmp.value; + KRB_KEY_TYPE(&key) = encryptionType; + KRB_KEY_LENGTH(&key) = length; + KRB_KEY_DATA(&key) = &p[12]; + + code = krb5_copy_keyblock_contents(krbContext, &key, pKey); + if (code != 0) { + *minor = code; + return GSS_S_FAILURE; + } + } *pBuf += 12 + length; *pRemain -= 12 + length; @@ -234,7 +245,7 @@ importName(OM_uint32 *minor, return GSS_S_COMPLETE; } -static OM_uint32 +OM_uint32 gssEapImportContext(OM_uint32 *minor, gss_buffer_t token, gss_ctx_id_t ctx) @@ -319,7 +330,7 @@ gssEapImportContext(OM_uint32 *minor, } #ifdef GSSEAP_DEBUG - assert(remain == 0); + GSSEAP_ASSERT(remain == 0); #endif #endif /* GSSEAP_ENABLE_ACCEPTOR */