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);
         }
     }
 


Reply via email to