aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey Altman <jaltman@secure-endpoints.com>2004-09-10 19:33:39 +0000
committerJeffrey Altman <jaltman@secure-endpoints.com>2004-09-10 19:33:39 +0000
commit870b1c33852f7e0a36fbac41043d4d60caa67eb9 (patch)
tree8c4608bf88166efcc64db713cf994fb45dbeec93
parent3a290273e0f947efa014831652526b49192cdcc4 (diff)
downloadkrb5-870b1c33852f7e0a36fbac41043d4d60caa67eb9.zip
krb5-870b1c33852f7e0a36fbac41043d4d60caa67eb9.tar.gz
krb5-870b1c33852f7e0a36fbac41043d4d60caa67eb9.tar.bz2
* cc_mslsa.c: Implement krb5_lcc_initialize()
Remove all tickets from the cache which have a client principal that matches the input principal. ticket: 2705 git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16737 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/krb5/ccache/ChangeLog5
-rw-r--r--src/lib/krb5/ccache/cc_mslsa.c36
2 files changed, 35 insertions, 6 deletions
diff --git a/src/lib/krb5/ccache/ChangeLog b/src/lib/krb5/ccache/ChangeLog
index 42ae603..1d51b69 100644
--- a/src/lib/krb5/ccache/ChangeLog
+++ b/src/lib/krb5/ccache/ChangeLog
@@ -1,4 +1,9 @@
2004-09-10 Jeffrey Altman <jaltman@mit.edu>
+ * cc_mslsa.c: Implement krb5_lcc_initialize()
+ Remove all tickets from the cache which have a client
+ principal that matches the input principal.
+
+2004-09-10 Jeffrey Altman <jaltman@mit.edu>
* cc_mslsa.c: Correct test for KerbQueryTicketCacheExMessage
2004-09-09 Jeffrey Altman <jaltman@mit.edu>
diff --git a/src/lib/krb5/ccache/cc_mslsa.c b/src/lib/krb5/ccache/cc_mslsa.c
index 9b8025c..f594c89 100644
--- a/src/lib/krb5/ccache/cc_mslsa.c
+++ b/src/lib/krb5/ccache/cc_mslsa.c
@@ -1917,19 +1917,43 @@ krb5_lcc_resolve (krb5_context context, krb5_ccache *id, const char *residual)
}
/*
- * return success although we do not do anything
- * perhaps we could purge all existing tickets but that is
- * probably not wise
- */
+* return success although we do not do anything
+* We should delete all tickets belonging to the specified principal
+*/
+
+static krb5_error_code KRB5_CALLCONV
+krb5_lcc_remove_cred(krb5_context context, krb5_ccache id, krb5_flags flags,
+ krb5_creds *creds);
+
static krb5_error_code KRB5_CALLCONV
krb5_lcc_initialize(krb5_context context, krb5_ccache id, krb5_principal princ)
{
+ krb5_cc_cursor cursor;
+ krb5_error_code code;
+ krb5_creds cred;
+
if (!is_windows_2000())
return KRB5_FCC_NOFILE;
- return KRB5_OK;
-}
+ code = krb5_cc_start_seq_get(context, id, &cursor);
+ if (code)
+ return code;
+ while ( !(code = krb5_cc_next_cred(context, id, &cursor, &cred)) )
+ {
+ if ( krb5_principal_compare(context, princ, cred.client) ) {
+ code = krb5_lcc_remove_cred(context, id, 0, &cred);
+ }
+ krb5_free_cred_contents(context, &cred);
+ }
+
+ if (code == KRB5_CC_END || code == KRB5_CC_NOTFOUND)
+ {
+ krb5_cc_end_seq_get(context, id, &cursor);
+ return KRB5_OK;
+ }
+ return code;
+}
/*
* Modifies: