Author: norman
Date: Wed Sep 28 13:52:52 2011
New Revision: 1176884

URL: http://svn.apache.org/viewvc?rev=1176884&view=rev
Log:
Add some fastfail handler which will disconnect the client after X unknown 
commands

Added:
    
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandler.java
   (with props)
    
james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandlerTest.java
   (with props)

Added: 
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandler.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandler.java?rev=1176884&view=auto
==============================================================================
--- 
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandler.java
 (added)
+++ 
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandler.java
 Wed Sep 28 13:52:52 2011
@@ -0,0 +1,63 @@
+/****************************************************************
+ * 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.james.protocols.smtp.core.fastfail;
+
+import org.apache.james.protocols.smtp.SMTPSession;
+import org.apache.james.protocols.smtp.hook.HookResult;
+import org.apache.james.protocols.smtp.hook.HookReturnCode;
+import org.apache.james.protocols.smtp.hook.UnknownHook;
+
+/**
+ * {@link UnknownHook} implementation which disconnect the client after a 
issue to many unknown commands
+ * 
+ *
+ */
+public class MaxUnknownCmdHandler implements UnknownHook{
+
+    public final static int DEFAULT_MAX_UNKOWN = 5;
+    
+    private final static String UNKOWN_COMMAND_COUNT = "UNKNOWN_COMMAND_COUNT";
+    private int maxUnknown;
+    
+    public void setMaxUnknownCmdCount(int maxUnknown) {
+        this.maxUnknown = maxUnknown;
+    }
+    
+    @Override
+    public HookResult doUnknown(SMTPSession session, String command) {
+        Integer count = (Integer) session.getState().get(UNKOWN_COMMAND_COUNT);
+        if (count == null) {
+            count = 1;
+        } else {
+            count++;
+        }
+        session.getState().put(UNKOWN_COMMAND_COUNT, count);
+        if (count > maxUnknown) {
+            return new HookResult(HookReturnCode.DENY | 
HookReturnCode.DISCONNECT, "521", "Closing connection as to many unknown 
commands received");
+
+        } else {
+            
+            return new HookResult(HookReturnCode.DECLINED);
+        }
+    }
+
+    
+}

Propchange: 
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandlerTest.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandlerTest.java?rev=1176884&view=auto
==============================================================================
--- 
james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandlerTest.java
 (added)
+++ 
james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandlerTest.java
 Wed Sep 28 13:52:52 2011
@@ -0,0 +1,58 @@
+/****************************************************************
+ * 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.james.protocols.smtp.core.fastfail;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.mail.internet.ParseException;
+
+import org.apache.james.protocols.smtp.BaseFakeSMTPSession;
+import org.apache.james.protocols.smtp.SMTPSession;
+import org.apache.james.protocols.smtp.hook.HookReturnCode;
+
+import junit.framework.TestCase;
+
+public class MaxUnknownCmdHandlerTest extends TestCase{
+
+    
+    public void testRejectAndClose() throws ParseException {
+        SMTPSession session = new BaseFakeSMTPSession() {
+            private final HashMap<String,Object> state = new 
HashMap<String,Object>();
+
+            public Map<String,Object> getState() {
+                return state;
+            }
+        };
+        
+        
+        MaxUnknownCmdHandler handler = new MaxUnknownCmdHandler();
+        handler.setMaxUnknownCmdCount(2);
+        int resp = handler.doUnknown(session, "what").getResult();
+        assertEquals(HookReturnCode.DECLINED, resp);
+
+        resp = handler.doUnknown(session, "what").getResult();
+        assertEquals(HookReturnCode.DECLINED, resp);
+        
+        resp = handler.doUnknown(session, "what").getResult();
+        assertEquals(HookReturnCode.DENY | HookReturnCode.DISCONNECT, resp);
+    }
+}

Propchange: 
james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandlerTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to