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: [email protected]
For additional commands, e-mail: [email protected]