maintain named-pri-zones

This commit is contained in:
Peter Hormanns 2019-06-18 18:18:09 +02:00
parent fb7e714e63
commit 4f863a4cc2
3 changed files with 32 additions and 5 deletions

View File

@ -2,8 +2,10 @@ package de.hsadmin.mods.dom;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
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;
@ -106,10 +108,26 @@ public class DomainProcessorFactory implements EntityProcessorFactory {
new VelocityProcessor("/de/hsadmin/mods/dom/zonefile.vm", zonefileTemplateVars, dom, zonefileTargetPath, false); new VelocityProcessor("/de/hsadmin/mods/dom/zonefile.vm", zonefileTemplateVars, dom, zonefileTargetPath, false);
final Processor zonefileACLProcessor = final Processor zonefileACLProcessor =
new ShellProcessor("chown root:bind " + zonefileTargetPath + " && chmod 644 " + zonefileTargetPath); new ShellProcessor("chown root:bind " + zonefileTargetPath + " && chmod 644 " + zonefileTargetPath);
final Query query = em.createQuery("SELECT d FROM Domains d WHERE d.user.pac.hive.name = :hivename"); final String hiveName = dom.getUser().getHiveName();
query.setParameter("hivename", dom.getUser().getHiveName()); final Query domsQuery = em.createQuery("SELECT d FROM Domains d WHERE d.user.pac.hive.name = :hivename");
domsQuery.setParameter("hivename", hiveName);
final List<?> domsList = domsQuery.getResultList();
final Set<String> domsNames = new HashSet<>();
for (final Object obj : domsList) {
if (obj instanceof Domain) {
domsNames.add(((Domain) obj).getName());
}
}
final Query pacsQuery = em.createQuery("SELECT p FROM Pacs p WHERE p.hive.name = :hivename");
domsQuery.setParameter("hivename", hiveName);
final List<?> pacsList = pacsQuery.getResultList();
for (final Object obj : pacsList) {
if (obj instanceof Pac) {
domsNames.add(((Pac) obj).getName() + ".hostsharing.net");
}
}
final Map<String, Object> namedZonesTemplateVars = new HashMap<String, Object>(); final Map<String, Object> namedZonesTemplateVars = new HashMap<String, Object>();
namedZonesTemplateVars.put("domains", query.getResultList()); namedZonesTemplateVars.put("domains", domsNames);
final Processor prizonesFileProcessor = new CompoundProcessor( final Processor prizonesFileProcessor = new CompoundProcessor(
new VelocityProcessor("/de/hsadmin/mods/dom/named-pri-zones.vm", new VelocityProcessor("/de/hsadmin/mods/dom/named-pri-zones.vm",
namedZonesTemplateVars, dom, "/etc/bind/named.pri-zones.tmp", true), namedZonesTemplateVars, dom, "/etc/bind/named.pri-zones.tmp", true),
@ -124,7 +142,7 @@ public class DomainProcessorFactory implements EntityProcessorFactory {
private ShellProcessor createHiveDNSRemoveProcessor(String domName) { private ShellProcessor createHiveDNSRemoveProcessor(String domName) {
return new ShellProcessor("grep -v '\"pri." + domName + "\"' /etc/bind/named.pri-zones > /etc/bind/named.pri-zones.tmp" + return new ShellProcessor("grep -v '\"pri." + domName + "\"' /etc/bind/named.pri-zones > /etc/bind/named.pri-zones.tmp" +
" && mv /etc/bind/named.pri-zones.tmp /etc/bind/named.pri-zones" + " && mv /etc/bind/named.pri-zones.tmp /etc/bind/named.pri-zones" +
" && rm /etc/bind/pri." + domName + " && rm -f /etc/bind/pri." + domName +
" && invoke-rc.d bind9 reload"); " && invoke-rc.d bind9 reload");
} }

View File

@ -4,5 +4,5 @@
// //
#foreach( $domain in ${domains} ) #foreach( $domain in ${domains} )
zone "${domain.name}" { type master; file "pri.${domain.name}"; }; zone "${domain}" { type master; file "pri.${domain}"; };
#end #end

View File

@ -76,6 +76,7 @@ public class PacProcessorFactory implements EntityProcessorFactory {
Hive hive = pac.getHive(); Hive hive = pac.getHive();
hive.getPacs().remove(pac); hive.getPacs().remove(pac);
WaitingTasksProcessor waiting = new WaitingTasksProcessor(createDelUserProc(pac.getName())); WaitingTasksProcessor waiting = new WaitingTasksProcessor(createDelUserProc(pac.getName()));
final String domainName = pac.getName() + ".hostsharing.net";
waiting.appendProcessor(pac.getHiveName(), new CompoundProcessor( waiting.appendProcessor(pac.getHiveName(), new CompoundProcessor(
createIfDown(pac), createIfDown(pac),
createEtcHostsProc(hive), createEtcHostsProc(hive),
@ -83,6 +84,7 @@ public class PacProcessorFactory implements EntityProcessorFactory {
createSudouersProc(hive), createSudouersProc(hive),
createProftpdConfProc(hive), createProftpdConfProc(hive),
createHttpdVirtualProc(hive), createHttpdVirtualProc(hive),
createHiveDNSRemoveProcessor(domainName),
createAccountingRulesProc()), "remove packet"); createAccountingRulesProc()), "remove packet");
return waiting; return waiting;
} else { } else {
@ -90,6 +92,13 @@ public class PacProcessorFactory implements EntityProcessorFactory {
} }
} }
private ShellProcessor createHiveDNSRemoveProcessor(String domName) {
return new ShellProcessor("grep -v '\"pri." + domName + "\"' /etc/bind/named.pri-zones > /etc/bind/named.pri-zones.tmp" +
" && mv /etc/bind/named.pri-zones.tmp /etc/bind/named.pri-zones" +
" && rm -f /etc/bind/pri." + domName +
" && invoke-rc.d bind9 reload");
}
private Processor createAccountingRulesProc() { private Processor createAccountingRulesProc() {
return new ShellProcessor("mk-iptables-rules Accounting"); return new ShellProcessor("mk-iptables-rules Accounting");
} }