diff options
author | James Moger <james.moger@gitblit.com> | 2014-03-27 13:48:51 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2014-04-10 19:00:05 -0400 |
commit | ab07d0d86d8b64b4f7c88b45bc81f1eec22105db (patch) | |
tree | d2837679c92987e6a9eb5c65bb484a4e77854700 /src/main/java/com/gitblit/transport/ssh | |
parent | 53b312fdc03e797d751d73e79a58e2b2bb3f9e87 (diff) | |
download | gitblit-ab07d0d86d8b64b4f7c88b45bc81f1eec22105db.tar.gz gitblit-ab07d0d86d8b64b4f7c88b45bc81f1eec22105db.zip |
Preserve key index when re-adding an existing key
Diffstat (limited to 'src/main/java/com/gitblit/transport/ssh')
-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"); |