Author: gnodet Date: Fri Feb 6 08:46:53 2009 New Revision: 741471 URL: http://svn.apache.org/viewvc?rev=741471&view=rev Log: SSHD-12: Handle no-more-sessi...@openssh.com requests from clients
Modified: mina/sshd/trunk/src/main/java/org/apache/sshd/server/session/ServerSession.java Modified: mina/sshd/trunk/src/main/java/org/apache/sshd/server/session/ServerSession.java URL: http://svn.apache.org/viewvc/mina/sshd/trunk/src/main/java/org/apache/sshd/server/session/ServerSession.java?rev=741471&r1=741470&r2=741471&view=diff ============================================================================== --- mina/sshd/trunk/src/main/java/org/apache/sshd/server/session/ServerSession.java (original) +++ mina/sshd/trunk/src/main/java/org/apache/sshd/server/session/ServerSession.java Fri Feb 6 08:46:53 2009 @@ -66,6 +66,7 @@ private int maxAuthRequests = 20; private int nbAuthRequests; private int authTimeout = 10 * 60 * 1000; // 10 minutes in milliseconds + private boolean allowMoreSessions = true; private List<NamedFactory<UserAuth>> userAuthFactories; @@ -364,6 +365,15 @@ writePacket(buffer); return; } + if (!allowMoreSessions) { + buffer = createBuffer(SshConstants.Message.SSH_MSG_CHANNEL_OPEN_FAILURE); + buffer.putInt(id); + buffer.putInt(SshConstants.SSH_OPEN_CONNECT_FAILED); + buffer.putString("additional sessions disabled"); + buffer.putString(""); + writePacket(buffer); + return; + } ServerChannel channel = null; for (NamedFactory<ServerChannel> factory : getServerFactoryManager().getChannelFactories()) { @@ -401,13 +411,15 @@ boolean wantReply = buffer.getBoolean(); if (req.equals("keepal...@openssh.com")) { // Relatively standard KeepAlive directive, just wants failure + } else if (req.equals("no-more-sessi...@openssh.com")) { + allowMoreSessions = false; } else { - log.info("Received SSH_MSG_GLOBAL_REQUEST {}" ,req); - log.error("Unknown global request: {}", req); + log.info("Received SSH_MSG_GLOBAL_REQUEST {}" ,req); + log.error("Unknown global request: {}", req); } if (wantReply){ - buffer = createBuffer(SshConstants.Message.SSH_MSG_REQUEST_FAILURE); - writePacket(buffer); + buffer = createBuffer(SshConstants.Message.SSH_MSG_REQUEST_FAILURE); + writePacket(buffer); } }