You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by gn...@apache.org on 2014/09/15 09:14:56 UTC
git commit: SSHD-334: add option to disable key-pair overwrite.
Repository: mina-sshd
Updated Branches:
refs/heads/master 635de65ff -> 004c2045c
SSHD-334: add option to disable key-pair overwrite.
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/004c2045
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/004c2045
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/004c2045
Branch: refs/heads/master
Commit: 004c2045ced197f324936da27078f3609d3c4933
Parents: 635de65
Author: Pierre-Etienne Poirot <pe...@atlassian.com>
Authored: Sat Jul 12 20:13:43 2014 +1000
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Fri Sep 12 13:56:09 2014 +0200
----------------------------------------------------------------------
.../AbstractGeneratorHostKeyProvider.java | 29 +++++++---
.../AbstractGeneratorHostKeyProviderTest.java | 56 ++++++++++++++++++++
2 files changed, 77 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/004c2045/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java b/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java
index 282b8bc..6ab7591 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProvider.java
@@ -45,6 +45,7 @@ public abstract class AbstractGeneratorHostKeyProvider extends AbstractKeyPairPr
private int keySize;
private AlgorithmParameterSpec keySpec;
private KeyPair keyPair;
+ private boolean overwriteAllowed = true;
protected AbstractGeneratorHostKeyProvider() {
}
@@ -96,6 +97,14 @@ public abstract class AbstractGeneratorHostKeyProvider extends AbstractKeyPairPr
this.keySpec = keySpec;
}
+ public boolean isOverwriteAllowed() {
+ return overwriteAllowed;
+ }
+
+ public void setOverwriteAllowed(boolean overwriteAllowed) {
+ this.overwriteAllowed = overwriteAllowed;
+ }
+
protected abstract KeyPair doReadKeyPair(InputStream is) throws Exception;
protected abstract void doWriteKeyPair(KeyPair kp, OutputStream os) throws Exception;
@@ -135,14 +144,18 @@ public abstract class AbstractGeneratorHostKeyProvider extends AbstractKeyPairPr
}
private void writeKeyPair(KeyPair kp, File f) {
- OutputStream os = null;
- try {
- os = new FileOutputStream(f);
- doWriteKeyPair(kp, os);
- } catch (Exception e) {
- log.warn("Unable to write key {}: {}", path, e);
- } finally {
- close(os);
+ if (!f.exists() || overwriteAllowed) {
+ OutputStream os = null;
+ try {
+ os = new FileOutputStream(f);
+ doWriteKeyPair(kp, os);
+ } catch (Exception e) {
+ log.warn("Unable to write key {}: {}", path, e);
+ } finally {
+ close(os);
+ }
+ } else {
+ log.error("Overwriting key ({}) is disabled: using throwaway {}", f.getName(), kp);
}
}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/004c2045/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProviderTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProviderTest.java b/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProviderTest.java
new file mode 100644
index 0000000..6c1530b
--- /dev/null
+++ b/sshd-core/src/test/java/org/apache/sshd/server/keyprovider/AbstractGeneratorHostKeyProviderTest.java
@@ -0,0 +1,56 @@
+package org.apache.sshd.server.keyprovider;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.KeyPair;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import static org.junit.Assert.assertEquals;
+
+public class AbstractGeneratorHostKeyProviderTest {
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Test
+ public void testOverwriteKey() throws Exception {
+ File keyPairFile = temporaryFolder.newFile();
+
+ TestProvider provider = new TestProvider(keyPairFile);
+ provider.loadKeys();
+ assertEquals(1, provider.getWriteCount());
+
+ provider = new TestProvider(keyPairFile);
+ provider.setOverwriteAllowed(false);
+ provider.loadKeys();
+ assertEquals(0, provider.getWriteCount());
+ }
+
+ private class TestProvider extends AbstractGeneratorHostKeyProvider {
+ private final AtomicInteger writes = new AtomicInteger(0);
+
+ private TestProvider(File file) {
+ super(file.getAbsolutePath(), "DSA", 512);
+ }
+
+ @Override
+ protected KeyPair doReadKeyPair(InputStream is) throws Exception {
+ return null;
+ }
+
+ @Override
+ protected void doWriteKeyPair(KeyPair kp, OutputStream os) throws Exception {
+ writes.incrementAndGet();
+ }
+
+ public int getWriteCount() {
+ return writes.get();
+ }
+ }
+
+}
\ No newline at end of file