From f78252011625ce15d860e8c2272dbd5907f1f3f9 Mon Sep 17 00:00:00 2001 From: rowanbeentje Date: Tue, 8 May 2012 22:40:43 +0000 Subject: - Fix crashes when duplicating favourites --- Source/SPConnectionController.m | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'Source') diff --git a/Source/SPConnectionController.m b/Source/SPConnectionController.m index 82b4e0c7..890dc735 100644 --- a/Source/SPConnectionController.m +++ b/Source/SPConnectionController.m @@ -843,26 +843,28 @@ static NSComparisonResult _compareFavoritesUsingKey(id favorite1, id favorite2, // Create new keychain items if appropriate if (password && [password length]) { - NSString *keychainName = [keychain nameForFavoriteName:[favorite objectForKey:SPFavoriteNameKey] id:[favorite objectForKey:SPFavoriteIDKey]]; - NSString *keychainAccount = [keychain accountForUser:[favorite objectForKey:SPFavoriteUserKey] host:((duplicatedFavoriteType == SPSocketConnection) ? @"localhost" : [favorite objectForKey:SPFavoriteHostKey]) database:[favorite objectForKey:SPFavoriteDatabaseKey]]; - NSString *favoritePassword = [keychain getPasswordForName:keychainName account:keychainAccount]; - - keychainName = [keychain nameForFavoriteName:[favorite objectForKey:SPFavoriteNameKey] id:[favorite objectForKey:SPFavoriteIDKey]]; - - [keychain addPassword:favoritePassword forName:keychainName account:keychainAccount]; - + NSString *oldKeychainName = [keychain nameForFavoriteName:[[self selectedFavorite] objectForKey:SPFavoriteNameKey] id:[[self selectedFavorite] objectForKey:SPFavoriteIDKey]]; + NSString *newKeychainName = [keychain nameForFavoriteName:[favorite objectForKey:SPFavoriteNameKey] id:[favorite objectForKey:SPFavoriteIDKey]]; + + NSString *keychainAccount = [keychain accountForUser:[favorite objectForKey:SPFavoriteUserKey] host:((duplicatedFavoriteType == SPSocketConnection) ? @"localhost" : [favorite objectForKey:SPFavoriteHostKey]) database:[favorite objectForKey:SPFavoriteDatabaseKey]]; + + NSString *favoritePassword = [keychain getPasswordForName:oldKeychainName account:keychainAccount]; + + [keychain addPassword:favoritePassword forName:newKeychainName account:keychainAccount]; + favoritePassword = nil; } if (sshPassword && [sshPassword length]) { - NSString *keychainSSHName = [keychain nameForSSHForFavoriteName:[favorite objectForKey:SPFavoriteNameKey] id:[favorite objectForKey:SPFavoriteIDKey]]; - NSString *keychainSSHAccount = [keychain accountForSSHUser:[favorite objectForKey:SPFavoriteSSHUserKey] sshHost:[favorite objectForKey:SPFavoriteSSHHostKey]]; - NSString *favoriteSSHPassword = [keychain getPasswordForName:keychainSSHName account:keychainSSHAccount]; - - keychainSSHName = [keychain nameForSSHForFavoriteName:[favorite objectForKey:SPFavoriteNameKey] id:[favorite objectForKey:SPFavoriteIDKey]]; - - [keychain addPassword:favoriteSSHPassword forName:keychainSSHName account:keychainSSHAccount]; - + NSString *oldKeychainSSHName = [keychain nameForSSHForFavoriteName:[[self selectedFavorite] objectForKey:SPFavoriteNameKey] id:[[self selectedFavorite] objectForKey:SPFavoriteIDKey]]; + NSString *newKeychainSSHName = [keychain nameForSSHForFavoriteName:[favorite objectForKey:SPFavoriteNameKey] id:[favorite objectForKey:SPFavoriteIDKey]]; + + NSString *keychainSSHAccount = [keychain accountForSSHUser:[favorite objectForKey:SPFavoriteSSHUserKey] sshHost:[favorite objectForKey:SPFavoriteSSHHostKey]]; + + NSString *favoriteSSHPassword = [keychain getPasswordForName:oldKeychainSSHName account:keychainSSHAccount]; + + [keychain addPassword:favoriteSSHPassword forName:newKeychainSSHName account:keychainSSHAccount]; + favoriteSSHPassword = nil; } -- cgit v1.2.3