@Override protected Response doCoreCmd(SMTPSession session, String command, String parameters) { return doMAIL(session, parameters); }
@Override protected Response doFilterChecks(SMTPSession session, String command, String parameters) { return doMAILFilter(session, parameters); }
@Override protected Response doCoreCmd(SMTPSession session, String command, String parameters) { return doQUIT(session, parameters); }
protected List<ProtocolHandler> initDefaultHandlers() { List<ProtocolHandler> defaultHandlers = new ArrayList<>(); defaultHandlers.add(new CommandDispatcher<SMTPSession>()); defaultHandlers.add(new ExpnCmdHandler()); defaultHandlers.add(new EhloCmdHandler(metricFactory)); defaultHandlers.add(new HeloCmdHandler(metricFactory)); defaultHandlers.add(new HelpCmdHandler()); defaultHandlers.add(new MailCmdHandler(metricFactory)); defaultHandlers.add(new NoopCmdHandler()); defaultHandlers.add(new QuitCmdHandler(metricFactory)); defaultHandlers.add(new RcptCmdHandler(metricFactory)); defaultHandlers.add(new RsetCmdHandler()); defaultHandlers.add(new VrfyCmdHandler()); defaultHandlers.add(new DataCmdHandler(metricFactory)); defaultHandlers.add(new MailSizeEsmtpExtension()); defaultHandlers.add(new WelcomeMessageHandler()); defaultHandlers.add(new PostmasterAbuseRcptHook()); defaultHandlers.add(new ReceivedDataLineFilter()); defaultHandlers.add(new DataLineMessageHookHandler()); defaultHandlers.add(new StartTlsCmdHandler()); defaultHandlers.add(new UnknownCmdHandler(metricFactory)); defaultHandlers.add(new CommandHandlerResultLogger()); return defaultHandlers; }
@Override protected Response onHeadersLine(SMTPSession session, ByteBuffer line, LineHandler<SMTPSession> next) { if (getLocation() == Location.Prefix && session.getAttachment(headersPrefixAdded, State.Transaction) == null) { session.setAttachment(headersPrefixAdded, Boolean.TRUE, State.Transaction); return addHeaders(session, line, next); } return super.onHeadersLine(session, line, next); }
@Override protected Response onSeparatorLine(SMTPSession session, ByteBuffer line, LineHandler<SMTPSession> next) { if (getLocation() == Location.Suffix && session.getAttachment(headersSuffixAdded, State.Transaction) == null) { session.setAttachment(headersSuffixAdded, Boolean.TRUE, State.Transaction); return addHeaders(session, line, next); } return super.onSeparatorLine(session, line, next); }
@Override public HookResult doRcpt(SMTPSession session, MaybeSender sender, MailAddress rcpt) { if (session.getUser() != null) { MaybeSender senderAddress = (MaybeSender) session.getAttachment(SMTPSession.SENDER, ProtocolSession.State.Transaction); // Check if the sender address is the same as the user which was used to authenticate. // Its important to ignore case here to fix JAMES-837. This is save todo because if the handler is called // the user was already authenticated if (isAnonymous(sender) || !senderMatchSessionUser(sender, session) || !belongsToLocalDomain(senderAddress)) { return INVALID_AUTH; } } return HookResult.DECLINED; }
@Override public HookResult doRcpt(SMTPSession session, MailAddress sender, MailAddress rcpt) { ExtendedSMTPSession nSession = (ExtendedSMTPSession) session; if (nSession.verifyIdentity()) { return super.doRcpt(session, sender, rcpt); } else { return HookResult.DECLINED; } }
private String appendDefaultDomainIfNeeded(String address) { if (!address.contains("@")) { return address + "@" + getDefaultDomain(); } return address; }
@Override @SuppressWarnings("rawtypes") public void wireExtensions(Class interfaceName, List extension) throws WiringException { if (DataLineFilter.class.equals(interfaceName)) { LineHandler<SMTPSession> lineHandler = new DataConsumerLineHandler(); for (int i = extension.size() - 1; i >= 0; i--) { lineHandler = new DataLineFilterWrapper((DataLineFilter) extension.get(i), lineHandler); } this.lineHandler = lineHandler; } }
/** * Add headers to the message * * @param session * @param line * @param next * @return response */ private Response addHeaders(SMTPSession session, ByteBuffer line, LineHandler<SMTPSession> next) { Response response; for (Header header: headers(session)) { response = header.transferTo(session, next); if (response != null) { return response; } } return next.onLine(session, line); }
@Override public List<Class<?>> getMarkerInterfaces() { List<Class<?>> classes = super.getMarkerInterfaces(); classes.add(EhloExtension.class); return classes; }
@Override @SuppressWarnings("unchecked") public void wireExtensions(Class<?> interfaceName, List<?> extension) { if (getHookInterface().equals(interfaceName)) { this.hooks = (List<HookT>) extension; } else if (HookResultHook.class.equals(interfaceName)) { this.rHooks = (List<HookResultHook>) extension; } }
@Override @SuppressWarnings("unchecked") public void wireExtensions(Class<?> interfaceName, List<?> extension) { super.wireExtensions(interfaceName, extension); if (EhloExtension.class.equals(interfaceName)) { this.ehloExtensions = (List<EhloExtension>) extension; } }
@Override public Response onLine(SMTPSession session, ByteBuffer line) { line.rewind(); return filter.onLine(session, line, next); }
@Override @SuppressWarnings("rawtypes") public void wireExtensions(Class interfaceName, List extension) throws WiringException { if (MessageHook.class.equals(interfaceName)) { this.messageHandlers = extension; checkMessageHookCount(messageHandlers); } else if (HookResultHook.class.equals(interfaceName)) { this.rHooks = extension; } }
@Override public Response onCommand(SMTPSession session, Request request) { return doRSET(session, request.getArgument()); }
@Override public HookResult doRcpt(SMTPSession session, MailAddress sender, MailAddress rcpt) { SMTPNettySession nSession =(SMTPNettySession) session; if (nSession.verifyIdentity()) { return super.doRcpt(session, sender, rcpt); } else { return new HookResult(HookReturnCode.DECLINED); } }
@Override public List<Class<?>> getMarkerInterfaces() { List<Class<?>> l = super.getMarkerInterfaces(); l.add(MailParametersHook.class); return l; }
@Override public List<Class<?>> getMarkerInterfaces() { List<Class<?>> classes = new ArrayList<>(2); classes.add(getHookInterface()); classes.add(HookResultHook.class); return classes; }