You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Andrew C (JIRA)" <ji...@apache.org> on 2013/01/08 16:42:12 UTC

[jira] [Created] (SSHD-203) SSH server doesn't know when auth completed

Andrew C created SSHD-203:
-----------------------------

             Summary: SSH server doesn't know when auth completed
                 Key: SSHD-203
                 URL: https://issues.apache.org/jira/browse/SSHD-203
             Project: MINA SSHD
          Issue Type: Bug
    Affects Versions: 0.8.0
         Environment: Windows
            Reporter: Andrew C


To the best of my knowledge, there's no way, in a customised SSH server, to detect when the client connection's auth has successfully completed.  As a hack I came up with:

public class RelaySshSession extends ServerSession {
    private final RelayService relayService;
    public RelaySshSession(RelayService relayService, SshServer server, IoSession sshIoSession) throws Exception {
        super(server, sshIoSession);
        this.relayService = relayService;
    }
    @Override
    public CloseFuture close(boolean immediately) {
        relayService.unbind(this);
        return super.close(immediately);
    }
    private boolean authorized = false;
    @Override
    public WriteFuture writePacket(Buffer buffer) throws IOException {
        if (!this.authorized) {
            byte[] bytes = buffer.array();
            if (bytes.length > 5 && bytes[5] == SshConstants.Message.SSH_MSG_USERAUTH_SUCCESS.toByte()) {
                // need to send the auth packet before starting network session so that the
                // local service packets always follow the service.
                WriteFuture writeFuture = super.writePacket(buffer);
                // Tell the server side to start.
                relayService.bind(this);
                this.authorized = true;
                return writeFuture;
            }
        }
        return super.writePacket(buffer);
    }
}


As an example for why this might be useful, consider a dispatcher that accepts multiple clients.  As long as any client is active the custom server send dispatch messages.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira