diff --git a/apps/jetty/build.xml b/apps/jetty/build.xml index 6e2f1fd07a9dd05d228fb973e9e5c2ee990de5bb..b939e1432b78dd0f908adc2fc413ed62463d1b68 100644 --- a/apps/jetty/build.xml +++ b/apps/jetty/build.xml @@ -75,25 +75,29 @@ <mkdir dir="jettylib" /> <!-- We copy everything to names without the version numbers so we can update them later. Where there was something similar in Jetty 5, - we use the same names. + we use the same names so they will overwrite the Jetty 5 jar on upgrade. + Otherwise we use the same name as the symlink in Ubuntu /usr/share/java. Reasons for inclusion: start.jar: Needed for clients.config startup of eepsites jetty-util-xxx.jar: LifeCycle (base class for stuff), URIUtil (used in i2psnark) jetty-sslengine-xxx.jar: SSL NIO Connector for console jetty-java5-threadpool-xxx.jar: Concurrent thread pool for eepsite - commons-logging.jar: JspC compiler + jasper*, commons-logging.jar: JspC compiler, webapp runtime + jetty-rewrite-handler: Not used by I2P, but only 20KB and could be useful for eepsites + All of these are available in the Ubuntu packages libjetty-java and libjetty-extra-java --> + <copy preservelastmodified="true" file="${jetty.base}/start.jar" tofile="jettylib/jetty-start.jar" /> <copy preservelastmodified="true" file="${jetty.base}/lib/${jetty.base}.jar" tofile="jettylib/org.mortbay.jetty.jar" /> <copy preservelastmodified="true" file="${jetty.base}/lib/jetty-util-${jetty.ver}.jar" tofile="jettylib/jetty-util.jar" /> - <copy preservelastmodified="true" file="${jetty.base}/lib/servlet-api-2.5-20081211.jar" tofile="jettylib/javax.servlet.jar" /> + <copy preservelastmodified="true" file="${jetty.base}/lib/ext/jetty-java5-threadpool-${jetty.ver}.jar" tofile="jettylib/jetty-java5-threadpool.jar" /> + <copy preservelastmodified="true" file="${jetty.base}/lib/ext/jetty-rewrite-handler-${jetty.ver}.jar" tofile="jettylib/jetty-rewrite-handler.jar" /> <copy preservelastmodified="true" file="${jetty.base}/lib/ext/jetty-sslengine-${jetty.ver}.jar" tofile="jettylib/jetty-sslengine.jar" /> - <copy preservelastmodified="true" file="${jetty.base}/lib/ext/jetty-java5-threadpool-${jetty.ver}.jar" tofile="jettylib/jetty-threadpool.jar" /> <copy preservelastmodified="true" file="${jetty.base}/lib/jsp-2.0/ant-1.6.5.jar" tofile="jettylib/ant.jar" /> <copy preservelastmodified="true" file="${jetty.base}/lib/jsp-2.0/commons-el-1.0.jar" tofile="jettylib/commons-el.jar" /> <copy preservelastmodified="true" file="${jetty.base}/lib/jsp-2.0/jasper-compiler-5.5.15.jar" tofile="jettylib/jasper-compiler.jar" /> <copy preservelastmodified="true" file="${jetty.base}/lib/jsp-2.0/jasper-runtime-5.5.15.jar" tofile="jettylib/jasper-runtime.jar" /> <copy preservelastmodified="true" file="${jetty.base}/lib/jsp-2.0/jsp-api-2.0.jar" tofile="jettylib/jsp-api.jar" /> - <copy preservelastmodified="true" file="${jetty.base}/start.jar" tofile="jettylib/jetty-start.jar" /> + <copy preservelastmodified="true" file="${jetty.base}/lib/servlet-api-2.5-20081211.jar" tofile="jettylib/javax.servlet.jar" /> <delete file="jetty.tar" /> <delete dir="${jetty.base}" /> <!-- commons-logging.jar not in Jetty 6 but we have it in launch4j so copy it over, we need it diff --git a/apps/jetty/java/src/net/i2p/jetty/I2PRequestLog.java b/apps/jetty/java/src/net/i2p/jetty/I2PRequestLog.java index 52c287e18840a121ef9715ca322e49ca6161ff3d..6aa001146f75ed2d543166396870907775ffb702 100644 --- a/apps/jetty/java/src/net/i2p/jetty/I2PRequestLog.java +++ b/apps/jetty/java/src/net/i2p/jetty/I2PRequestLog.java @@ -502,8 +502,8 @@ public class I2PRequestLog extends AbstractLifeCycle implements RequestLog /* ------------------------------------------------------------ */ /** Set the log file date format. - * @see {@link RolloverFileOutputStream#RolloverFileOutputStream(String, boolean, int, TimeZone, String, String)} - * @param logFileDateFormat the logFileDateFormat to pass to {@link RolloverFileOutputStream} + * see RolloverFileOutputStream(String, boolean, int, TimeZone, String, String) + * @param logFileDateFormat the logFileDateFormat to pass to RolloverFileOutputStream */ public void setFilenameDateFormat(String logFileDateFormat) { diff --git a/apps/routerconsole/java/build.xml b/apps/routerconsole/java/build.xml index 1d377e6f331ca5f6ffed139a1af79dd08717b1af..cc88004b4ff45113d7f4d9ea02ef0f0d2e717e1f 100644 --- a/apps/routerconsole/java/build.xml +++ b/apps/routerconsole/java/build.xml @@ -23,7 +23,7 @@ <pathelement location="../../jetty/jettylib/org.mortbay.jetty.jar" /> <pathelement location="../../jetty/jettylib/jetty-util.jar" /> <pathelement location="../../jetty/jettylib/jetty-sslengine.jar" /> - <pathelement location="../../jetty/jettylib/jetty-threadpool.jar" /> + <pathelement location="../../jetty/jettylib/jetty-java5-threadpool.jar" /> <pathelement location="../../jetty/jettylib/javax.servlet.jar" /> <pathelement location="../../jetty/jettylib/jsp-api.jar" /> <pathelement location="../../jetty/jettylib/jetty-i2p.jar" /> @@ -60,7 +60,7 @@ <pathelement location="../../jetty/jettylib/org.mortbay.jetty.jar" /> <pathelement location="../../jetty/jettylib/jetty-util.jar" /> <pathelement location="../../jetty/jettylib/jetty-sslengine.jar" /> - <pathelement location="../../jetty/jettylib/jetty-threadpool.jar" /> + <pathelement location="../../jetty/jettylib/jetty-java5-threadpool.jar" /> <pathelement location="../../jetty/jettylib/javax.servlet.jar" /> <pathelement location="../../jetty/jettylib/jsp-api.jar" /> <pathelement location="../../jetty/jettylib/jetty-i2p.jar" /> @@ -280,7 +280,7 @@ <pathelement location="../../jetty/jettylib/org.mortbay.jetty.jar" /> <pathelement location="../../jetty/jettylib/jetty-util.jar" /> <pathelement location="../../jetty/jettylib/jetty-sslengine.jar" /> - <pathelement location="../../jetty/jettylib/jetty-threadpool.jar" /> + <pathelement location="../../jetty/jettylib/jetty-java5-threadpool.jar" /> <pathelement location="../../jetty/jettylib/jsp-api.jar" /> <pathelement location="../../jetty/jettylib/jetty-i2p.jar" /> <pathelement location="../../systray/java/build/obj" /> diff --git a/build.xml b/build.xml index 52ccc035984c6e10c34fdcef24735f4097f6158d..2675a17f59dc67a429961b39118ba2357612572b 100644 --- a/build.xml +++ b/build.xml @@ -420,7 +420,7 @@ <pathelement location="apps/jetty/jettylib/javax.servlet.jar" /> <pathelement location="apps/jetty/jettylib/jetty-sslengine.jar" /> <pathelement location="apps/jetty/jettylib/jetty-start.jar" /> - <pathelement location="apps/jetty/jettylib/jetty-threadpool.jar" /> + <pathelement location="apps/jetty/jettylib/jetty-java5-threadpool.jar" /> <pathelement location="apps/jetty/jettylib/jetty-util.jar" /> <pathelement location="apps/jetty/jettylib/jsp-api.jar" /> <pathelement location="apps/systray/java/lib/systray4j.jar" /> @@ -943,7 +943,7 @@ can't overwrite an existing eepsite dir in a non-split configuration. --> <copy todir="pkg-temp/eepsite-jetty6" > - <fileset dir="installer/resources/eepsite" includes="jetty.xml jetty-ssl.xml contexts/* etc/*" /> + <fileset dir="installer/resources/eepsite" includes="*.xml contexts/* etc/*" /> </copy> </target> diff --git a/installer/resources/clients.config b/installer/resources/clients.config index 8d408cb17a13d61337045a1748c9b69f9f997fe4..111845921f8048c976a3f086f336d70896899309 100644 --- a/installer/resources/clients.config +++ b/installer/resources/clients.config @@ -42,6 +42,10 @@ clientApp.2.startOnLoad=true # run our own eepsite with a seperate jetty instance clientApp.3.main=org.mortbay.start.Main clientApp.3.name=I2P webserver (eepsite) +## To use the rewrite handler, edit jetty-rewrite.xml and use: +#clientApp.3.args="/path/to/jetty.xml" "/path/to/jetty-rewrite.xml" +## To use local SSL, edit jetty-ssl.xml and use: +#clientApp.3.args="/path/to/jetty.xml" "/path/to/jetty-ssl.xml" clientApp.3.args="eepsite/jetty.xml" clientApp.3.delay=30 clientApp.3.startOnLoad=true diff --git a/installer/resources/eepsite/jetty-rewrite.xml b/installer/resources/eepsite/jetty-rewrite.xml new file mode 100644 index 0000000000000000000000000000000000000000..ef5043aac00bea97acb40f55ea55276abdc5553d --- /dev/null +++ b/installer/resources/eepsite/jetty-rewrite.xml @@ -0,0 +1,149 @@ +<?xml version="1.0"?> +<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> + +<!-- =============================================================== --> +<!-- Mixin the RewriteHandler --> +<!-- =============================================================== --> + + +<Configure id="Server" class="org.mortbay.jetty.Server"> + + <!-- =========================================================== --> + <!-- Configure Rewrite Handler --> + <!-- =========================================================== --> + <Get id="oldhandler" name="handler"/> + + <Set name="handler"> + <New id="Rewrite" class="org.mortbay.jetty.handler.rewrite.RewriteHandler"> + + <Set name="handler"><Ref id="oldhandler"/></Set> + <Set name="rewriteRequestURI">true</Set> + <Set name="rewritePathInfo">false</Set> + <Set name="originalPathAttribute">requestedPath</Set> + + <Set name="rules"> + <Array type="org.mortbay.jetty.handler.rewrite.Rule"> + + <!-- return an error message if low on threads; put this at the top so it will be processed first --> + <Item> + <New id="lowThreads" class="org.mortbay.jetty.handler.rewrite.LowThreadsRuleContainer"> + <!-- set the trigger for low threads ridiculously low + uncomment the block below to see it in action --> + <!--Ref id="Server"> + <Get id="serverThreadPool" name="threadPool"> + <Set name="minThreads">3</Set> + <Set name="maxThreads">4</Set> + <Set name="lowThreads">0</Set> + </Get> + </Ref> + + <Set name="threadPool"><Ref id="serverThreadPool"/></Set--> + + <Call name="addRule"> + <Arg> + <New id="busyresponse" class="org.mortbay.jetty.handler.rewrite.ResponsePatternRule"> + <Set name="pattern">/*</Set> + <Set name="code">500</Set> + <Set name="reason">Server busy</Set> + </New> + </Arg> + </Call> + </New> + </Item> + + <!-- Add rule to protect against IE ssl bug --> + <Item> + <New class="org.mortbay.jetty.handler.rewrite.MsieSslRule"/> + </Item> + + <!-- protect favicon handling --> + <Item> + <New class="org.mortbay.jetty.handler.rewrite.HeaderPatternRule"> + <Set name="pattern">/favicon.ico</Set> + <Set name="name">Cache-Control</Set> + <Set name="value">Max-Age=3600,public</Set> + <Set name="terminating">true</Set> + </New> + </Item> + + + <!-- add a regex rule --> + <Item> + <New class="org.mortbay.jetty.handler.rewrite.RewriteRegexRule"> + <Set name="regex">/rewrite/dump/regex/([^/]*)/(.*)</Set> + <Set name="replacement">/test/dump/$2/$1</Set> + </New> + </Item> + + <!-- add a rewrite rule --> + <Item> + <New id="" class="org.mortbay.jetty.handler.rewrite.RewritePatternRule"> + <Set name="pattern">/rewrite</Set> + <Set name="replacement">/rewrittento</Set> + </New> + </Item> + + <!-- add a response rule --> + <Item> + <New id="response" class="org.mortbay.jetty.handler.rewrite.ResponsePatternRule"> + <Set name="pattern">/rewrite/session/</Set> + <Set name="code">401</Set> + <Set name="reason">Setting error code 401</Set> + </New> + </Item> + + <!-- add a header pattern rule --> + <Item> + <New id="header" class="org.mortbay.jetty.handler.rewrite.HeaderPatternRule"> + <Set name="pattern">*.jsp</Set> + <Set name="name">Server</Set> + <Set name="value">Server for JSP</Set> + </New> + </Item> + + <!-- add a redirect --> + <Item> + <New id="redirect" class="org.mortbay.jetty.handler.rewrite.RedirectPatternRule"> + <Set name="pattern">/rewrite/dispatch</Set> + <Set name="location">http://jetty.mortbay.org</Set> + </New> + </Item> + + <Item> + <New id="forwardedHttps" class="org.mortbay.jetty.handler.rewrite.ForwardedSchemeHeaderRule"> + <Set name="header">X-Forwarded-Scheme</Set> + <Set name="headerValue">https</Set> + <Set name="scheme">https</Set> + </New> + </Item> + + <Item> + <New id="virtualHost" class="org.mortbay.jetty.handler.rewrite.VirtualHostRuleContainer"> + + <Set name="virtualHosts"> + <Array type="java.lang.String"> + <Item>mortbay.com</Item> + <Item>www.mortbay.com</Item> + <Item>mortbay.org</Item> + <Item>www.mortbay.org</Item> + </Array> + </Set> + + <Call name="addRule"> + <Arg> + <New class="org.mortbay.jetty.handler.rewrite.CookiePatternRule"> + <Set name="pattern">/*</Set> + <Set name="name">CookiePatternRule</Set> + <Set name="value">1</Set> + </New> + </Arg> + </Call> + + </New> + </Item> + </Array> + </Set> + </New> + </Set> + +</Configure> diff --git a/router/java/src/net/i2p/router/startup/MigrateJetty.java b/router/java/src/net/i2p/router/startup/MigrateJetty.java index 6a82fff95e46f310bf25cdc4c9934cb0b67f639e..ab01c2855379a8b907b1e4165688638291f8c1e0 100644 --- a/router/java/src/net/i2p/router/startup/MigrateJetty.java +++ b/router/java/src/net/i2p/router/startup/MigrateJetty.java @@ -20,6 +20,7 @@ import net.i2p.router.RouterContext; * Saves $D/jetty.xml to $D/jetty5.xml * Copies $I2P/eepsite-jetty6/jetty.xml to $D/jetty.xml, edited for $D * Copies $I2P/eepsite-jetty6/jetty-ssl.xml to $D/jetty-ssl.xml, edited for $D + * Copies $I2P/eepsite-jetty6/jetty-rewrite.xml to $D/jetty-rewrite.xml * Copies $I2P/eepsite-jetty6/context/base-context.xml to $D/jetty.xml, edited for $D * Copies $I2P/eepsite-jetty6/context/cgi-context.xml to $D/jetty.xml, edited for $D * Copies $I2P/eepsite-jetty6/etc/* to $D/etc @@ -56,9 +57,13 @@ abstract class MigrateJetty { System.err.println("WARNING: Jetty 6 unavailable, cannot migrate " + client); continue; } - String xml = app.args; - if (xml == null) + if (app.args == null) continue; + // remove quotes + String args[] = LoadClientAppsJob.parseArgs(app.args); + if (args.length == 0) + continue; + String xml = args[0]; File xmlFile = new File(xml); if (!xmlFile.isAbsolute()) xmlFile = new File(ctx.getAppDir(), xml); @@ -98,6 +103,7 @@ abstract class MigrateJetty { (new File(eepsite, "contexts")).mkdir(); WorkingDir.migrateJettyXml(baseEep, eepsite, BASE_CONTEXT, "./eepsite/", newPath); WorkingDir.migrateJettyXml(baseEep, eepsite, CGI_CONTEXT, "./eepsite/", newPath); + WorkingDir.copyFile(new File(baseEep, "jetty-rewrite.xml"), new File(eepsite, "jetty-rewrite.xml")); (new File(eepsite, "etc")).mkdir(); File to = new File(eepsite, "etc/realm.properties"); if (!to.exists())