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