hsarback/build.xml | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/core/qserv/QueueServer.java | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/core/qserv/QueueTask.java | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/core/qserv/TemplateProcessor.java | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/mods/pac/PacProcessorFactory.java | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/mods/pac/email_new_pac_account.jtpl | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/mods/pac/hosts.jtpl | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/mods/pac/interfaces.jtpl | ●●●●● patch | view | raw | blame | history | |
hsarback/src/de/hsadmin/mods/pac/sudoers.jtpl | ●●●●● patch | view | raw | blame | history |
hsarback/build.xml
@@ -40,6 +40,19 @@ <sleep minutes="5"/> </target> <target name="jar" depends="enhance"> <jar destfile="build/hsar.jar"> <fileset dir="build/cls"/> <fileset dir="src"> <include name="**/*.properties"/> <include name="**/*.jtpl"/> </fileset> <fileset dir="conf"> <include name="**/*.xml"/> </fileset> </jar> </target> <target name="war" depends="enhance"> <copy file="conf/WEB-INF/web.xml" todir="webapp/WEB-INF/"> <filterset> hsarback/src/de/hsadmin/core/qserv/QueueServer.java
@@ -144,29 +144,27 @@ // execute processor within the message task.getProcessor().process(); System.out.println("done"); // mark done sendStatus(task); } catch (Exception receiveException) { System.err.println("exception " + receiveException); // TODO: // logging receiveException.printStackTrace(System.err); if (receiveException.getCause() != null) { System.err.println("caused by exception " + receiveException.getCause()); // TODO: logging receiveException.getCause().printStackTrace(System.err); } else System.err.println("no further cause available"); task.setException(receiveException); sendStatus(task); } catch (Throwable t) { System.err.println("severe exception " + t); // TODO: logging } catch (Throwable throwable) { logException(throwable); task.setException(throwable); } finally { sendStatus(task); setNMessagesProcessed(getNMessagesProcessed() + 1); notifyAll(); } } private void logException(Throwable t) { System.err.println("exception " + t); // TODO: logging t.printStackTrace(System.err); if (t.getCause() != null) { System.err.println("caused by exception " + t.getCause()); // TODO: logging t.getCause().printStackTrace(System.err); } else System.err.println("no further cause available"); } @Override public void onException(JMSException e) { System.out.println("Exception: " + e.getMessage()); hsarback/src/de/hsadmin/core/qserv/QueueTask.java
@@ -181,15 +181,14 @@ public String getException() { return exception; }; } public void setException(String exception) { this.exception = exception; } public void setException(Exception exception) { this.exception = exception.toString(); // TODO: stack+cause public void setException(Throwable exception) { this.exception = exception.getMessage(); } @Override hsarback/src/de/hsadmin/core/qserv/TemplateProcessor.java
@@ -6,13 +6,14 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Iterator; import java.util.Map; import net.sf.jtpl.Template; public class TemplateProcessor extends AbstractProcessor { private static final long serialVersionUID = 4520635523274792876L; private static final long serialVersionUID = 2L; private String content = null; private String targetPath = null; @@ -34,6 +35,29 @@ } } public TemplateProcessor(String templateName, Map<String, String> mainValues, Iterator<Map<String, String>> iterateValues, String targetPath, boolean overwriteTarget) throws ProcessorException { this.targetPath = targetPath; this.overwriteTarget = overwriteTarget; try { InputStream stream = TemplateProcessor.class.getClassLoader().getResourceAsStream(templateName); Template template = new Template(new InputStreamReader(stream)); for (String key : mainValues.keySet()) { template.assign(key, mainValues.get(key)); } while (iterateValues.hasNext()) { Map<String, String> iterationValues = iterateValues.next(); for (String key : iterationValues.keySet()) { template.assign(key, iterationValues.get(key)); } template.parse("main.iterate"); } template.parse("main"); content = template.out(); } catch (IOException e) { throw new ProcessorException(e); } } @Override public Object process() throws ProcessorException { try { hsarback/src/de/hsadmin/mods/pac/PacProcessorFactory.java
@@ -3,6 +3,10 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; @@ -46,16 +50,33 @@ if (unixUserSet.size() == 1) { unixUser = unixUserSet.iterator().next(); } Processor hostsAppender = new ShellProcessor("echo '" + inetAddr + " " + pacName +".hostsharing.net " + pacName + "\n' >>/etc/hosts"); Processor interfacesAppender = new ShellProcessor("echo 'auto eth0:" + pacName + "\n" + "iface eth0:" + pacName + " inet static\n" + "\taddress " + inetAddr + "\n" + "\tnetmask 255.255.255.0\n\n' >>/etc/network/interfaces"); Processor sudoersAppender = new ShellProcessor("echo '" + pacName + " ALL = (%" + pacName + ") NOPASSWD: ALL\n' >> /etc/sudoers"); Hive hive = pac.getHive(); Map<String, String> hiveValues = new HashMap<String, String>(); hiveValues.put("HIVE", hive.getName()); String hiveIP = hive.getInetAddr().getInetAddr(); hiveValues.put("HIVE_IP", hiveIP); hiveValues.put("HIVE_GATEWAY", hiveIP.substring(0, hiveIP.lastIndexOf('.')) + ".1"); List<Map<String, String>> pacValuesList = new ArrayList<Map<String, String>>(); Set<Pac> pacsSet = hive.getPacs(); for (Pac p : pacsSet) { HashMap<String, String> pacValues = new HashMap<String, String>(); pacValues.put("PAC", p.getName()); pacValues.put("PAC_IP", p.getCurINetAddr().getInetAddr()); pacValuesList.add(pacValues); } // nicht ausprobiert! Processor hostsAppender = new TemplateProcessor("/de/hsadmin/mods/pac/hosts.jtpl", hiveValues, pacValuesList.iterator(), "/etc/hosts", true); Processor interfacesAppender = new TemplateProcessor("/de/hsadmin/mods/pac/interfaces.jtpl", hiveValues, pacValuesList.iterator(), "/etc/network/interfaces", true); Processor sudoersAppender = new TemplateProcessor("/de/hsadmin/mods/pac/sudoers.jtpl", hiveValues, pacValuesList.iterator(), "/etc/sudoers", true); // nicht ausprobiert! String password = PwGenerator.generatePassword(7, flagBuilder.build(), 100, random); Processor newUsersProc = new ShellProcessor( "newusers", pacName + ":" + password + ":" + unixUser.getUserId() + ":" + unixUser.getPac().getName() + unixUser.getUserId() + ":" + unixUser.getUserId() + ":" + unixUser.getComment() + ":" + unixUser.getHomedir() + ":" + unixUser.getShell() + "\n"); try { @@ -71,7 +92,10 @@ "Zugangsdaten des neue Hostsharing Pakets " + pacName, template.out()) ); return new CompoundProcessor(hostsAppender, interfacesAppender, sudoersAppender, newUsersProc, emailPasswordProc); Processor priProcessor = new CompoundProcessor(hostsAppender, interfacesAppender, sudoersAppender, newUsersProc); WaitingTasksProcessor secProcessor = new WaitingTasksProcessor(priProcessor); secProcessor.appendProcessor(pac.getHiveName(), emailPasswordProc, "send email to customer"); return secProcessor; } catch (IllegalArgumentException e) { throw new ProcessorException(e); } catch (IOException e) { hsarback/src/de/hsadmin/mods/pac/email_new_pac_account.jtpl
@@ -1,17 +1,17 @@ <!-- BEGIN: main -->Das neue Hostsharing Paket {PAC} ist eingerichtet. Zugangsdaten: <!-- BEGIN: main -->Das neue Hostsharing Paket {PAC} ist eingerichtet. Die Zugangsdaten sind: Hostname (HTTP, FTP, SSH, POP3, IMAP): {PAC}.hostsharing.net Benutzernamen (Paket-Admin-Account): {PAC} Passwort: {PASSWORD} Wir bitten zu berücksichtigen, dass man mit diesem Passwort sehr viel Macht über das Paket hat, so ist damit z.B. die Bestellung von Domains möglich. Bitte daher die u.g. Sicherheitshinweise beachten und den Paketadmin-Account {PAC} nicht mit unsicheren (unverschlüsselten) Protokollen wie POP3 oder FTP ohne TLS verwenden! Wir bitten zu beruecksichtigen, dass man mit diesem Passwort sehr viel Macht ueber das Paket hat. Bitte daher die u.g. Sicherheitshinweise beachten und den Paketadmin-Account {PAC} nicht mit unsicheren (unverschluesselten) Protokollen wie POP3 oder FTP ohne TLS verwenden! E-Mail-Benachrichtigungen für den Paket-Admin gehen direkt an den o.g. Account. Über den E-Mail-Alias {PAC} können diese E-Mails E-Mail-Benachrichtigungen fuer den Paket-Admin gehen direkt an den o.g. Account. Ueber den E-Mail-Alias {PAC} koennen diese E-Mails an externe E-Mail-Adressen weitergeleitet werden. Initial ist eine Weiterleitung an {CUST_EMAIL} eingetragen. @@ -20,42 +20,43 @@ Verwaltung zu trennen. Dies gilt insbesondere, wenn die Domain-Inhalte per FTP gepflegt werden sollen. Weitere Accounts (neben dem Paketadmin-Account {PAC}) können nach einem Weitere Accounts (neben dem Paketadmin-Account {PAC}) koennen nach einem Login per SSH mit dem Kommandozeilen-Programm hsadmin eingerichtet werden (in Kürze auch per Web-Client). Dokumentation finden Sie unter: oder mit dem Web-Client unter http://admin.hostsharing.net Dokumentation finden Sie unter: <http://www.hostsharing.net/dokumentation.html> Der Webspace des Paketes ist theoretisch ab sofort unter <http://{PAC}.hostsharing.net/> erreichbar, allerdings kann es durch DNS-Caches Verzögerungen geben. Das DocumentRoot ist ~{PAC}/web, wobei DNS-Caches Verzoegerungen geben. Das DocumentRoot ist ~{PAC}/web, wobei ~{PAC}/cgi als /cgi-bin in den Webspace eingeblendet wird. In SW Paketen darf dieses CGI auch nur für administrative Zwecke verwendet werden. darf dieses CGI nur fuer administrative Zwecke verwendet werden. Die vorgenannte Paket-Subdomain ist jedoch eher zum Testen und Ausprobieren gedacht und hat mit dem folgenden Domain-Webspace nichts zu tun, der wird unter ~{PAC}/doms/ angelegt, sobald eine Domain aufgeschaltet wird. Dort gibt es dann für jede Domain ein separates Verzeichnis. es dann fuer jede Domain ein separates Verzeichnis. Das Verfahren zum Bestellen von Domains ist auf unserer Website unter http://www.hostsharing.net/dokumentation/einstieg-bei-hostsharing/domain-bestellen.html beschrieben. Ein Web-Interface hierfür ist in Entwicklung. beschrieben. Bei evtl. auftretenden Problemen mit dem Server bitte zunächst auf Bei evtl. auftretenden Problemen mit dem Server bitte zunaechst auf unserer Status-Website <http://status.hostsharing.net/> nachsehen, insbesondere auch auf der dortigen Seite "Aktionen", ob die Hostmaster bereits aktiv sind. Falls nicht, können die Hostmaster bei dringenden Problemen über die Rufnummer +49 40 209331331 erreicht werden. bereits aktiv sind. Falls nicht, koennen die Hostmaster bei dringenden Problemen ueber die Rufnummer +49 40 209331331 erreicht werden. Bitte ggf. lange klingeln lassen, aber nicht mehr anrufen, wenn die Hostmaster laut Status-Seite "Aktionen" bereits dabei sind, das Problem zu beheben, da dies die Arbeiten dann nur verzögern würde. das Problem zu beheben, da dies die Arbeiten dann nur verzoegern wuerde. Auch ist diese Rufnummer keine Support-Rufnummer, telefonische Support-Anfragen können grundsätzlich nicht beantwortet werden. Support-Anfragen koennen grundsaetzlich nicht beantwortet werden. Weitere Fragen beantworten wir gerne per E-Mail, am liebsten auf der passenden öffentlichen Mailingliste (in den meisten Fällen wohl support@). Einen Übeblick über unsere Mailinglisten bietet die Website: http://www.hostsharing.net/forum/mailinglisten.html passenden oeffentlichen Mailingliste (in den meisten Faellen wohl support@). Einen Ueberblick ueber unsere Mailinglisten bietet die Website: https://www.hostsharing.net/gemeinschaft Viel Erfolg mit dem neuen Paket bei Hostsharing! @@ -67,7 +68,7 @@ -- Hostsharing Service | http://www.hostsharing.net Telefon: +49 40 209331311 | Fax: +49 40 209331312 Hostsharing eG | Glockengießerwall 17 | D-20095 Hamburg Hostsharing eG | Glockengiesserwall 17 | D-20095 Hamburg Registergericht Hamburg, GnR 1007 | USt.-ID-Nr.: DE218602793 vertretungsberechtigter Vorstand: Michael Hierweck, Uwe Müller vertretungsberechtigter Vorstand: Michael Hierweck, Uwe Mueller <!-- END: main --> hsarback/src/de/hsadmin/mods/pac/hosts.jtpl
New file @@ -0,0 +1,14 @@ <!-- BEGIN: main -->127.0.0.1 localhost ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts {HIVE_IP} {HIVE}.hostsharing.net {HIVE} localhive <!-- BEGIN: iterate -->{PAC_IP} {PAC}.hostsharing.net {PAC} <!-- END: iterate --> <!-- END: main --> hsarback/src/de/hsadmin/mods/pac/interfaces.jtpl
New file @@ -0,0 +1,17 @@ <!-- BEGIN: main -->auto lo iface lo inet loopback auto eth0 iface eth0 inet static address {HIVE_IP} netmask 255.255.255.0 gateway {HIVE_GATEWAY} <!-- BEGIN: iterate -->auto eth0:{PAC} iface eth0:{PAC} inet static address {PAC_IP} netmask 255.255.255.0 <!-- END: iterate --> <!-- END: main --> hsarback/src/de/hsadmin/mods/pac/sudoers.jtpl
New file @@ -0,0 +1,25 @@ <!-- BEGIN: main -->### Do not edit this file manually ### Generated by HSAdmin Queue Server # Host alias specification # User alias specification # Cmnd alias specification # Override built in defaults Defaults ignore_dot # "." bzw. "" im PATH ignorieren Defaults always_set_home # HOME entsprechend des Zielusers aendern Defaults env_reset # Environmentvariablen filtern Defaults listpw=all # siehe sudoers(5) # User privilege specification root ALL=(ALL) ALL %adm ALL=NOPASSWD: ALL ################################################################################ <!-- BEGIN: iterate -->{PAC} ALL = (%{PAC}) NOPASSWD: ALL <!-- END: iterate --> <!-- END: main -->