@Override protected boolean isValidRecipient(SMTPSession session, MailAddress recipient) { try { String username = users.getUser(recipient); if (users.contains(username)) { return true; } else { return supportsRecipientRewriteTable && isRedirected(recipient, username); } } catch (UsersRepositoryException e) { LOGGER.info("Unable to access UsersRepository", e); return false; } }
@Override public void init(Configuration config) throws ConfigurationException { setSupportsRecipientRewriteTable(config.getBoolean("enableRecipientRewriteTable", true)); }
/** * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.Configuration) */ public void configure(HierarchicalConfiguration config) throws ConfigurationException { setVirtualUserTableSupport(config.getBoolean("enableVirtualUserTable", true)); }
@Test public void doRcptShouldDeclineValidUsersWhenRelay() throws Exception { SMTPSession session = setupMockedSMTPSession(RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, validUserEmail).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Before public void setUp() throws Exception { UsersRepository users = MemoryUsersRepository.withoutVirtualHosting(); users.addUser(VALID_USER, PASSWORD); MemoryDomainList memoryDomainList = new MemoryDomainList(mock(DNSService.class)); memoryDomainList.configure(DomainListConfiguration.builder() .defaultDomain(Domain.LOCALHOST) .build()); memoryRecipientRewriteTable = new MemoryRecipientRewriteTable(); memoryRecipientRewriteTable.setDomainList(memoryDomainList); handler = new ValidRcptHandler(users, memoryRecipientRewriteTable, memoryDomainList); validUserEmail = new MailAddress(VALID_USER + "@localhost"); user1mail = new MailAddress(USER1 + "@localhost"); invalidUserEmail = new MailAddress(INVALID_USER + "@localhost"); }
@Test public void doRcptShouldDeclineValidUsersWhenNoRelay() throws Exception { SMTPSession session = setupMockedSMTPSession(!RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, validUserEmail).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Test public void doRcptShouldDenyNotExistingLocalUsersWhenRelay() { SMTPSession session = setupMockedSMTPSession(RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, invalidUserEmail).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.deny()); }
@Test public void doRcptShouldRejectNotExistingLocalUsersWhenNoRelay() { SMTPSession session = setupMockedSMTPSession(!RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, invalidUserEmail).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.deny()); }
@Test public void doRcptShouldDeclineNonLocalUsersWhenNoRelay() throws Exception { MailAddress mailAddress = new MailAddress(INVALID_USER + "@otherdomain"); SMTPSession session = setupMockedSMTPSession(!RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, mailAddress).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Test public void doRcptShouldDeclineNonLocalUsersWhenRelay() throws Exception { MailAddress mailAddress = new MailAddress(INVALID_USER + "@otherdomain"); SMTPSession session = setupMockedSMTPSession(RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, mailAddress).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Test public void doRcptShouldDeclineWhenHasErrorMapping() throws Exception { memoryRecipientRewriteTable.addErrorMapping(MappingSource.fromUser(USER1, Domain.LOCALHOST), "554 BOUNCE"); SMTPSession session = setupMockedSMTPSession(!RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, user1mail).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Test public void doRcptShouldDeclineWhenHasAddressMapping() throws Exception { memoryRecipientRewriteTable.addAddressMapping(MappingSource.fromUser(USER1, Domain.LOCALHOST), "address"); SMTPSession session = setupMockedSMTPSession(!RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, validUserEmail).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Test public void doRcptShouldDenyWhenHasMappingLoop() throws Exception { memoryRecipientRewriteTable.addAddressMapping(MappingSource.fromUser(USER1, Domain.LOCALHOST), USER2 + "@localhost"); memoryRecipientRewriteTable.addAddressMapping(MappingSource.fromUser(USER2, Domain.LOCALHOST), USER1 + "@localhost"); SMTPSession session = setupMockedSMTPSession(!RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, user1mail).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }