add KRB5_TC_MATCH_2ND_TKT field
authorJohn Kohl <jtkohl@mit.edu>
Fri, 26 Apr 1991 14:12:55 +0000 (14:12 +0000)
committerJohn Kohl <jtkohl@mit.edu>
Fri, 26 Apr 1991 14:12:55 +0000 (14:12 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@2041 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/ccache/file/fcc_retrv.c
src/lib/krb5/ccache/stdio/scc_retrv.c

index 020f444766f1b283d4d436fe70440b2f2ed178f1..af6633c3580d233c2f8fb3b68d2959f13de5aa0e 100644 (file)
@@ -36,6 +36,25 @@ static krb5_boolean srvname_match
 static krb5_boolean authdata_match
     PROTOTYPE ((krb5_authdata * const *, krb5_authdata * const *));
 
+
+static krb5_boolean
+data_match(data1, data2)
+register const krb5_data *data1, *data2;
+{
+    if (!data1) {
+       if (!data2)
+           return TRUE;
+       else
+           return FALSE;
+    }
+    if (!data2) return FALSE;
+
+    if (data1->length != data2->length)
+       return FALSE;
+    else
+       return memcmp(data1->data, data2->data, data1->length) ? FALSE : TRUE;
+}
+
 /*
  * Effects:
  * Searches the file cred cache is for a credential matching mcreds,
@@ -95,7 +114,11 @@ krb5_fcc_retrieve(id, whichfields, mcreds, creds)
               times_match(&mcreds->times, &fetchcreds.times))
              &&
              ( ! set(KRB5_TC_MATCH_AUTHDATA) ||
-              authdata_match(mcreds->authdata, fetchcreds.authdata)))
+              authdata_match(mcreds->authdata, fetchcreds.authdata))
+             &&
+             (! set(KRB5_TC_MATCH_2ND_TKT) ||
+              data_match (mcreds->second_ticket, fetchcreds.second_ticket))
+             )
          {
               krb5_fcc_end_seq_get(id, &cursor);
               *creds = fetchcreds;
index 2183d9a513e672fde0ea9b32851027dd6cc086e3..b0b7017d921f3b1ddb6f651c942a3b035f31ea7b 100644 (file)
@@ -99,6 +99,24 @@ authdata_match(mdata, data)
     return !*mdata && !*data;
 }
 
+static krb5_boolean
+data_match(data1, data2)
+register const krb5_data *data1, *data2;
+{
+    if (!data1) {
+       if (!data2)
+           return TRUE;
+       else
+           return FALSE;
+    }
+    if (!data2) return FALSE;
+
+    if (data1->length != data2->length)
+       return FALSE;
+    else
+       return memcmp(data1->data, data2->data, data1->length) ? FALSE : TRUE;
+}
+
 /*
  * Effects:
  * Searches the file cred cache is for a credential matching mcreds,
@@ -159,6 +177,9 @@ krb5_scc_retrieve(id, whichfields, mcreds, creds)
              &&
              (! set(KRB5_TC_MATCH_AUTHDATA) ||
               authdata_match (mcreds->authdata, fetchcreds.authdata))
+             &&
+             (! set(KRB5_TC_MATCH_2ND_TKT) ||
+              data_match (mcreds->second_ticket, fetchcreds.second_ticket))
              )
          {
               krb5_scc_end_seq_get(id, &cursor);