diff options
| author | Alexandra Ellwood <lxs@mit.edu> | 2008-09-27 21:31:06 +0000 |
|---|---|---|
| committer | Alexandra Ellwood <lxs@mit.edu> | 2008-09-27 21:31:06 +0000 |
| commit | 27862be469db71abf2bcdf64837143a56a6bcd10 (patch) | |
| tree | 007627581d42b21b9c250da16f911785a4f71ca0 /src/kim/lib/mac | |
| parent | 0e5cb1858d790ccdc128558c6e945612f950b2b6 (diff) | |
Renamed kim_identity_get_components to kim_identity_get_components_string
to better reflect what it does (a string of everything but the realm, not
an array of components like the old name might imply).
Added private functions which will be used by KLL to shim on top of KIM.
Private functions also reduce memory allocations inside of KIM.
ticket: 6055
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20766 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kim/lib/mac')
| -rw-r--r-- | src/kim/lib/mac/kim_os_identity.c | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/src/kim/lib/mac/kim_os_identity.c b/src/kim/lib/mac/kim_os_identity.c index c25729b75..690a2f252 100644 --- a/src/kim/lib/mac/kim_os_identity.c +++ b/src/kim/lib/mac/kim_os_identity.c @@ -45,7 +45,7 @@ kim_error kim_os_identity_get_saved_password (kim_identity in_identity, if (!err && !out_password) { err = check_error (KIM_NULL_PARAMETER_ERR); } if (!err) { - err = kim_identity_get_components (in_identity, &name); + err = kim_identity_get_components_string (in_identity, &name); } if (!err) { @@ -86,7 +86,7 @@ kim_error kim_os_identity_set_saved_password (kim_identity in_identity, if (!err && !in_password) { err = check_error (KIM_NULL_PARAMETER_ERR); } if (!err) { - err = kim_identity_get_components (in_identity, &name); + err = kim_identity_get_components_string (in_identity, &name); } if (!err) { @@ -142,8 +142,9 @@ kim_error kim_os_identity_set_saved_password (kim_identity in_identity, attrInfo.tag = &tag; attrInfo.format = &format; - err = SecKeychainItemCopyAttributesAndData (itemRef, &attrInfo, NULL, - &copiedAttrs, 0, NULL); + err = SecKeychainItemCopyAttributesAndData (itemRef, &attrInfo, + NULL, &copiedAttrs, + 0, NULL); if (!err) { /* Label format used by Apple patches */ @@ -183,6 +184,53 @@ kim_error kim_os_identity_set_saved_password (kim_identity in_identity, /* ------------------------------------------------------------------------ */ +kim_error kim_os_identity_remove_saved_password (kim_identity in_identity) +{ + kim_error err = KIM_NO_ERROR; + kim_string realm = NULL; + kim_string name = NULL; + + if (!err && !in_identity) { err = check_error (KIM_NULL_PARAMETER_ERR); } + + if (!err) { + err = kim_identity_get_components_string (in_identity, &name); + } + + if (!err) { + err = kim_identity_get_realm (in_identity, &realm); + } + + if (!err) { + SecKeychainItemRef itemRef = NULL; + UInt32 namelen = strlen (name); + UInt32 realmlen = strlen (realm); + void *buffer = NULL; + UInt32 length = 0; + + err = SecKeychainFindGenericPassword (nil, + realmlen, realm, + namelen, name, + &length, &buffer, + &itemRef); + + if (!err) { + err = SecKeychainItemDelete (itemRef); + + } else if (err == errSecItemNotFound) { + err = KIM_NO_ERROR; /* No password not an error */ + } + + if (itemRef) { CFRelease (itemRef); } + } + + if (name ) { kim_string_free (&name); } + if (realm) { kim_string_free (&realm); } + + return check_error (err); +} + +/* ------------------------------------------------------------------------ */ + kim_error kim_os_identity_create_for_username (kim_identity *out_identity) { kim_error err = KIM_NO_ERROR; |
