You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by Norman Maurer <nm...@byteaction.de> on 2006/07/04 09:25:29 UTC

RE: Notes from ApacheCon (SMTP FAST FAIL)

Thx Noel,

so i remembered it right. I just did a commit in the sandbox to throw an
ConfigurationException on startup when an unimplemented command was used
to configure the command handler. I think thats a great improvment
( also to the current handler loading) to get sure that an admin can not
misconfigure the smtphandlerchain.

bye
Norman

Am Montag, den 03.07.2006, 16:11 -0400 schrieb Noel J. Bergman:
> > attached are notes for Norman
> 
> Below ...
> 
> 	--- Noel
> 
> -------------------------------------------------------------------------
> 
> loop:
> handler.call(session)
> if (session.responseCode != 0) break;
> endloop
> 
> while handler.call(session) != false handler = next();
> 
> 
> interface CommandsHandler {
>     Map getCommands();
> }
> 
> 
> MyHandler implements ConnectionHandler, CommandsHandler, MessageHandler {
> 
> 	onConnection(...) { do onConnection processing }
> 	onMessage(...) { do onMessage processing }
> 	Map getCommands(...) {
> 		mailFromCmd = new CommandHandler() {
> 			onCommand(...) {
> 				do MAIL FROM processing
> 			}
> 		}
> 		rcptCmd = new CommandHandler() {
> 			onCommand(...) {
> 				do RCPT TO processing
> 			}
> 		}
> 
> 		map.add("MAIL", mailFromCmd);
> 		map.add ("RCPT", rcptCmd);
> 		return map;
> 	}
> 
> }
> 
> 
> NormanHeloFilter implements CommandHandler {
> 	onCommand(...) {
> 		if (session.getCurrentCommand() == "HELO") { do HELO processing}
> 		else if (session.getCurrentCommand() == "EHLO") { do slighly different
> EHLO processing }
> 		else log ("This command handler does not IMPLEMENT " +
> session.getCurrentCommand() + ".  Please fix.");
>         }
> }
> 
> 
> SPFHandler implements CommandHandler, MessageHandler {
> 	onCommand(SMTPSession) { ...
> session.getState().put("org.apache.james.jspf.header", ...); }
> 	onMessage(SMTPSession) { ... add header to message ... }
> }
> 
> 
> <handlerClain>
> 
>   <maxmessagesize>
>   <verifyIdentity>
> 
>   <attribute name="maxmessagesize" value"0"/>
>   <attribute name="heloEhloEnforcement" value="true"/>
>   <attribute name="verifyIdentity" value="true" />
> 
>   <handler class="org.apache.james.smtpserver.SyntaxChecker"/>
>   <handler.class="org.apache.james.smtpserver.rbldnschecker">
>      <rblservers>
>         <whitelist> query.bondedsender.org </whitelist>
>         <blacklist> sbl-xbl.spamhaus.org </blacklist>
>         <blacklist> list.dsbl.org </blacklist>
>         <blacklist> dul.dnsbl.sorbs.net </blacklist>
>         <blacklist> relays.ordb.org </blacklist>
>      </rblservers>
>   </handler>
>   <handler class="de.norman.NormanHeloFilter" onCommand="HELO,EHLO"/>
>   <handler class="org.apache.james.smtpserver.spfHandler" onCommand="MAIL">
>      <attribute name="softfail" value="true"/>
>   </handler>
>   <handler class="org.apache.james.smtpserver.basecommands"/>
> </handlerChain>
> 
> 
> 
> 
> chainBuilder:
> 
> aHandler = class.newInstance();
> 
> if (aHandler instanceof ConnectionHandler) add to connection handler chain
> if (aHandler instanceof MessageHandler) add to message handler chain
> if (aHandler instanceof CommandsHandlers) {
> 	get commands
> 	loop through commands
> 	for each command, add to that command's handler chain
> }
> if (aHandler instance of CommandHandler) {
> 	get list of commands
> 	add handler to each chain
> }
> 
> 
> MyHandler implements ConnectionHandler, CommandHandlers {
> 
> 	onConnection(...) { INIT THE SESSION }
> 	Map getCommands(...) { ... }
> }
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
> For additional commands, e-mail: server-dev-help@james.apache.org
> 
> !EXCUBATOR:1,44a97a1148531651610094!