diff options
author | Alexandra Ellwood <lxs@mit.edu> | 2008-03-10 21:27:30 +0000 |
---|---|---|
committer | Alexandra Ellwood <lxs@mit.edu> | 2008-03-10 21:27:30 +0000 |
commit | 5026edd353101897006cecf70ede3eaca67ace91 (patch) | |
tree | cd6dc48d5b77f6e8d9377b118f07d923e8f660f8 | |
parent | 824574606a1be446bfa013bec46adc306632103d (diff) | |
download | krb5-5026edd353101897006cecf70ede3eaca67ace91.zip krb5-5026edd353101897006cecf70ede3eaca67ace91.tar.gz krb5-5026edd353101897006cecf70ede3eaca67ace91.tar.bz2 |
cc_remove_cred should only remove one cred
Fixed cc_remove_cred so it only removes the first matching
cred. Also fixed the error handling so it returns errors
other than CC_NOTFOUND.
ticket: new
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20264 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r-- | src/ccapi/lib/ccapi_v2.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/ccapi/lib/ccapi_v2.c b/src/ccapi/lib/ccapi_v2.c index ffeb1d6..ba2ed4a 100644 --- a/src/ccapi/lib/ccapi_v2.c +++ b/src/ccapi/lib/ccapi_v2.c @@ -544,36 +544,36 @@ cc_result cc_remove_cred (apiCB *in_context, { cc_result err = ccNoError; cc_credentials_iterator_t iterator = NULL; + cc_uint32 found = 0; - if (!in_context ) { err = cci_check_error (ccErrBadParam); } - if (!in_ccache ) { err = cci_check_error (ccErrBadParam); } + if (!in_context) { err = cci_check_error (ccErrBadParam); } + if (!in_ccache ) { err = cci_check_error (ccErrBadParam); } if (!err) { err = ccapi_ccache_new_credentials_iterator (in_ccache, &iterator); } - while (!err) { + while (!err && !found) { cc_credentials_t creds = NULL; - cc_uint32 equal = 0; err = ccapi_credentials_iterator_next (iterator, &creds); if (!err) { err = cci_cred_union_compare_to_credentials_union (&in_credentials, creds->data, - &equal); + &found); } - if (!err && equal) { + if (!err && found) { err = ccapi_ccache_remove_credentials (in_ccache, creds); } ccapi_credentials_release (creds); } - if (err) { err = cci_check_error (ccErrCredentialsNotFound); } + if (err == ccIteratorEnd) { err = cci_check_error (ccErrCredentialsNotFound); } return cci_remap_error (err); -} +} #if TARGET_OS_MAC #pragma mark - |