diff --git a/hsarback/build.xml b/hsarback/build.xml index 8490157..12d7622 100644 --- a/hsarback/build.xml +++ b/hsarback/build.xml @@ -154,7 +154,7 @@ - + diff --git a/hsarback/src/de/hsadmin/core/qserv/CommandShell.java b/hsarback/src/de/hsadmin/core/qserv/CommandShell.java index c57bb56..7760d22 100644 --- a/hsarback/src/de/hsadmin/core/qserv/CommandShell.java +++ b/hsarback/src/de/hsadmin/core/qserv/CommandShell.java @@ -7,151 +7,69 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; -public class CommandShell -{ - private static boolean bExecute = true; // really execute or just store command and stdin? - private static String executedCommands; // stored command and stdin - private static String[] aEnvironment; // stored environment - - /** Set mode of real execution or just storing the command and stdin. - * - * @param bExec - * specifies whether shell commands should really be executed (true) or not (false) - */ - public static void setExecute( boolean bExec ) - { - bExecute = bExec; - } +public class CommandShell { - /** Returns and clears the last command which should have been executed. - * - * @return - * Last command, plus "< 0 ) + if (stdInput != null) { logCommand += "< 0 && callOutput.charAt(nLen-1) == '\n' ) - // callOutput = callOutput.substring(0, nLen-1); + if (callOutput != null) { return callOutput.trim(); } return null; } - private static String readProcessStream(InputStream stream) throws IOException - { - BufferedReader reader = new BufferedReader( - new InputStreamReader(stream)); + private static String readProcessStream(InputStream stream) throws IOException { + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); StringBuffer textBuff = new StringBuffer(); String textLine = reader.readLine(); - while (textLine != null) - { + while (textLine != null) { textBuff.append(textLine); textBuff.append('\n'); textLine = reader.readLine(); diff --git a/hsarback/src/de/hsadmin/core/qserv/ShellException.java b/hsarback/src/de/hsadmin/core/qserv/ShellException.java index 1970b54..eb9836f 100644 --- a/hsarback/src/de/hsadmin/core/qserv/ShellException.java +++ b/hsarback/src/de/hsadmin/core/qserv/ShellException.java @@ -1,19 +1,14 @@ package de.hsadmin.core.qserv; -public class ShellException - extends Exception -{ - private static final long serialVersionUID = 8335020360721047849L; +public class ShellException extends Exception { - int nExitCode; - - public ShellException() - { + private static final long serialVersionUID = 5499293305075489652L; + + public ShellException(String message) { + super(message); } - public ShellException( int exitCode, String message ) - { - super( message ); - nExitCode = exitCode; + public ShellException(Throwable e) { + super(e); } } diff --git a/hsarback/src/de/hsadmin/core/qserv/ShellProcessor.java b/hsarback/src/de/hsadmin/core/qserv/ShellProcessor.java index e4dca5c..8d46052 100644 --- a/hsarback/src/de/hsadmin/core/qserv/ShellProcessor.java +++ b/hsarback/src/de/hsadmin/core/qserv/ShellProcessor.java @@ -13,47 +13,26 @@ public class ShellProcessor extends AbstractProcessor { private static final long serialVersionUID = -649045174380048818L; private String aSystemCall; - private String[] aEnv; private String aInput; private String aOutput; private String aErrors; - /** - * Constructor for a queue entry which executes a system call. - * - * @param aSystemCall - * the system call to be executed - */ - public ShellProcessor(String aSystemCall) { - this(aSystemCall, null, null); - } - - /** - * Constructor for a queue entry which executes a system call with stdin - * data. - * - * @param aSystemCall - * the system call to be executed - * @param aInput - * data for stdin of the system call - */ public ShellProcessor(String aSystemCall, String aInput) { this.aSystemCall = aSystemCall; this.aInput = aInput; } - public ShellProcessor(String aSystemCall, String[] aEnv, String aInput) { + public ShellProcessor(String aSystemCall) { this.aSystemCall = aSystemCall; - this.aEnv = aEnv; - this.aInput = aInput; + this.aInput = null; } public Object process() throws ProcessorException { try { - CommandShell.setEnvironment(aEnv); aOutput = CommandShell.execute(aSystemCall, aInput); return aOutput; } catch (ShellException aExc) { + aErrors = aExc.getMessage(); aExc.printStackTrace(System.err); // Logging throw new ProcessorException(aExc); } diff --git a/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java b/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java index d6d17f7..40b41a0 100644 --- a/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java +++ b/hsarback/src/de/hsadmin/mods/dom/DomainProcessorFactory.java @@ -249,9 +249,14 @@ public class DomainProcessorFactory implements EntityProcessorFactory { private Processor createApacheVHostSetupProcessor(Domain dom, Map templateVars) throws ProcessorException { String domName = dom.getName(); + String pac = dom.getUser().getPac().getName(); Processor domSetupProcessor = new CompoundProcessor( createDomainDirectoriesProcessor(dom, templateVars), new CreateFileProcessor(selectVHostTemplate(dom), templateVars, "/etc/apache2/sites-generated/" + domName, "root", "root", "644"), + new ShellProcessor("ls /etc/apache2/pem/" + pac + ".pem >/dev/null 2>&1 " + + "&& sed -i '/SSLCertificate.*default/d' " + "/etc/apache2/sites-generated/" + domName + + " && (ls /etc/apache2/pem/" + pac + ".chain.pem >/dev/null 2>&1 || sed -i '/SSLCertificateChain.*" + pac + "/d' " + "/etc/apache2/sites-generated/" + domName + ")" + + " || sed -i '/SSLCertificate.*" + pac + "/d' " + "/etc/apache2/sites-generated/" + domName), new ShellProcessor( "ln -sf /etc/apache2/sites-generated/" + domName + " /etc/apache2/sites-enabled/010-" + domName + " && invoke-rc.d apache2 reload >/dev/null 2>&1") 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 2430380..45ec4a0 100644 --- a/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-dynamic.jtpl +++ b/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-dynamic.jtpl @@ -62,6 +62,8 @@ NameVirtualHost {DOM_IPNUMBEREX}:443 SSLEngine On SSLCertificateFile /etc/apache2/pems/default.pem SSLCertificateChainFile /etc/apache2/pems/default.chain.pem + SSLCertificateFile /etc/apache2/pems/{PAC}.pem + SSLCertificateChainFile /etc/apache2/pems/{PAC}.chain.pem DocumentRoot /home/doms/{DOM_HOSTNAME}/htdocs-ssl 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 854a071..bf875fd 100644 --- a/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-static.jtpl +++ b/hsarback/src/de/hsadmin/mods/dom/httpd-vhost-static.jtpl @@ -52,6 +52,8 @@ NameVirtualHost {DOM_IPNUMBEREX}:443 SSLEngine On SSLCertificateFile /etc/apache2/pems/default.pem SSLCertificateChainFile /etc/apache2/pems/default.chain.pem + SSLCertificateFile /etc/apache2/pems/{PAC}.pem + SSLCertificateChainFile /etc/apache2/pems/{PAC}.chain.pem DocumentRoot /home/doms/{DOM_HOSTNAME}/htdocs-ssl diff --git a/hsarback/test/de/hsadmin/remote/ContinuousIntegrationTest.java b/hsarback/test/de/hsadmin/remote/ContinuousIntegrationTest.java new file mode 100644 index 0000000..1f1f193 --- /dev/null +++ b/hsarback/test/de/hsadmin/remote/ContinuousIntegrationTest.java @@ -0,0 +1,26 @@ +package de.hsadmin.remote; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +@RunWith(Suite.class) +@Suite.SuiteClasses({ + InitDataTest.class, + RoleTest.class, + MysqlUserTest.class, + MysqlDbTest.class, + PgsqlUserTest.class, + PgsqlDbTest.class, + PacTest.class, + UnixUserTest.class, + EMailAliasTest.class, + DomainTest.class, + EMailAddressTest.class, + SSLCertDomainTest.class +// CustomerTest.class, +// QueueTaskTest.class +}) + +public class ContinuousIntegrationTest { + +} diff --git a/hsarback/test/de/hsadmin/remote/InitDataTest.java b/hsarback/test/de/hsadmin/remote/InitDataTest.java index 3d8bf51..3a63a39 100644 --- a/hsarback/test/de/hsadmin/remote/InitDataTest.java +++ b/hsarback/test/de/hsadmin/remote/InitDataTest.java @@ -62,9 +62,6 @@ public class InitDataTest { setParams }; try { client.execute(CUST_MODULE + ".add", params); -// Object execute = client.execute(CUST_MODULE + ".add", params); -// Map result = (Map) execute; -// System.out.println(result); assertEquals(membersCount + 1, getMembersCount()); } catch (XmlRpcException e) { fail(e.getMessage()); @@ -167,42 +164,6 @@ public class InitDataTest { assertEquals(count + 1, getUsersCount()); } -// @Test - public void testDelPac() { - int count = getPacsCount(); - String user = "ad"; - String grantingTicketURL = cas.getGrantingTicketURL(user); - Map whereParams = new HashMap(); - whereParams.put("name", "aaa00"); - Object[] params = new Object[] { user, - cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), - whereParams }; - try { - client.execute(PAC_MODULE + ".delete", params); - } catch (XmlRpcException e) { - fail(e.getMessage()); - } - assertEquals(count - 1, getPacsCount()); - } - -// @Test - public void testDelMember() { - int count = getMembersCount(); - String user = "ad"; - String grantingTicketURL = cas.getGrantingTicketURL(user); - Map whereParams = new HashMap(); - whereParams.put("membercode", "hsh00-aaa"); - Object[] params = new Object[] { user, - cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), - whereParams }; - try { - client.execute(CUST_MODULE + ".delete", params); - } catch (XmlRpcException e) { - fail(e.getMessage()); - } - assertEquals(count - 1, getMembersCount()); - } - private int getMembersCount() { int count = 0; String user = "ad"; diff --git a/hsarback/test/de/hsadmin/remote/SSLCertDomainTest.java b/hsarback/test/de/hsadmin/remote/SSLCertDomainTest.java new file mode 100644 index 0000000..57c20fc --- /dev/null +++ b/hsarback/test/de/hsadmin/remote/SSLCertDomainTest.java @@ -0,0 +1,68 @@ +package de.hsadmin.remote; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.client.XmlRpcClient; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import de.hsadmin.core.qserv.CommandShell; +import de.hsadmin.core.qserv.ShellException; +import de.hsadmin.core.util.Config; + +public class SSLCertDomainTest { + + private static final String MODULE = "domain"; + + private XmlRpcClient client; + private RemoteCASHelper cas; + private Config config; + + @Before + public void setUp() throws Exception { + client = RemoteTestHelper.getClient(); + cas = new RemoteCASHelper(); + config = Config.getInstance(); + } + + @After + public void tearDown() throws Exception { + client = null; + cas = null; + config = null; + } + + @Test + public void testSSLCertWithoutChain() { + String user = "ad"; + String grantingTicketURL = cas.getGrantingTicketURL(user); + Map setParams = new HashMap(); + setParams.put("name", "aaa02"); + setParams.put("hive", "h81"); + setParams.put("customer", config.getProperty("accountprefix.customer") + "-aaa"); + setParams.put("basepac", "DW/B"); + setParams.put("curinetaddr", "176.9.242.75"); + Object[] params = new Object[] { user, + cas.getServiceTicket(grantingTicketURL, RemoteTestHelper.getBackendURL()), + setParams }; + try { + Object execute = client.execute(MODULE + ".add", params); + assertTrue(execute instanceof Map); + Thread.sleep(5000L); + CommandShell.execute("grep 'SSLCertificateChainFile' /var/local/lxc/hive/etc/apache2/sites-generated/aaa02.hostsharing.net"); + fail("ShellException expected"); + } catch (XmlRpcException e) { + fail(e.getMessage()); + } catch (ShellException e) { + } catch (InterruptedException e) { + fail(e.getMessage()); + } + } + +}