From c13449c6ad8a85501b49e0ee4b0e3b752046c3f9 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Tue, 26 May 2020 09:21:18 +0200 Subject: [PATCH] fixes #1214 --- .../org/cryptomator/keychain/KeychainAccessStrategy.java | 2 +- .../org/cryptomator/keychain/MacSystemKeychainAccess.java | 6 ++++-- .../keychain/WindowsProtectedKeychainAccess.java | 7 +++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/main/keychain/src/main/java/org/cryptomator/keychain/KeychainAccessStrategy.java b/main/keychain/src/main/java/org/cryptomator/keychain/KeychainAccessStrategy.java index 8976e6c55..abd50287e 100644 --- a/main/keychain/src/main/java/org/cryptomator/keychain/KeychainAccessStrategy.java +++ b/main/keychain/src/main/java/org/cryptomator/keychain/KeychainAccessStrategy.java @@ -29,7 +29,7 @@ interface KeychainAccessStrategy { void deletePassphrase(String key) throws KeychainAccessException; /** - * Updates a passphrase with a given key. + * Updates a passphrase with a given key. Noop, if there is no item for the given key. * * @param key Unique key previously used while {@link #storePassphrase(String, CharSequence) storing a passphrase}. * @param passphrase The secret to be updated in this keychain. diff --git a/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java b/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java index 95531b7ae..0021cc13d 100644 --- a/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java +++ b/main/keychain/src/main/java/org/cryptomator/keychain/MacSystemKeychainAccess.java @@ -49,8 +49,10 @@ class MacSystemKeychainAccess implements KeychainAccessStrategy { } @Override - public void changePassphrase(String key, CharSequence passphrase) throws KeychainAccessException { - storePassphrase(key, passphrase); + public void changePassphrase(String key, CharSequence passphrase) { + if (keychain().deletePassword(key)) { + keychain().storePassword(key, passphrase); + } } } diff --git a/main/keychain/src/main/java/org/cryptomator/keychain/WindowsProtectedKeychainAccess.java b/main/keychain/src/main/java/org/cryptomator/keychain/WindowsProtectedKeychainAccess.java index 408d7d6e5..6668104a4 100644 --- a/main/keychain/src/main/java/org/cryptomator/keychain/WindowsProtectedKeychainAccess.java +++ b/main/keychain/src/main/java/org/cryptomator/keychain/WindowsProtectedKeychainAccess.java @@ -115,8 +115,11 @@ class WindowsProtectedKeychainAccess implements KeychainAccessStrategy { } @Override - public void changePassphrase(String key, CharSequence passphrase) throws KeychainAccessException { - storePassphrase(key, passphrase); + public void changePassphrase(String key, CharSequence passphrase) { + loadKeychainEntriesIfNeeded(); + if (keychainEntries.remove(key) != null) { + storePassphrase(key, passphrase); + } } @Override