From 9f568eef068da175a783f96e33b18098ca99d32c Mon Sep 17 00:00:00 2001 From: Michael Hierweck Date: Fri, 21 Sep 2012 12:46:54 +0200 Subject: [PATCH 1/2] Implemented domain options: Apache vhost. --- .../mods/dom/DomainProcessorFactory.java | 54 +++++++++++++++---- .../hsadmin/mods/dom/httpd-vhost-dynamic.jtpl | 54 ++++++++----------- .../hsadmin/mods/dom/httpd-vhost-static.jtpl | 42 +++++++-------- 3 files changed, 86 insertions(+), 64 deletions(-) diff --git a/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java b/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java index 7572ddd..d6df480 100644 --- a/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java +++ b/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java @@ -125,6 +125,7 @@ public class DomainProcessorFactory implements EntityProcessorFactory { new TemplateProcessor("/de/hsadmin/mods/dom/zonefile.jtpl", templateVars, zonefileTargetPath, false); Processor zonefileACLProcessor = new ShellProcessor("chown root:bind " + zonefileTargetPath + " && chmod 644 " + zonefileTargetPath); + // TODO Use templates and regenerate the file. Processor prizonesFileProcessor = new ShellProcessor("echo 'zone \"" + domName + "\" { type master; file \"pri." + domName + "\"; };' >>/etc/bind/named.pri-zones" + " && sort /etc/bind/named.pri-zones | uniq >/etc/bind/named.pri-zones.tmp" + @@ -176,8 +177,8 @@ public class DomainProcessorFactory implements EntityProcessorFactory { } private Processor createDNSServerRemoveProcessor(String domName) { + // TODO Use templates and regenerate the file. return new ShellProcessor("grep -v '\"sec." + domName + "\"' /etc/bind/named-hsh.conf >/etc/bind/named-hsh.conf.tmp" + - // TODO sed -e'/sec.abc.example.com/d' -i /etc/bind/named-hsh.conf " && mv /etc/bind/named-hsh.conf.tmp /etc/bind/named-hsh.conf" + " && rm /var/cache/bind/sec." + domName + " && invoke-rc.d bind9 reload"); @@ -302,18 +303,53 @@ public class DomainProcessorFactory implements EntityProcessorFactory { String linkPrefix = Integer.toString(100 - level); String pac = dom.getUser().getPac().getName(); Query query = em.createQuery("SELECT d FROM Domains d WHERE d.domainoptions.name = :option AND d.name = :domname"); - query.setParameter("option", "nohtdocsfallback"); query.setParameter("domname", dom.getName()); - List result = query.getResultList(); - List> iterateMaps = new ArrayList>(); - if (!result.isEmpty()) { - iterateMaps.add(new HashMap()); + // TODO: This code should be cleaned up after switching to the velocity template engine. + query.setParameter("option", "indexes"); + if (query.getResultList().isEmpty()) { + templateVars.put("INDEXES", "+Indexes"); + } else { + templateVars.put("INDEXES", "-Indexes"); } + // TODO: This code should be cleaned up after switching to the velocity template engine. + query.setParameter("option", "includes"); + if (query.getResultList().isEmpty()) { + templateVars.put("INCLUDES", "+IncludesNoExec"); + } else { + templateVars.put("INCLUDES", "-Includes"); + } + // TODO: This code should be cleaned up after switching to the velocity template engine. + query.setParameter("option", "multiviews"); + if (query.getResultList().isEmpty()) { + templateVars.put("MULTIVIEWS", "+MultiViews"); + } else { + templateVars.put("MULTIVIEWS", "-MultiViews"); + } + // TODO: This code should be cleaned up after switching to the velocity template engine. + query.setParameter("option", "htdocsfallback"); + if (query.getResultList().isEmpty()) { + templateVars.put("HTDOCSFALLBACKHTTP", + " RewriteCond %{REQUEST_URI} !^/cgi-bin/\n" + + " RewriteCond %{REQUEST_URI} !^/fastcgi-bin/\n" + + " RewriteCond %{HTTP_HOST} ^(.+)\\.{DOM_HOSTNAME}\\.?(:80)?$ [novary]\n" + + " RewriteCond /home/doms/{DOM_HOSTNAME}/subs/${tolower:%1} !-d\n" + + " RewriteRule ^(.*) - [redirect=404,last]"); + templateVars.put("HTDOCSFALLBACKHTTPS", + " RewriteCond %{REQUEST_URI} !^/cgi-bin/\n" + + " RewriteCond %{REQUEST_URI} !^/fastcgi-bin/\n" + + " RewriteCond %{HTTP_HOST} ^(.+)\\.{DOM_HOSTNAME}\\.?(:443)?$ [novary]\n" + + " RewriteCond /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1} !-d\n" + + " RewriteRule ^(.*) - [redirect=404,last]"); + } else { + templateVars.put("HTDOCSFALLBACKHTTP", "\n"); + templateVars.put("HTDOCSFALLBACKHTTPS", "\n"); + } + Processor domSetupProcessor = new CompoundProcessor( createDomainDirectoriesProcessor(dom, templateVars), - new CreateFileProcessor(selectVHostTemplate(dom), templateVars, iterateMaps.iterator(), "/etc/apache2/sites-available/" + domName + ".tmp", "root", "root", "644", true), - new ShellProcessor("ls /etc/apache2/pems/" + pac + ".pem >/dev/null 2>&1 " + - "&& sed -i '/SSLCertificate.*default/d' " + "/etc/apache2/sites-available/" + domName + ".tmp" + + new CreateFileProcessor(selectVHostTemplate(dom), templateVars, "/etc/apache2/sites-available/" + domName + ".tmp", "root", "root", "644", true), + new ShellProcessor("ls /etc/apache2/pems/" + pac + ".pem >/dev/null 2>&1" + + " && sed -i '/SSLCertificate.*default/d' " + "/etc/apache2/sites-available/" + domName + ".tmp" + " && (ls /etc/apache2/pems/" + pac + ".chain.pem >/dev/null 2>&1 || sed -i '/SSLCertificateChain.*" + pac + "/d' " + "/etc/apache2/sites-available/" + domName + ".tmp )" + " || sed -i '/SSLCertificate.*" + pac + "/d' " + "/etc/apache2/sites-available/" + domName + ".tmp"), new ShellProcessor( diff --git a/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-dynamic.jtpl b/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-dynamic.jtpl index e8d7af6..c572834 100644 --- a/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-dynamic.jtpl +++ b/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-dynamic.jtpl @@ -17,40 +17,34 @@ Alias /fastcgi-bin/ /home/doms/{DOM_HOSTNAME}/fastcgi/ - Options -ExecCGI +IncludesNOEXEC +Indexes +MultiViews +SymLinksIfOwnerMatch + Options -ExecCGI {INCLUDES} {INDEXES} {MULTIVIEWS} +SymLinksIfOwnerMatch - AllowOverride AuthConfig FileInfo Indexes Limit + AllowOverride AuthConfig FileInfo Indexes Limit - + SetHandler cgi-script - Options +ExecCGI -Indexes -MultiViews - + Options +ExecCGI {INCLUDES} -Indexes -MultiViews +SymLinksIfOwnerMatch + - + SetHandler fcgid-script - Options +ExecCGI -Indexes -MultiViews - + Options +ExecCGI {INCLUDES} -Indexes -MultiViews +SymLinksIfOwnerMatch + RewriteEngine On RewriteOptions Inherit RewriteCond %{REQUEST_URI} !^/cgi-bin/ - RewriteCond %{REQUEST_URI} !^/fastcgi-bin/ - RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:80)?$ [novary] - RewriteCond /home/doms/{DOM_HOSTNAME}/subs/${tolower:%1} -d - RewriteRule ^(.*) /home/doms/{DOM_HOSTNAME}/subs/${tolower:%1}$1 [last] + RewriteCond %{REQUEST_URI} !^/fastcgi-bin/ + RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:[0-9]+)?$ [novary] + RewriteCond /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1} -d + RewriteRule ^(.*) /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1}$1 [last] - - RewriteCond %{REQUEST_URI} !^/cgi-bin/ - RewriteCond %{REQUEST_URI} !^/fastcgi-bin/ - RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:80)?$ [novary] - RewriteCond /home/doms/{DOM_HOSTNAME}/subs/${tolower:%1} !-d - RewriteRule ^(.*) - [redirect=404,last] + {HTDOCSFALLBACKHTTP} - AddType application/x-httpd-php .php .php5 .php4 .php3 Action application/x-httpd-php /fastcgi-bin/phpstub @@ -77,7 +71,7 @@ SSLRequireSSL On - Options -ExecCGI +IncludesNOEXEC +Indexes +MultiViews +SymLinksIfOwnerMatch + Options -ExecCGI {INCLUDES} {INDEXES} {MULTIVIEWS} +SymLinksIfOwnerMatch @@ -86,31 +80,25 @@ SetHandler cgi-script - Options +ExecCGI -Indexes -MultiViews + Options +ExecCGI {INCLUDES} -Indexes -MultiViews +SymLinksIfOwnerMatch SetHandler fcgid-script - Options +ExecCGI -Indexes -MultiViews + Options +ExecCGI {INCLUDES} -Indexes -MultiViews +SymLinksIfOwnerMatch RewriteEngine On RewriteOptions Inherit - + RewriteCond %{REQUEST_URI} !^/cgi-bin/ - RewriteCond %{REQUEST_URI} !^/fastcgi-bin/ - RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:443)?$ [novary] + RewriteCond %{REQUEST_URI} !^/fastcgi-bin/ + RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:[0-9]+)?$ [novary] RewriteCond /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1} -d RewriteRule ^(.*) /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1}$1 [last] - - RewriteCond %{REQUEST_URI} !^/cgi-bin/ - RewriteCond %{REQUEST_URI} !^/fastcgi-bin/ - RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:443)?$ [novary] - RewriteCond /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1} !-d - RewriteRule ^(.*) - [redirect=404,last] - - + {HTDOCSFALLBACKHTTPS} + AddType application/x-httpd-php .php .php5 .php4 .php3 Action application/x-httpd-php /fastcgi-bin/phpstub diff --git a/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-static.jtpl b/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-static.jtpl index 4a2cb1c..058b4aa 100644 --- a/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-static.jtpl +++ b/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-static.jtpl @@ -14,33 +14,32 @@ DocumentRoot /home/doms/{DOM_HOSTNAME}/htdocs - Options -ExecCGI +IncludesNOEXEC +Indexes +MultiViews +SymLinksIfOwnerMatch + Options -ExecCGI {INCLUDES} {INDEXES} {MULTIVIEWS} +SymLinksIfOwnerMatch - AllowOverride AuthConfig FileInfo Indexes Limit + AllowOverride AuthConfig FileInfo Indexes Limit - + Redirect 501 / - + - + Redirect 501 / - + RewriteEngine On RewriteOptions Inherit - RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:80)?$ [novary] - RewriteCond /home/doms/{DOM_HOSTNAME}/subs/${tolower:%1} -d - RewriteRule ^(.*) /home/doms/{DOM_HOSTNAME}/subs/${tolower:%1}$1 [last] + RewriteCond %{REQUEST_URI} !^/cgi-bin/ + RewriteCond %{REQUEST_URI} !^/fastcgi-bin/ + RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:[0-9]+)?$ [novary] + RewriteCond /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1} -d + RewriteRule ^(.*) /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1}$1 [last] - RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:80)?$ [novary] - RewriteCond /home/doms/{DOM_HOSTNAME}/subs/${tolower:%1} !-d - RewriteRule ^(.*) - [redirect=404,last] - - + {HTDOCSFALLBACKHTTP} + @@ -61,7 +60,7 @@ SSLRequireSSL On - Options -ExecCGI +IncludesNOEXEC +Indexes +MultiViews +SymLinksIfOwnerMatch + Options -ExecCGI {INCLUDES} {INDEXES} {MULTIVIEWS} +SymLinksIfOwnerMatch @@ -74,19 +73,18 @@ Redirect 501 / - + RewriteEngine On RewriteOptions Inherit - RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:443)?$ [novary] + RewriteCond %{REQUEST_URI} !^/cgi-bin/ + RewriteCond %{REQUEST_URI} !^/fastcgi-bin/ + RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:[0-9]+)?$ [novary] RewriteCond /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1} -d RewriteRule ^(.*) /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1}$1 [last] - - RewriteCond %{HTTP_HOST} ^(.+)\.{DOM_HOSTNAME}\.?(:443)?$ [novary] - RewriteCond /home/doms/{DOM_HOSTNAME}/subs-ssl/${tolower:%1} !-d - RewriteRule ^(.*) - [redirect=404,last] - + {HTDOCSFALLBACKHTTPS} + \ No newline at end of file From e33737aaf638b7dc2328e748a5a5240db7a385f5 Mon Sep 17 00:00:00 2001 From: Michael Hierweck Date: Fri, 21 Sep 2012 13:37:18 +0200 Subject: [PATCH 2/2] Refactoring deletion of email addresses as part of the domain deletion process. --- .../src/de/hsadmin/mods/dom/DomainModuleImpl.java | 5 +++-- .../hsadmin/mods/dom/DomainProcessorFactory.java | 15 ++------------- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/hsarback/src/de/hsadmin/mods/dom/DomainModuleImpl.java b/hsarback/src/de/hsadmin/mods/dom/DomainModuleImpl.java index ec201e0..2e7038d 100644 --- a/hsarback/src/de/hsadmin/mods/dom/DomainModuleImpl.java +++ b/hsarback/src/de/hsadmin/mods/dom/DomainModuleImpl.java @@ -11,6 +11,7 @@ import javax.persistence.Query; import de.hsadmin.core.model.AbstractEntity; import de.hsadmin.core.model.AbstractModuleImpl; import de.hsadmin.core.model.AuthorisationException; +import de.hsadmin.core.model.GenericModuleImpl; import de.hsadmin.core.model.HSAdminException; import de.hsadmin.mods.email.EMailAddress; import de.hsadmin.mods.pac.Pac; @@ -177,9 +178,9 @@ public class DomainModuleImpl extends AbstractModuleImpl { Query query = em.createQuery("SELECT adr FROM " + EMailAddress.class.getAnnotation(javax.persistence.Entity.class).name() + " adr WHERE adr.domain.name='" + dom.getName() + "'"); List resultList = query.getResultList(); + GenericModuleImpl helperModule = new GenericModuleImpl(getTransaction()); for (Object obj : resultList) { - EMailAddress eMailAddress = (EMailAddress) obj; - em.remove(eMailAddress); + helperModule.delete((EMailAddress) obj); } super.delete(existingEntity); } diff --git a/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java b/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java index d6df480..dc7652f 100644 --- a/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java +++ b/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java @@ -100,11 +100,8 @@ public class DomainProcessorFactory implements EntityProcessorFactory { public Processor createDeleteProcessor(EntityManager em, T entity) throws ProcessorException { Domain dom = (Domain) entity; String domName = dom.getName(); - WaitingTasksProcessor mainProcessor = new WaitingTasksProcessor( - new CompoundProcessor( - createHiveEMailRemoveProcessor(domName), - createHiveDNSRemoveProcessor(domName) - ) + WaitingTasksProcessor mainProcessor = new WaitingTasksProcessor( + createHiveDNSRemoveProcessor(domName) ); Config config = Config.getInstance(); for (String queueName : config.getProperty("queues.dns").split(",")) { @@ -158,14 +155,6 @@ public class DomainProcessorFactory implements EntityProcessorFactory { return emailAdrProcessor; } - private ShellProcessor createHiveEMailRemoveProcessor(String domName) { - return new ShellProcessor( - "postmap -d '" + domName + "' /etc/postfix-mailin/virtual && " + - "for KEY in $(postmap -s /etc/postfix-mailin/virtual|grep '@" + domName + "\\s'|cut -f1); " + - "do postmap -d $KEY /etc/postfix-mailin/virtual; done" - ); - } - private Processor createDNSServerSetupProcessor(String domName, String pacInetAddr) { Processor seczonesFileProcessor; seczonesFileProcessor =