diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/gitblit/transport/ssh/FileKeyManager.java | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java b/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java index 8a3d2ff5..77f818c3 100644 --- a/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java +++ b/src/main/java/com/gitblit/transport/ssh/FileKeyManager.java @@ -130,7 +130,7 @@ public class FileKeyManager extends IPublicKeyManager { public boolean addKey(String username, SshKey key) { try { String newKey = stripCommentFromKey(key.getRawData()); - + boolean replaced = false; List<String> lines = new ArrayList<String>(); File keystore = getKeystore(username); if (keystore.exists()) { @@ -147,16 +147,22 @@ public class FileKeyManager extends IPublicKeyManager { continue; } - // only add keys that do not match the new key String oldKey = stripCommentFromKey(line); - if (!newKey.equals(oldKey)) { + if (newKey.equals(oldKey)) { + // replace key + lines.add(key.getRawData()); + replaced = true; + } else { + // retain key lines.add(entry); } } } - // add new key - lines.add(key.getRawData()); + if (!replaced) { + // new key, append + lines.add(key.getRawData()); + } // write keystore String content = Joiner.on("\n").join(lines).trim().concat("\n"); |