diff options
author | Jeffrey Altman <jaltman@secure-endpoints.com> | 2004-09-10 19:33:39 +0000 |
---|---|---|
committer | Jeffrey Altman <jaltman@secure-endpoints.com> | 2004-09-10 19:33:39 +0000 |
commit | 870b1c33852f7e0a36fbac41043d4d60caa67eb9 (patch) | |
tree | 8c4608bf88166efcc64db713cf994fb45dbeec93 /src/lib/krb5/ccache/cc_mslsa.c | |
parent | 3a290273e0f947efa014831652526b49192cdcc4 (diff) | |
download | krb5-870b1c33852f7e0a36fbac41043d4d60caa67eb9.tar.gz krb5-870b1c33852f7e0a36fbac41043d4d60caa67eb9.tar.xz krb5-870b1c33852f7e0a36fbac41043d4d60caa67eb9.zip |
* 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
Diffstat (limited to 'src/lib/krb5/ccache/cc_mslsa.c')
-rw-r--r-- | src/lib/krb5/ccache/cc_mslsa.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/lib/krb5/ccache/cc_mslsa.c b/src/lib/krb5/ccache/cc_mslsa.c index 9b8025c77..f594c895a 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: |