Updated Branches: refs/heads/master 7faddc9b8 -> bf7c8b885
[SSHD-221] Don't hardwire the service in the user auth code Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/bf7c8b88 Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/bf7c8b88 Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/bf7c8b88 Branch: refs/heads/master Commit: bf7c8b8853df287f1ab0dee65aa4a131d57bafae Parents: 7faddc9 Author: Guillaume Nodet <[email protected]> Authored: Wed Jul 17 21:08:26 2013 +0200 Committer: Guillaume Nodet <[email protected]> Committed: Wed Jul 17 21:08:26 2013 +0200 ---------------------------------------------------------------------- .../sshd/client/auth/AbstractUserAuth.java | 50 ++++++++++++++++++++ .../apache/sshd/client/auth/UserAuthAgent.java | 22 ++------- .../sshd/client/auth/UserAuthPassword.java | 11 ++--- .../sshd/client/auth/UserAuthPublicKey.java | 13 ++--- .../sshd/client/session/ClientSessionImpl.java | 8 ++-- 5 files changed, 69 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/bf7c8b88/sshd-core/src/main/java/org/apache/sshd/client/auth/AbstractUserAuth.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/AbstractUserAuth.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/AbstractUserAuth.java new file mode 100644 index 0000000..5f9a346 --- /dev/null +++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/AbstractUserAuth.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.sshd.client.auth; + +import org.apache.sshd.client.UserAuth; +import org.apache.sshd.client.session.ClientSessionImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + */ +public abstract class AbstractUserAuth implements UserAuth { + + protected final Logger log = LoggerFactory.getLogger(this.getClass()); + + protected final ClientSessionImpl session; + protected final String service; + protected final String username; + + protected AbstractUserAuth(ClientSessionImpl session, String service, String username) { + this.session = session; + this.username = username; + this.service = service; + } + + public String getUsername() { + return username; + } + + public String getService() { + return service; + } + +} http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/bf7c8b88/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthAgent.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthAgent.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthAgent.java index e6edfb9..35793ef 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthAgent.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthAgent.java @@ -24,44 +24,32 @@ import java.security.interfaces.RSAPublicKey; import java.util.Iterator; import org.apache.sshd.agent.SshAgent; -import org.apache.sshd.client.UserAuth; import org.apache.sshd.client.session.ClientSessionImpl; import org.apache.sshd.common.KeyPairProvider; import org.apache.sshd.common.SshConstants; import org.apache.sshd.common.util.Buffer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Authentication delegating to an SSH agent */ -public class UserAuthAgent implements UserAuth { +public class UserAuthAgent extends AbstractUserAuth { - protected final Logger log = LoggerFactory.getLogger(getClass()); - - private final ClientSessionImpl session; - private final String username; private final SshAgent agent; private final Iterator<SshAgent.Pair<PublicKey, String>> keys; - public UserAuthAgent(ClientSessionImpl session, String username) throws IOException { - this.session = session; - this.username = username; + public UserAuthAgent(ClientSessionImpl session, String service, String username) throws IOException { + super(session, service, username); this.agent = session.getFactoryManager().getAgentFactory().createClient(session); this.keys = agent.getIdentities().iterator(); } - public String getUsername() { - return username; - } - protected void sendNextKey(PublicKey key) throws IOException { try { log.info("Send SSH_MSG_USERAUTH_REQUEST for publickey"); Buffer buffer = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST, 0); int pos1 = buffer.wpos() - 1; buffer.putString(username); - buffer.putString("ssh-connection"); + buffer.putString(service); buffer.putString("publickey"); buffer.putByte((byte) 1); buffer.putString((key instanceof RSAPublicKey) ? KeyPairProvider.SSH_RSA : KeyPairProvider.SSH_DSS); @@ -73,7 +61,7 @@ public class UserAuthAgent implements UserAuth { bs.putString(session.getKex().getH()); bs.putCommand(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST); bs.putString(username); - bs.putString("ssh-connection"); + bs.putString(AUTHENTICATION_SERVICE); bs.putString("publickey"); bs.putByte((byte) 1); bs.putString((key instanceof RSAPublicKey) ? KeyPairProvider.SSH_RSA : KeyPairProvider.SSH_DSS); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/bf7c8b88/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java index 541f572..7e5dd97 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPassword.java @@ -32,17 +32,14 @@ import org.slf4j.LoggerFactory; * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ -public class UserAuthPassword implements UserAuth { +public class UserAuthPassword extends AbstractUserAuth { protected final Logger log = LoggerFactory.getLogger(getClass()); - private final ClientSessionImpl session; - private final String username; private final String password; - public UserAuthPassword(ClientSessionImpl session, String username, String password) { - this.session = session; - this.username = username; + public UserAuthPassword(ClientSessionImpl session, String service, String username, String password) { + super(session, service, username); this.password = password; } @@ -55,7 +52,7 @@ public class UserAuthPassword implements UserAuth { log.info("Send SSH_MSG_USERAUTH_REQUEST for password"); buffer = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST, 0); buffer.putString(username); - buffer.putString("ssh-connection"); + buffer.putString(service); buffer.putString("password"); buffer.putByte((byte) 0); buffer.putString(password); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/bf7c8b88/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java ---------------------------------------------------------------------- diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java index f1c841d..a809a90 100644 --- a/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java +++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/UserAuthPublicKey.java @@ -37,17 +37,14 @@ import org.slf4j.LoggerFactory; * * @author <a href="mailto:[email protected]">Apache MINA SSHD Project</a> */ -public class UserAuthPublicKey implements UserAuth { +public class UserAuthPublicKey extends AbstractUserAuth { protected final Logger log = LoggerFactory.getLogger(getClass()); - private final ClientSessionImpl session; - private final String username; private final KeyPair key; - public UserAuthPublicKey(ClientSessionImpl session, String username, KeyPair key) { - this.session = session; - this.username = username; + public UserAuthPublicKey(ClientSessionImpl session, String service, String username, KeyPair key) { + super(session, service, username); this.key = key; } @@ -62,7 +59,7 @@ public class UserAuthPublicKey implements UserAuth { buffer = session.createBuffer(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST, 0); int pos1 = buffer.wpos() - 1; buffer.putString(username); - buffer.putString("ssh-connection"); + buffer.putString(service); buffer.putString("publickey"); buffer.putByte((byte) 1); buffer.putString((key.getPublic() instanceof RSAPublicKey) ? KeyPairProvider.SSH_RSA : KeyPairProvider.SSH_DSS); @@ -76,7 +73,7 @@ public class UserAuthPublicKey implements UserAuth { bs.putString(session.getKex().getH()); bs.putCommand(SshConstants.Message.SSH_MSG_USERAUTH_REQUEST); bs.putString(username); - bs.putString("ssh-connection"); + bs.putString(service); bs.putString("publickey"); bs.putByte((byte) 1); bs.putString((key.getPublic() instanceof RSAPublicKey) ? KeyPairProvider.SSH_RSA : KeyPairProvider.SSH_DSS); http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/bf7c8b88/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 04f3dd8..30c10ca 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 @@ -62,6 +62,8 @@ import org.apache.sshd.server.channel.OpenChannelException; */ public class ClientSessionImpl extends AbstractSession implements ClientSession { + private static final String AUTHENTICATION_SERVICE = "ssh-connection"; + private UserAuth userAuth; private AuthFuture authFuture; @@ -104,7 +106,7 @@ public class ClientSessionImpl extends AbstractSession implements ClientSession throw new IllegalStateException("Session is closed"); } authFuture = new DefaultAuthFuture(lock); - userAuth = new UserAuthAgent(this, user); + userAuth = new UserAuthAgent(this, AUTHENTICATION_SERVICE, user); setState(State.UserAuth); switch (userAuth.next(null)) { @@ -142,7 +144,7 @@ public class ClientSessionImpl extends AbstractSession implements ClientSession throw new IllegalStateException("Session is closed"); } authFuture = new DefaultAuthFuture(lock); - userAuth = new UserAuthPassword(this, user, password); + userAuth = new UserAuthPassword(this, AUTHENTICATION_SERVICE, user, password); setState(State.UserAuth); switch (userAuth.next(null)) { @@ -180,7 +182,7 @@ public class ClientSessionImpl extends AbstractSession implements ClientSession throw new IllegalStateException("Session is closed"); } authFuture = new DefaultAuthFuture(lock); - userAuth = new UserAuthPublicKey(this, user, key); + userAuth = new UserAuthPublicKey(this, AUTHENTICATION_SERVICE, user, key); setState(State.UserAuth); switch (userAuth.next(null)) {
