Repository: mina-sshd Updated Branches: refs/heads/master d2f8d47d2 -> 970a1e776
Fixed problem discovered by PublickeyAuthenticatorTest#testAcceptAllPublickeyAuthenticator Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/970a1e77 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/970a1e77 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/970a1e77 Branch: refs/heads/master Commit: 970a1e7768e3e1e033a0b6dcf4c43d23c808854a Parents: d2f8d47 Author: Lyor Goldstein <[email protected]> Authored: Tue Aug 18 12:31:54 2015 +0300 Committer: Lyor Goldstein <[email protected]> Committed: Tue Aug 18 12:31:54 2015 +0300 ---------------------------------------------------------------------- .../pubkey/StaticPublickeyAuthenticator.java | 4 +- .../sshd/server/PublickeyAuthenticatorTest.java | 54 +++++++++++++------- 2 files changed, 38 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/970a1e77/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/StaticPublickeyAuthenticator.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/StaticPublickeyAuthenticator.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/StaticPublickeyAuthenticator.java index 29f7a57..3aba17f 100644 --- a/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/StaticPublickeyAuthenticator.java +++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/StaticPublickeyAuthenticator.java @@ -51,13 +51,13 @@ public abstract class StaticPublickeyAuthenticator extends AbstractLoggingBean i protected void handleAcceptance(String username, PublicKey key, ServerSession session) { // accepting without really checking is dangerous, thus the warning log.warn("authenticate({}[{}][{}][{}]: accepted without checking", - username, session, key.getAlgorithm(), KeyUtils.getFingerPrint(key)); + username, session, (key == null) /* don't care about the key */ ? "null" : key.getAlgorithm(), KeyUtils.getFingerPrint(key)); } protected void handleRejection(String username, PublicKey key, ServerSession session) { if (log.isDebugEnabled()) { log.debug("authenticate({}[{}][{}][{}]: rejected", - username, session, key.getAlgorithm(), KeyUtils.getFingerPrint(key)); + username, session, (key == null) /* don't care about the key */ ? "null" : key.getAlgorithm(), KeyUtils.getFingerPrint(key)); } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/970a1e77/sshd-core/src/test/java/org/apache/sshd/server/PublickeyAuthenticatorTest.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/test/java/org/apache/sshd/server/PublickeyAuthenticatorTest.java b/sshd-core/src/test/java/org/apache/sshd/server/PublickeyAuthenticatorTest.java index 36889ee..33e32e2 100644 --- a/sshd-core/src/test/java/org/apache/sshd/server/PublickeyAuthenticatorTest.java +++ b/sshd-core/src/test/java/org/apache/sshd/server/PublickeyAuthenticatorTest.java @@ -19,10 +19,12 @@ package org.apache.sshd.server; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.math.BigInteger; import java.security.PublicKey; +import java.security.interfaces.RSAPublicKey; import java.util.Arrays; -import java.util.Random; import org.apache.sshd.common.util.GenericUtils; import org.apache.sshd.server.auth.pubkey.AcceptAllPublickeyAuthenticator; @@ -46,38 +48,54 @@ public class PublickeyAuthenticatorTest extends BaseTestSupport { } @Test - public void testAcceptAllPublickeyAuthenticator() throws Exception { + public void testAcceptAllPublickeyAuthenticator() throws Throwable { testStaticPublickeyAuthenticator(AcceptAllPublickeyAuthenticator.INSTANCE); } @Test - public void testRejectAllPublickeyAuthenticator() throws Exception { + public void testRejectAllPublickeyAuthenticator() throws Throwable { testStaticPublickeyAuthenticator(RejectAllPublickeyAuthenticator.INSTANCE); } - private void testStaticPublickeyAuthenticator(StaticPublickeyAuthenticator authenticator) throws Exception { + private void testStaticPublickeyAuthenticator(StaticPublickeyAuthenticator authenticator) throws Throwable { Method method = PublickeyAuthenticator.class.getMethod("authenticate", String.class, PublicKey.class, ServerSession.class); - PublicKey key = Mockito.mock(PublicKey.class); + RSAPublicKey key = Mockito.mock(RSAPublicKey.class); Mockito.when(key.getAlgorithm()).thenReturn(getCurrentTestName()); Mockito.when(key.getEncoded()).thenReturn(GenericUtils.EMPTY_BYTE_ARRAY); Mockito.when(key.getFormat()).thenReturn(getCurrentTestName()); + Mockito.when(key.getModulus()).thenReturn(BigInteger.TEN); + Mockito.when(key.getPublicExponent()).thenReturn(BigInteger.ONE); - Object[] args = {getCurrentTestName(), key, null /* ServerSession */}; - Object[] invArgs = new Object[args.length]; - Random rnd = new Random(System.nanoTime()); + ServerSession session = Mockito.mock(ServerSession.class); + Object[] invArgs = new Object[] { null /* username */, null /* key */, null /* server session */ }; boolean expected = authenticator.isAccepted(); - for (int index = 0; index < Long.SIZE; index++) { - for (int j = 0; j < args.length; j++) { - if (rnd.nextBoolean()) { - invArgs[j] = args[j]; - } else { - invArgs[j] = null; + boolean[] flags = new boolean[] { false, true }; + for (boolean useUsername : flags) { + invArgs[0] = useUsername ? getCurrentTestName() : null; + + for (boolean useKey : flags) { + invArgs[1] = useKey ? key : null; + + for (boolean useSession : flags) { + invArgs[2] = useSession ? session : null; + + Object result; + try { + result = method.invoke(authenticator, invArgs); + } catch(InvocationTargetException e) { + Throwable t = e.getTargetException(); // peel of the real exception + System.err.println("Failed (" + t.getClass().getSimpleName() + ")" + + " to invoke with user=" + useUsername + + ", key=" + useKey + + ", session=" + useSession + + ": " + t.getMessage()); + throw t; + } + + assertTrue("No boolean result", result instanceof Boolean); + assertEquals("Mismatched result for " + Arrays.toString(invArgs), expected, ((Boolean) result).booleanValue()); } } - - Object result = method.invoke(authenticator, invArgs); - assertTrue("No boolean result", result instanceof Boolean); - assertEquals("Mismatched result for " + Arrays.toString(invArgs), expected, ((Boolean) result).booleanValue()); } } }
