return GSS_S_CREDENTIALS_EXPIRED if credentials expired
authorLuke Howard <lukeh@padl.com>
Mon, 4 Apr 2011 15:41:18 +0000 (01:41 +1000)
committerLuke Howard <lukeh@padl.com>
Mon, 4 Apr 2011 15:41:18 +0000 (01:41 +1000)
mech_eap/accept_sec_context.c
mech_eap/gsseap_err.et
mech_eap/inquire_cred.c

index a0421ea..d54ea48 100644 (file)
@@ -121,6 +121,11 @@ acceptReadyEap(OM_uint32 *minor, gss_ctx_id_t ctx, gss_cred_id_t cred)
     if (GSS_ERROR(major))
         return major;
 
+    if (ctx->expiryTime < time(NULL)) {
+        *minor = GSSEAP_CRED_EXPIRED;
+        return GSS_S_CREDENTIALS_EXPIRED;
+    }
+
     *minor = 0;
     return GSS_S_COMPLETE;
 }
index 8349773..6bcfff0 100644 (file)
@@ -78,10 +78,10 @@ error_code GSSEAP_BAD_NAME_TOKEN,               "Name token is malformed or corr
 error_code GSSEAP_BAD_USAGE,                    "Credential usage type is unknown"
 error_code GSSEAP_CRED_USAGE_MISMATCH,          "Credential usage does not match requested usage"
 error_code GSSEAP_CRED_MECH_MISMATCH,           "Credential is not usable with this mechanism"
+error_code GSSEAP_CRED_EXPIRED,                 "Attributes indicate credentials have expired"
 error_code GSSEAP_BAD_CRED_OPTION,              "Bad credential option"
 error_code GSSEAP_NO_DEFAULT_IDENTITY,          "Default credentials identity unavailable"
 error_code GSSEAP_NO_DEFAULT_CRED,              "Missing default password or other credentials"
-
 #
 # Wrap/unwrap/PRF errors
 #
index 243276d..2e684b7 100644 (file)
@@ -45,6 +45,7 @@ gss_inquire_cred(OM_uint32 *minor,
                  gss_OID_set *mechanisms)
 {
     OM_uint32 major;
+    time_t now, lifetime;
 
     if (cred == NULL) {
         *minor = EINVAL;
@@ -59,21 +60,6 @@ gss_inquire_cred(OM_uint32 *minor,
             goto cleanup;
     }
 
-    if (pLifetime != NULL) {
-        time_t now, lifetime;
-
-        if (cred->expiryTime == 0) {
-            lifetime = GSS_C_INDEFINITE;
-        } else  {
-            now = time(NULL);
-            lifetime = now - cred->expiryTime;
-            if (lifetime < 0)
-                lifetime = 0;
-        }
-
-        *pLifetime = lifetime;
-    }
-
     if (cred_usage != NULL) {
         OM_uint32 flags = (cred->flags & (CRED_FLAG_INITIATE | CRED_FLAG_ACCEPT));
 
@@ -99,6 +85,25 @@ gss_inquire_cred(OM_uint32 *minor,
             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;