diff options
author | rowanbeentje <rowan@beent.je> | 2009-06-04 01:44:16 +0000 |
---|---|---|
committer | rowanbeentje <rowan@beent.je> | 2009-06-04 01:44:16 +0000 |
commit | 31123c9ff149908120a5bca94e76f5023c0b7e1e (patch) | |
tree | f76933e4c19d63cd17f160919731fbb5c9162b75 /Source/KeyChain.m | |
parent | fc748400d92a0b7874a19eba3fa573cdf1415ee5 (diff) | |
download | sequelpro-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.m | 62 |
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 |