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/06/16 11:05:41 UTC

git commit: [SSHD-319] Handling error scenarios if Prime cannot be found

Repository: mina-sshd
Updated Branches:
  refs/heads/master f3cac42ae -> ba4772a23


[SSHD-319] Handling error scenarios if Prime cannot be found

Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/ba4772a2
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/ba4772a2
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/ba4772a2

Branch: refs/heads/master
Commit: ba4772a23573998a1c801e28130ccfb1a9b77121
Parents: f3cac42
Author: Guillaume Nodet <gn...@apache.org>
Authored: Mon Jun 16 11:05:34 2014 +0200
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Mon Jun 16 11:05:34 2014 +0200

----------------------------------------------------------------------
 .../java/org/apache/sshd/server/kex/DHGEX.java    | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/ba4772a2/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEX.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEX.java b/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEX.java
index b988ef9..04b8a13 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEX.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/kex/DHGEX.java
@@ -18,6 +18,7 @@
  */
 package org.apache.sshd.server.kex;
 
+import java.io.IOException;
 import java.math.BigInteger;
 import java.net.URL;
 import java.security.KeyPair;
@@ -34,6 +35,7 @@ import org.apache.sshd.common.SshConstants;
 import org.apache.sshd.common.SshException;
 import org.apache.sshd.common.digest.SHA1;
 import org.apache.sshd.common.kex.DH;
+import org.apache.sshd.common.kex.DHGroupData;
 import org.apache.sshd.common.session.AbstractSession;
 import org.apache.sshd.common.util.Buffer;
 import org.apache.sshd.common.util.BufferUtils;
@@ -219,14 +221,21 @@ public class DHGEX implements KeyExchange {
     }
 
     private DH chooseDH(int min, int prf, int max) throws Exception {
+        List<Moduli.DhGroup> groups = null;
         URL moduli;
         String moduliStr = session.getFactoryManager().getProperties().get(ServerFactoryManager.MODULI_URL);
         if (moduliStr != null) {
-            moduli = new URL(moduliStr);
-        } else {
+            try {
+                moduli = new URL(moduliStr);
+                groups = Moduli.parseModuli(moduli);
+            } catch (IOException e) {
+                log.warn("Error loading external moduli", e);
+            }
+        }
+        if (groups == null) {
             moduli = getClass().getResource("/org/apache/sshd/moduli");
+            groups = Moduli.parseModuli(moduli);
         }
-        List<Moduli.DhGroup> groups = Moduli.parseModuli(moduli);
 
         min = Math.max(min, 1024);
         prf = Math.max(prf, 1024);
@@ -249,7 +258,8 @@ public class DHGEX implements KeyExchange {
             }
         }
         if (selected.isEmpty()) {
-            throw new IllegalArgumentException("No suitable primes");
+            log.warn("No suitable primes found, defaulting to DHG1");
+            return getDH(new BigInteger(DHGroupData.getG()), new BigInteger(DHGroupData.getP1()));
         }
         Random random = session.getFactoryManager().getRandomFactory().create();
         int which = random.random(selected.size());