Fixes for Heimdal (macOS) builds from Stefan.
[mech_eap.git] / mech_eap / util_crypt.c
index f230da2..9906b83 100644 (file)
@@ -112,10 +112,10 @@ mapIov(krb5_context context, int dce_style, size_t ec, size_t rrc,
     *pkiov_count = 0;
 
     header = gssEapLocateIov(iov, iov_count, GSS_IOV_BUFFER_TYPE_HEADER);
-    assert(header != NULL);
+    GSSEAP_ASSERT(header != NULL);
 
     trailer = gssEapLocateIov(iov, iov_count, GSS_IOV_BUFFER_TYPE_TRAILER);
-    assert(trailer == NULL || rrc == 0);
+    GSSEAP_ASSERT(trailer == NULL || rrc == 0);
 
     code = krbCryptoLength(context, crypto, KRB5_CRYPTO_TYPE_HEADER, &k5_headerlen);
     if (code != 0)
@@ -140,7 +140,6 @@ mapIov(krb5_context context, int dce_style, size_t ec, size_t rrc,
             return KRB5_BAD_MSIZE;
 
         gss_headerlen += gss_trailerlen;
-        gss_trailerlen = 0;
     } else {
         if (trailer->buffer.length != gss_trailerlen)
             return KRB5_BAD_MSIZE;
@@ -191,7 +190,7 @@ mapIov(krb5_context context, int dce_style, size_t ec, size_t rrc,
      */
     kiov[i].flags = KRB5_CRYPTO_TYPE_TRAILER;
     kiov[i].data.length = k5_trailerlen;
-    kiov[i].data.data = kiov[i - 1].data.data + ec + 16; /* E(Header) */
+    kiov[i].data.data = (char *)kiov[i - 1].data.data + ec + 16; /* E(Header) */
     i++;
 
     *pkiov = kiov;
@@ -316,6 +315,15 @@ gssEapLocateIov(gss_iov_buffer_desc *iov, int iov_count, OM_uint32 type)
     return p;
 }
 
+gss_iov_buffer_t
+gssEapLocateHeaderIov(gss_iov_buffer_desc *iov, int iov_count, enum gss_eap_token_type toktype)
+{
+    if (toktype == TOK_TYPE_MIC)
+        return gssEapLocateIov(iov, iov_count, GSS_IOV_BUFFER_TYPE_MIC_TOKEN);
+    else
+        return gssEapLocateIov(iov, iov_count, GSS_IOV_BUFFER_TYPE_HEADER);
+}
+
 void
 gssEapIovMessageLength(gss_iov_buffer_desc *iov,
                        int iov_count,
@@ -325,7 +333,7 @@ gssEapIovMessageLength(gss_iov_buffer_desc *iov,
     int i;
     size_t data_length = 0, assoc_data_length = 0;
 
-    assert(iov != GSS_C_NO_IOV_BUFFER);
+    GSSEAP_ASSERT(iov != GSS_C_NO_IOV_BUFFER);
 
     *data_length_p = *assoc_data_length_p = 0;
 
@@ -350,7 +358,7 @@ gssEapReleaseIov(gss_iov_buffer_desc *iov, int iov_count)
     int i;
     OM_uint32 min_stat;
 
-    assert(iov != GSS_C_NO_IOV_BUFFER);
+    GSSEAP_ASSERT(iov != GSS_C_NO_IOV_BUFFER);
 
     for (i = 0; i < iov_count; i++) {
         if (iov[i].type & GSS_IOV_BUFFER_FLAG_ALLOCATED) {
@@ -366,7 +374,7 @@ gssEapIsIntegrityOnly(gss_iov_buffer_desc *iov, int iov_count)
     int i;
     krb5_boolean has_conf_data = FALSE;
 
-    assert(iov != GSS_C_NO_IOV_BUFFER);
+    GSSEAP_ASSERT(iov != GSS_C_NO_IOV_BUFFER);
 
     for (i = 0; i < iov_count; i++) {
         if (GSS_IOV_BUFFER_TYPE(iov[i].type) == GSS_IOV_BUFFER_TYPE_DATA) {
@@ -381,8 +389,8 @@ gssEapIsIntegrityOnly(gss_iov_buffer_desc *iov, int iov_count)
 int
 gssEapAllocIov(gss_iov_buffer_t iov, size_t size)
 {
-    assert(iov != GSS_C_NO_IOV_BUFFER);
-    assert(iov->type & GSS_IOV_BUFFER_FLAG_ALLOCATE);
+    GSSEAP_ASSERT(iov != GSS_C_NO_IOV_BUFFER);
+    GSSEAP_ASSERT(iov->type & GSS_IOV_BUFFER_FLAG_ALLOCATE);
 
     iov->buffer.length = size;
     iov->buffer.value = GSSEAP_MALLOC(size);