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/03/18 08:53:34 UTC
git commit: [SSHD-304] ClientSession.WAIT_AUTH does not wait for
server key to be available
Repository: mina-sshd
Updated Branches:
refs/heads/master 1055d489a -> 28adb0e1e
[SSHD-304] ClientSession.WAIT_AUTH does not wait for server key to be available
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/28adb0e1
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/28adb0e1
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/28adb0e1
Branch: refs/heads/master
Commit: 28adb0e1e29fcd14e546f8d54906a2b89d6edf57
Parents: 1055d48
Author: Guillaume Nodet <gn...@apache.org>
Authored: Tue Mar 18 08:53:19 2014 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Tue Mar 18 08:53:19 2014 +0100
----------------------------------------------------------------------
.../sshd/client/session/ClientSessionImpl.java | 2 +-
.../sshd/common/session/AbstractSession.java | 3 +++
.../test/java/org/apache/sshd/ClientTest.java | 27 ++++++++++++++++++++
3 files changed, 31 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/28adb0e1/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java
index 1298acf..741372c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/session/ClientSessionImpl.java
@@ -278,7 +278,7 @@ public class ClientSessionImpl extends AbstractSession implements ClientSession
if (authed) { // authFuture.isSuccess()
cond |= AUTHED;
}
- if (authFuture.isFailure()) {
+ if (kexState.get() == KEX_STATE_DONE && authFuture.isFailure()) {
cond |= WAIT_AUTH;
}
if ((cond & mask) != 0) {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/28adb0e1/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java b/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
index 22b8229..e2933bf 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/session/AbstractSession.java
@@ -380,6 +380,9 @@ public abstract class AbstractSession extends CloseableUtils.AbstractInnerClosea
}
kexState.set(KEX_STATE_DONE);
}
+ synchronized (lock) {
+ lock.notifyAll();
+ }
break;
default:
if (cmd >= SshConstants.SSH_MSG_KEX_FIRST && cmd <= SshConstants.SSH_MSG_KEX_LAST) {
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/28adb0e1/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/ClientTest.java b/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
index c928930..fd2bea6 100644
--- a/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/ClientTest.java
@@ -24,13 +24,16 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
+import java.net.SocketAddress;
import java.security.KeyPair;
import java.security.PublicKey;
import java.util.Arrays;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.sshd.client.ClientFactoryManager;
+import org.apache.sshd.client.ServerKeyVerifier;
import org.apache.sshd.client.UserAuth;
import org.apache.sshd.client.UserInteraction;
import org.apache.sshd.client.auth.UserAuthKeyboardInteractive;
@@ -554,6 +557,30 @@ public class ClientTest extends BaseTest {
}
}
+ @Test
+ public void testWaitAuth() throws Exception {
+ SshClient client = SshClient.setUpDefaultClient();
+ final AtomicBoolean ok = new AtomicBoolean();
+ client.setServerKeyVerifier(
+ new ServerKeyVerifier() {
+ public boolean verifyServerKey(
+ ClientSession sshClientSession,
+ SocketAddress remoteAddress,
+ PublicKey serverKey
+ ) {
+ System.out.println(serverKey);
+ ok.set(true);
+ return true;
+ }
+ }
+ );
+ client.start();
+ ClientSession session = client.connect("localhost", port).await().getSession();
+ session.waitFor(ClientSession.WAIT_AUTH, 10000);
+ assertTrue(ok.get());
+ client.stop();
+ }
+
private void suspend(IoSession ioSession) {
if (ioSession instanceof MinaSession) {
((MinaSession) ioSession).suspend();