This commit is contained in:
Michael Hierweck 2017-09-12 20:29:15 +02:00
parent f3a2ac9123
commit b29374939c
2 changed files with 31 additions and 28 deletions

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.Query; import javax.persistence.Query;
@ -161,18 +162,18 @@ public class DomainProcessorFactory implements EntityProcessorFactory {
"." + dom.getName() + " smtp:" + inetAddr + ":225\n") "." + dom.getName() + " smtp:" + inetAddr + ":225\n")
); );
cp.appendProcessor( cp.appendProcessor(
new ShellProcessor("postmap -r -i /etc/postfix-mailin/relayrecipients", new ShellProcessor("postmap -d - /etc/postfix-mailin/relayrecipients",
"@" + dom.getName() + " anything\n") "@" + dom.getName() + "\n")
); );
} else { } else {
cp.appendProcessor( cp.appendProcessor(
new ShellProcessor( new ShellProcessor("postmap -d - /etc/postfix-mailin/transport",
"postmap -d '@" + dom.getName() + "' /etc/postfix-mailin/relayrecipients") dom.getName() + "\n" +
"." + dom.getName() + "\n")
); );
cp.appendProcessor( cp.appendProcessor(
new ShellProcessor( new ShellProcessor("postmap -r -i /etc/postfix-mailin/relayrecipients",
"postmap -d '" + dom.getName() + "' /etc/postfix-mailin/transport && " + "@" + dom.getName() + " anything\n")
"postmap -d '." + dom.getName() + "' /etc/postfix-mailin/transport")
); );
} }
return cp; return cp;
@ -202,14 +203,14 @@ public class DomainProcessorFactory implements EntityProcessorFactory {
} }
private Processor createMailinUnsetupProcessor(EntityManager em, Domain dom) throws ProcessorException { private Processor createMailinUnsetupProcessor(EntityManager em, Domain dom) throws ProcessorException {
Processor mailQueueProcessor = new CompoundProcessor( final CompoundProcessor mailQueueProcessor = new CompoundProcessor(createPostgreyConfiguration(em));
createPostgreyConfiguration(em), mailQueueProcessor.appendProcessor(new ShellProcessor("postmap -d - /etc/postfix-mailin/relayrecipients",
new ShellProcessor( dom.getName() + "\n" +
"postmap -d '@" + dom.getName() + "' /etc/postfix-mailin/relayrecpients && " + "." + dom.getName() + "\n" +
"postmap -d '" + dom.getName() + "' /etc/postfix-mailin/relaydomains && " + "@" + dom.getName() + "\n"));
"postmap -d '" + dom.getName() + "' /etc/postfix-mailin/transport && " + mailQueueProcessor.appendProcessor(new ShellProcessor("postmap -d - /etc/postfix-mailin/transports",
"postmap -d '." + dom.getName() + "' /etc/postfix-mailin/relaydomains && " + dom.getName() + "\n" +
"postmap -d '." + dom.getName() + "' /etc/postfix-mailin/transport")); "." + dom.getName() + "\n"));
return mailQueueProcessor; return mailQueueProcessor;
} }

View File

@ -12,16 +12,18 @@ import de.hsadmin.core.qserv.Processor;
import de.hsadmin.core.qserv.ShellProcessor; import de.hsadmin.core.qserv.ShellProcessor;
import de.hsadmin.core.qserv.WaitingTasksProcessor; import de.hsadmin.core.qserv.WaitingTasksProcessor;
import de.hsadmin.core.util.Config; import de.hsadmin.core.util.Config;
import de.hsadmin.mods.pac.Pac;
public class EMailAddressProcessorFactory implements EntityProcessorFactory { public class EMailAddressProcessorFactory implements EntityProcessorFactory {
public <T extends AbstractEntity> Processor createCreateProcessor(EntityManager em, T entity) { public <T extends AbstractEntity> Processor createCreateProcessor(EntityManager em, T entity) {
// TODO: combine both keys in a single call (optimization) // TODO: combine both keys in a single call (optimization)
EMailAddress email = (EMailAddress) entity;
CompoundProcessor cp = new CompoundProcessor(); CompoundProcessor cp = new CompoundProcessor();
cp.appendProcessor( EMailAddress email = (EMailAddress) entity;
new ShellProcessor("postmap -r -i /etc/postfix-mailin/virtual", email.getFullDomain() + " -")); if (emailAddressCount(em, email) == 1) {
// first email address added
cp.appendProcessor(new ShellProcessor("postmap -r -i /etc/postfix-mailin/virtual",
email.getFullDomain() + " -"));
}
cp.appendProcessor(new ShellProcessor("postmap -r -i /etc/postfix-mailin/virtual", cp.appendProcessor(new ShellProcessor("postmap -r -i /etc/postfix-mailin/virtual",
email.getEMailAddress() + " " + email.getTarget())); email.getEMailAddress() + " " + email.getTarget()));
WaitingTasksProcessor waitingTasksProcessor = new WaitingTasksProcessor(cp); WaitingTasksProcessor waitingTasksProcessor = new WaitingTasksProcessor(cp);
@ -46,17 +48,17 @@ public class EMailAddressProcessorFactory implements EntityProcessorFactory {
EMailAddress email = (EMailAddress) entity; EMailAddress email = (EMailAddress) entity;
if (emailAddressCount(em, email) == 0) { if (emailAddressCount(em, email) == 0) {
// last email address removed // last email address removed
String fullDomain = email.getFullDomain(); cp.appendProcessor(new ShellProcessor("postmap -d - /etc/postfix-mailin/virtual",
cp.appendProcessor(new ShellProcessor("postmap -d '" + fullDomain + "' /etc/postfix-mailin/virtual")); email.getFullDomain() + "\n"));
} }
cp.appendProcessor( cp.appendProcessor(new ShellProcessor("postmap -d - /etc/postfix-mailin/virtual",
new ShellProcessor("postmap -d '" + email.getEMailAddress() + "' /etc/postfix-mailin/virtual")); email.getEMailAddress() + "\n"));
Config config = Config.getInstance(); Config config = Config.getInstance();
WaitingTasksProcessor waitingTasksProcessor = new WaitingTasksProcessor(cp); WaitingTasksProcessor waitingTasksProcessor = new WaitingTasksProcessor(cp);
for (String queueName : config.getProperty("queues.mail").split(",")) { for (String queueName : config.getProperty("queues.mail").split(",")) {
waitingTasksProcessor.appendProcessor(queueName, waitingTasksProcessor.appendProcessor(queueName,
new ShellProcessor( new ShellProcessor("postmap -d - /etc/postfix-mailin/relayrecipients",
"postmap -d '" + email.getEMailAddress() + "' /etc/postfix-mailin/relayrecipients"), email.getEMailAddress() + "\n"),
"Remove from relayrecipients"); "Remove from relayrecipients");
} }
return waitingTasksProcessor; return waitingTasksProcessor;