Fixes for Heimdal (macOS) builds from Stefan.
[mech_eap.git] / mech_eap / inquire_cred.c
index 2e684b7..f75ccf0 100644 (file)
 
 #include "gssapiP_eap.h"
 
-OM_uint32
+OM_uint32 GSSAPI_CALLCONV
 gss_inquire_cred(OM_uint32 *minor,
+#ifdef HAVE_HEIMDAL_VERSION
+                 gss_const_cred_id_t cred,
+#else
                  gss_cred_id_t cred,
+#endif
                  gss_name_t *name,
                  OM_uint32 *pLifetime,
                  gss_cred_usage_t *cred_usage,
                  gss_OID_set *mechanisms)
 {
     OM_uint32 major;
-    time_t now, lifetime;
 
     if (cred == NULL) {
         *minor = EINVAL;
         return GSS_S_NO_CRED;
     }
 
-    GSSEAP_MUTEX_LOCK(&cred->mutex);
+    GSSEAP_MUTEX_LOCK(&((gss_cred_id_t)cred)->mutex);
 
-    if (name != NULL) {
-        major = gssEapDuplicateName(minor, cred->name, name);
-        if (GSS_ERROR(major))
-            goto cleanup;
-    }
-
-    if (cred_usage != NULL) {
-        OM_uint32 flags = (cred->flags & (CRED_FLAG_INITIATE | CRED_FLAG_ACCEPT));
-
-        switch (flags) {
-        case CRED_FLAG_INITIATE:
-            *cred_usage = GSS_C_INITIATE;
-            break;
-        case CRED_FLAG_ACCEPT:
-            *cred_usage = GSS_C_ACCEPT;
-            break;
-        default:
-            *cred_usage = GSS_C_BOTH;
-            break;
-        }
-    }
-
-    if (mechanisms != NULL) {
-        if (cred->mechanisms != GSS_C_NO_OID_SET)
-            major = duplicateOidSet(minor, cred->mechanisms, mechanisms);
-        else
-            major = gssEapIndicateMechs(minor, mechanisms);
-        if (GSS_ERROR(major))
-            goto cleanup;
-    }
-
-    if (cred->expiryTime == 0) {
-        lifetime = GSS_C_INDEFINITE;
-    } else  {
-        now = time(NULL);
-        lifetime = now - cred->expiryTime;
-        if (lifetime < 0)
-            lifetime = 0;
-    }
-
-    if (pLifetime != NULL) {
-        *pLifetime = lifetime;
-    }
-
-    if (lifetime == 0) {
-        major = GSS_S_CREDENTIALS_EXPIRED;
-        *minor = GSSEAP_CRED_EXPIRED;
-        goto cleanup;
-    }
-
-    major = GSS_S_COMPLETE;
-    *minor = 0;
+    major = gssEapInquireCred(minor, (gss_cred_id_t)cred, name, pLifetime,
+                              cred_usage, mechanisms);
 
-cleanup:
-    GSSEAP_MUTEX_UNLOCK(&cred->mutex);
+    GSSEAP_MUTEX_UNLOCK(&((gss_cred_id_t)cred)->mutex);
 
     return major;
 }