summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/transport/ssh
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2014-03-27 13:48:51 -0400
committerJames Moger <james.moger@gitblit.com>2014-04-10 19:00:05 -0400
commitab07d0d86d8b64b4f7c88b45bc81f1eec22105db (patch)
treed2837679c92987e6a9eb5c65bb484a4e77854700 /src/main/java/com/gitblit/transport/ssh
parent53b312fdc03e797d751d73e79a58e2b2bb3f9e87 (diff)
downloadgitblit-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.java16
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");