diff --git a/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java b/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java index b8ff6b8..1b82d6f 100644 --- a/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java +++ b/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java @@ -160,7 +160,15 @@ public class DomainProcessorFactory implements EntityProcessorFactory { dom.getName() + " smtp:" + inetAddr + ":225\n" + "." + dom.getName() + " smtp:" + inetAddr + ":225\n") ); + cp.appendProcessor( + new ShellProcessor("postmap -r -i /etc/postfix-mailin/relayrecipients", + "@" + dom.getName() + " anything\n") + ); } else { + cp.appendProcessor( + new ShellProcessor( + "postmap -d '@" + dom.getName() + "' /etc/postfix-mailin/relayrecipients") + ); cp.appendProcessor( new ShellProcessor( "postmap -d '" + dom.getName() + "' /etc/postfix-mailin/transport && " + @@ -197,6 +205,7 @@ public class DomainProcessorFactory implements EntityProcessorFactory { Processor mailQueueProcessor = new CompoundProcessor( createPostgreyConfiguration(em), new ShellProcessor( + "postmap -d '@" + dom.getName() + "' /etc/postfix-mailin/relayrecpients && " + "postmap -d '" + dom.getName() + "' /etc/postfix-mailin/relaydomains && " + "postmap -d '" + dom.getName() + "' /etc/postfix-mailin/transport && " + "postmap -d '." + dom.getName() + "' /etc/postfix-mailin/relaydomains && " + diff --git a/hsarback/src/de/hsadmin/mods/email/EMailAddressProcessorFactory.java b/hsarback/src/de/hsadmin/mods/email/EMailAddressProcessorFactory.java index e648957..9b5d642 100644 --- a/hsarback/src/de/hsadmin/mods/email/EMailAddressProcessorFactory.java +++ b/hsarback/src/de/hsadmin/mods/email/EMailAddressProcessorFactory.java @@ -15,69 +15,61 @@ import de.hsadmin.core.util.Config; import de.hsadmin.mods.pac.Pac; public class EMailAddressProcessorFactory implements EntityProcessorFactory { - + public Processor createCreateProcessor(EntityManager em, T entity) { // TODO: combine both keys in a single call (optimization) EMailAddress email = (EMailAddress) entity; - Pac pac = email.getDomain().getUser().getPac(); CompoundProcessor cp = new CompoundProcessor(); - cp.appendProcessor(new ShellProcessor( "postmap -r -i /etc/postfix-mailin/virtual", - email.getFullDomain() + " -" ) ); - Config config = Config.getInstance(); - cp.appendProcessor(new ShellProcessor( "postmap -r -i /etc/postfix-mailin/virtual", - email.getEMailAddress() + " " + email.getTarget() ) ); + cp.appendProcessor( + new ShellProcessor("postmap -r -i /etc/postfix-mailin/virtual", email.getFullDomain() + " -")); + cp.appendProcessor(new ShellProcessor("postmap -r -i /etc/postfix-mailin/virtual", + email.getEMailAddress() + " " + email.getTarget())); WaitingTasksProcessor waitingTasksProcessor = new WaitingTasksProcessor(cp); + Config config = Config.getInstance(); for (String queueName : config.getProperty("queues.mail").split(",")) { - waitingTasksProcessor.appendProcessor(queueName, new ShellProcessor( "postmap -r -i /etc/postfix-mailin/relayrecipients", - email.getEMailAddress() + " anything" ), "Add to relayrecipients" ); - } - if (emailAddressCount(em, email) <= 1) { - String domName = email.getDomain().getName(); - for (String queueName : config.getProperty("queues.mail").split(",")) { - waitingTasksProcessor.appendProcessor(queueName, createMailinSetupProcessor(domName, pac), queueName + ".hostsharing.net"); - } + waitingTasksProcessor.appendProcessor(queueName, + new ShellProcessor("postmap -r -i /etc/postfix-mailin/relayrecipients", + email.getEMailAddress() + " anything"), + "Add to relayrecipients"); } return waitingTasksProcessor; } - + public Processor createUpdateProcessor(EntityManager em, T entity) { - // TODO: if update is specified by primary-key or DB query instead of OID, - // a postmap -d might be neccessary + // TODO: if update is specified by primary-key or DB query instead of + // OID, a postmap -d might be neccessary return createCreateProcessor(em, entity); } - + public Processor createDeleteProcessor(EntityManager em, T entity) { CompoundProcessor cp = new CompoundProcessor(); EMailAddress email = (EMailAddress) entity; - cp.appendProcessor( - new ShellProcessor( "postmap -d '" + email.getEMailAddress() + "' /etc/postfix-mailin/virtual" ) ); + if (emailAddressCount(em, email) == 0) { + // last email address removed + String fullDomain = email.getFullDomain(); + cp.appendProcessor(new ShellProcessor("postmap -d '" + fullDomain + "' /etc/postfix-mailin/virtual")); + } + cp.appendProcessor( + new ShellProcessor("postmap -d '" + email.getEMailAddress() + "' /etc/postfix-mailin/virtual")); Config config = Config.getInstance(); WaitingTasksProcessor waitingTasksProcessor = new WaitingTasksProcessor(cp); for (String queueName : config.getProperty("queues.mail").split(",")) { - waitingTasksProcessor.appendProcessor(queueName, - new ShellProcessor( "postmap -d '" + email.getEMailAddress() + "' /etc/postfix-mailin/relayrecipients" ), - "Remove from relayrecipients" ); - } - if (emailAddressCount(em, email) == 0) { - // remove the domain from virtual.db - String fullDomain = email.getFullDomain(); - cp.appendProcessor( - new ShellProcessor( "postmap -d '" + fullDomain + "' /etc/postfix-mailin/virtual" ) ); - for (String queueName : config.getProperty("queues.mail").split(",")) { - waitingTasksProcessor.appendProcessor(queueName, createMailinDeleteProcessor(fullDomain), queueName + ".hostsharing.net"); - } + waitingTasksProcessor.appendProcessor(queueName, + new ShellProcessor( + "postmap -d '" + email.getEMailAddress() + "' /etc/postfix-mailin/relayrecipients"), + "Remove from relayrecipients"); } - return waitingTasksProcessor; + return waitingTasksProcessor; } private int emailAddressCount(EntityManager em, EMailAddress email) { Query query; - if ( email.getSubdomain() != null ) { + if (email.getSubdomain() != null) { query = em.createQuery("SELECT e FROM EMailAddresses e WHERE e.subdomain=:subdomain AND e.domain=:domain"); query.setParameter("subdomain", email.getSubdomain()); - } - else { - query = em.createQuery("SELECT e FROM EMailAddresses e WHERE ( e.subdomain IS NULL OR e.subdomain = '' ) AND e.domain=:domain"); + } else { + query = em.createQuery( + "SELECT e FROM EMailAddresses e WHERE ( e.subdomain IS NULL OR e.subdomain = '' ) AND e.domain=:domain"); } query.setParameter("domain", email.getDomain()); List result = query.getResultList(); @@ -87,18 +79,4 @@ public class EMailAddressProcessorFactory implements EntityProcessorFactory { return result.size(); } - private Processor createMailinSetupProcessor(String domName, Pac pac) { - String inetAddr = pac.getCurINetAddr().getInetAddr(); - return - new ShellProcessor("postmap -r -i /etc/postfix-mailin/transport", - domName + " smtp:" + inetAddr + ":225\n" + - "." + domName + " smtp:" + inetAddr + ":225\n"); - } - - private Processor createMailinDeleteProcessor(String domName) { - return new ShellProcessor( - "postmap -d '" + domName + "' /etc/postfix-mailin/transport && " + - "postmap -d '." + domName + "' /etc/postfix-mailin/transport"); - } - }