aboutsummaryrefslogtreecommitdiffstats
path: root/Source/KeyChain.m
diff options
context:
space:
mode:
authorrowanbeentje <rowan@beent.je>2009-06-04 01:44:16 +0000
committerrowanbeentje <rowan@beent.je>2009-06-04 01:44:16 +0000
commit31123c9ff149908120a5bca94e76f5023c0b7e1e (patch)
treef76933e4c19d63cd17f160919731fbb5c9162b75 /Source/KeyChain.m
parentfc748400d92a0b7874a19eba3fa573cdf1415ee5 (diff)
downloadsequelpro-31123c9ff149908120a5bca94e76f5023c0b7e1e.tar.gz
sequelpro-31123c9ff149908120a5bca94e76f5023c0b7e1e.tar.bz2
sequelpro-31123c9ff149908120a5bca94e76f5023c0b7e1e.zip
Further SSH tunnel improvements, password handling improvements, and minor bugfixes:
- SSH tunnels can now correctly show dialogs for ssh queries, eg host key mismatches - SSH tunnels are now correctly closed by the document for connection failures - Keychain password item name and account generation has been moved to within the keychain class, to centralise generation for consistency - Keychain item names and accounts now correctly deal with nil values, allowing more keychain items to be read - "Add to favorites" button and menu item now correctly store passwords and SSH tunnel settings - Duplicating favorites in preferences now selects the newly created favorite instead of deselecting everything - Fixes an occasional crasher sometimes encountered in keychain usage
Diffstat (limited to 'Source/KeyChain.m')
-rw-r--r--Source/KeyChain.m62
1 files changed, 59 insertions, 3 deletions
diff --git a/Source/KeyChain.m b/Source/KeyChain.m
index 032db61e..da3e761c 100644
--- a/Source/KeyChain.m
+++ b/Source/KeyChain.m
@@ -164,9 +164,8 @@
- (BOOL)passwordExistsForName:(NSString *)name account:(NSString *)account
{
SecKeychainItemRef item;
- SecKeychainSearchRef search;
+ SecKeychainSearchRef search = NULL;
int numberOfItemsFound = 0;
-
SecKeychainAttributeList list;
SecKeychainAttribute attributes[2];
@@ -188,9 +187,66 @@
}
}
- CFRelease(search);
+ if (search) CFRelease(search);
return (numberOfItemsFound > 0);
}
+/**
+ * Retrieve the keychain item name for a supplied name and id.
+ */
+- (NSString *)nameForFavoriteName:(NSString *)theName id:(NSString *)theID
+{
+ NSString *keychainItemName;
+
+ keychainItemName = [NSString stringWithFormat:@"Sequel Pro : %@ (%i)",
+ theName,
+ [theID intValue]];
+
+ return keychainItemName;
+}
+
+/**
+ * Retrieve the keychain item account for a supplied user, host, and database - which can be nil.
+ */
+- (NSString *)accountForUser:(NSString *)theUser host:(NSString *)theHost database:(NSString *)theDatabase
+{
+ NSString *keychainItemAccount;
+
+ keychainItemAccount = [NSString stringWithFormat:@"%@@%@/%@",
+ theUser?theUser:@"",
+ theHost?theHost:@"",
+ theDatabase?theDatabase:@""];
+
+ return keychainItemAccount;
+}
+
+/**
+ * Retrieve the keychain SSH item name for a supplied name and id.
+ */
+- (NSString *)nameForSSHForFavoriteName:(NSString *)theName id:(NSString *)theID
+{
+ NSString *sshKeychainItemName;
+
+ sshKeychainItemName = [NSString stringWithFormat:@"Sequel Pro SSHTunnel : %@ (%i)",
+ theName,
+ [theID intValue]];
+
+ return sshKeychainItemName;
+}
+
+/**
+ * Retrieve the keychain SSH item account for a supplied SSH user and host - which can be nil.
+ */
+- (NSString *)accountForSSHUser:(NSString *)theSSHUser sshHost:(NSString *)theSSHHost
+{
+ NSString *sshKeychainItemAccount;
+
+ sshKeychainItemAccount = [NSString stringWithFormat:@"%@@%@",
+ theSSHUser?theSSHUser:@"",
+ theSSHHost?theSSHHost:@""];
+
+ return sshKeychainItemAccount;
+}
+
@end