summaryrefslogtreecommitdiffstats
path: root/src/kim/lib/mac
diff options
context:
space:
mode:
authorAlexandra Ellwood <lxs@mit.edu>2008-09-27 21:31:06 +0000
committerAlexandra Ellwood <lxs@mit.edu>2008-09-27 21:31:06 +0000
commit27862be469db71abf2bcdf64837143a56a6bcd10 (patch)
tree007627581d42b21b9c250da16f911785a4f71ca0 /src/kim/lib/mac
parent0e5cb1858d790ccdc128558c6e945612f950b2b6 (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.c56
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;