diff --git a/.gitignore b/.gitignore index cd084872657..12ab1b6945c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ # maven target/ */src/main/java/META-INF/ +*.versionsBackup # common junk *.log @@ -34,3 +35,6 @@ target/ # merge tooling *.orig + +#maven +*.versionsBackup diff --git a/VERSION.txt b/VERSION.txt index 359eb30f510..4192fb682c6 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1,4 +1,10 @@ -jetty-7.6.0-SNAPSHOT +jetty-7.6.1-SNAPSHOT + +jetty-7.6.0.v20120127 - 27 January 2012 + + 368773 allow authentication to be set by non securityHandler handlers + + 368992 avoid update key while flushing during a write + + 369216 turned off the shared resource cache + + 369349 replace quotes with a space escape method jetty-7.6.0.RC5 - 20 January 2012 + 359329 Prevent reinvocation of LoginModule.login with jaspi for already diff --git a/example-jetty-embedded/pom.xml b/example-jetty-embedded/pom.xml index 3eb95b0ea27..63a378157e9 100644 --- a/example-jetty-embedded/pom.xml +++ b/example-jetty-embedded/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 example-jetty-embedded diff --git a/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/DumpServlet.java b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/DumpServlet.java new file mode 100644 index 00000000000..25a0985a59c --- /dev/null +++ b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/DumpServlet.java @@ -0,0 +1,44 @@ +// ======================================================================== +// Copyright (c) 2009-2009 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== + + +package org.eclipse.jetty.embedded; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@SuppressWarnings("serial") +public class DumpServlet extends HttpServlet +{ + public DumpServlet() + { + } + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException + { + response.setContentType("text/html"); + response.setStatus(HttpServletResponse.SC_OK); + response.getWriter().println("

DumpServlet

");
+        response.getWriter().println("requestURI=" + request.getRequestURI());
+        response.getWriter().println("contextPath=" + request.getContextPath());
+        response.getWriter().println("servletPath=" + request.getServletPath());
+        response.getWriter().println("pathInfo=" + request.getPathInfo());
+        response.getWriter().println("session=" + request.getSession(true).getId());
+        response.getWriter().println("
"); + } +} \ No newline at end of file diff --git a/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/HelloServlet.java b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/HelloServlet.java index 76b201e82ed..53c02f57874 100644 --- a/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/HelloServlet.java +++ b/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/HelloServlet.java @@ -40,7 +40,6 @@ public class HelloServlet extends HttpServlet { response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); - response.getWriter().println("

" + greeting + " SimpleServlet

"); - response.getWriter().println("session=" + request.getSession(true).getId()); + response.getWriter().println("

" + greeting + " from HelloServlet

"); } } \ No newline at end of file diff --git a/jetty-aggregate/jetty-all-server/pom.xml b/jetty-aggregate/jetty-all-server/pom.xml index 072ff23321e..441fe8c0435 100644 --- a/jetty-aggregate/jetty-all-server/pom.xml +++ b/jetty-aggregate/jetty-all-server/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.aggregate jetty-aggregate-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-all-server diff --git a/jetty-aggregate/jetty-all/pom.xml b/jetty-aggregate/jetty-all/pom.xml index 3a6eee3ac51..4b55a5c9f38 100644 --- a/jetty-aggregate/jetty-all/pom.xml +++ b/jetty-aggregate/jetty-all/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.aggregate jetty-aggregate-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-all diff --git a/jetty-aggregate/jetty-client/pom.xml b/jetty-aggregate/jetty-client/pom.xml index e30ee5b160a..4b6a1f5af70 100644 --- a/jetty-aggregate/jetty-client/pom.xml +++ b/jetty-aggregate/jetty-client/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.aggregate jetty-aggregate-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-client diff --git a/jetty-aggregate/jetty-plus/pom.xml b/jetty-aggregate/jetty-plus/pom.xml index ff9bf1f74c9..6b2dc68292e 100644 --- a/jetty-aggregate/jetty-plus/pom.xml +++ b/jetty-aggregate/jetty-plus/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.aggregate jetty-aggregate-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-plus diff --git a/jetty-aggregate/jetty-server/pom.xml b/jetty-aggregate/jetty-server/pom.xml index 8d3cdddcb2f..4c6b9559b3d 100644 --- a/jetty-aggregate/jetty-server/pom.xml +++ b/jetty-aggregate/jetty-server/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.aggregate jetty-aggregate-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-server diff --git a/jetty-aggregate/jetty-servlet/pom.xml b/jetty-aggregate/jetty-servlet/pom.xml index 2e4f9bd47ee..b84dfefaafc 100644 --- a/jetty-aggregate/jetty-servlet/pom.xml +++ b/jetty-aggregate/jetty-servlet/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.aggregate jetty-aggregate-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-servlet diff --git a/jetty-aggregate/jetty-webapp/pom.xml b/jetty-aggregate/jetty-webapp/pom.xml index 47090b07d8f..b01f1aae5b1 100644 --- a/jetty-aggregate/jetty-webapp/pom.xml +++ b/jetty-aggregate/jetty-webapp/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.aggregate jetty-aggregate-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-webapp diff --git a/jetty-aggregate/jetty-websocket/pom.xml b/jetty-aggregate/jetty-websocket/pom.xml index c650ef55103..982d2884229 100644 --- a/jetty-aggregate/jetty-websocket/pom.xml +++ b/jetty-aggregate/jetty-websocket/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.aggregate jetty-aggregate-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-websocket diff --git a/jetty-aggregate/pom.xml b/jetty-aggregate/pom.xml index 7de1ac8d379..9cda62492f4 100644 --- a/jetty-aggregate/pom.xml +++ b/jetty-aggregate/pom.xml @@ -4,7 +4,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT org.eclipse.jetty.aggregate jetty-aggregate-project diff --git a/jetty-ajp/pom.xml b/jetty-ajp/pom.xml index c02155bea81..7ebc0f51cbf 100644 --- a/jetty-ajp/pom.xml +++ b/jetty-ajp/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-ajp diff --git a/jetty-annotations/pom.xml b/jetty-annotations/pom.xml index a4b6c219f44..2e804956dd7 100644 --- a/jetty-annotations/pom.xml +++ b/jetty-annotations/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-annotations diff --git a/jetty-client/pom.xml b/jetty-client/pom.xml index 02a0320bdd9..a273af541a7 100644 --- a/jetty-client/pom.xml +++ b/jetty-client/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 diff --git a/jetty-continuation/pom.xml b/jetty-continuation/pom.xml index 6c4c47b893a..2ce99f97153 100644 --- a/jetty-continuation/pom.xml +++ b/jetty-continuation/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-continuation diff --git a/jetty-deploy/pom.xml b/jetty-deploy/pom.xml index 528e7ce46c0..f8e1e59c5b7 100644 --- a/jetty-deploy/pom.xml +++ b/jetty-deploy/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-deploy diff --git a/jetty-distribution/pom.xml b/jetty-distribution/pom.xml index 173d546d426..9a86af25c46 100644 --- a/jetty-distribution/pom.xml +++ b/jetty-distribution/pom.xml @@ -3,7 +3,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT jetty-distribution Jetty :: Distribution Assemblies diff --git a/jetty-http-spi/pom.xml b/jetty-http-spi/pom.xml index cf4900757c7..0ce5763e4a7 100644 --- a/jetty-http-spi/pom.xml +++ b/jetty-http-spi/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-http-spi diff --git a/jetty-http/pom.xml b/jetty-http/pom.xml index 48de7f48335..e6674c7abb9 100644 --- a/jetty-http/pom.xml +++ b/jetty-http/pom.xml @@ -2,7 +2,7 @@ jetty-project org.eclipse.jetty - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-http diff --git a/jetty-io/pom.xml b/jetty-io/pom.xml index 548bab2f30a..4787cd47913 100644 --- a/jetty-io/pom.xml +++ b/jetty-io/pom.xml @@ -2,7 +2,7 @@ jetty-project org.eclipse.jetty - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-io diff --git a/jetty-jaspi/pom.xml b/jetty-jaspi/pom.xml index f06938ce0f8..483f5858e6b 100644 --- a/jetty-jaspi/pom.xml +++ b/jetty-jaspi/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-jaspi diff --git a/jetty-jmx/pom.xml b/jetty-jmx/pom.xml index 4b9a0dc2a9d..97429c3d95b 100644 --- a/jetty-jmx/pom.xml +++ b/jetty-jmx/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-jmx diff --git a/jetty-jndi/pom.xml b/jetty-jndi/pom.xml index 2a37fb7f390..d8c9b642534 100644 --- a/jetty-jndi/pom.xml +++ b/jetty-jndi/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-jndi diff --git a/jetty-monitor/pom.xml b/jetty-monitor/pom.xml index bfff477df54..d291d3cc4d4 100644 --- a/jetty-monitor/pom.xml +++ b/jetty-monitor/pom.xml @@ -19,7 +19,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-monitor diff --git a/jetty-nested/pom.xml b/jetty-nested/pom.xml index 40da79b3cfe..9f69eb645bd 100644 --- a/jetty-nested/pom.xml +++ b/jetty-nested/pom.xml @@ -4,7 +4,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT jetty-nested Jetty :: Nested diff --git a/jetty-nosql/pom.xml b/jetty-nosql/pom.xml index 43b99da8fe2..7e747ab3f8f 100644 --- a/jetty-nosql/pom.xml +++ b/jetty-nosql/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-nosql diff --git a/jetty-osgi/jetty-osgi-boot-jsp/pom.xml b/jetty-osgi/jetty-osgi-boot-jsp/pom.xml index aed5c0202e0..010a41204d4 100644 --- a/jetty-osgi/jetty-osgi-boot-jsp/pom.xml +++ b/jetty-osgi/jetty-osgi-boot-jsp/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.osgi jetty-osgi-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT ../pom.xml 4.0.0 diff --git a/jetty-osgi/jetty-osgi-boot-logback/pom.xml b/jetty-osgi/jetty-osgi-boot-logback/pom.xml index 98a73a0ce47..7084874f75d 100644 --- a/jetty-osgi/jetty-osgi-boot-logback/pom.xml +++ b/jetty-osgi/jetty-osgi-boot-logback/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.osgi jetty-osgi-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT ../pom.xml 4.0.0 diff --git a/jetty-osgi/jetty-osgi-boot-warurl/pom.xml b/jetty-osgi/jetty-osgi-boot-warurl/pom.xml index 24e2cc919fa..ae393ea6ea5 100644 --- a/jetty-osgi/jetty-osgi-boot-warurl/pom.xml +++ b/jetty-osgi/jetty-osgi-boot-warurl/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.osgi jetty-osgi-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT ../pom.xml 4.0.0 diff --git a/jetty-osgi/jetty-osgi-boot/pom.xml b/jetty-osgi/jetty-osgi-boot/pom.xml index 43ce529208f..c47b02c0db4 100644 --- a/jetty-osgi/jetty-osgi-boot/pom.xml +++ b/jetty-osgi/jetty-osgi-boot/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.osgi jetty-osgi-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT ../pom.xml 4.0.0 diff --git a/jetty-osgi/jetty-osgi-equinoxtools/pom.xml b/jetty-osgi/jetty-osgi-equinoxtools/pom.xml index 665b3af9679..b59c40c8d45 100644 --- a/jetty-osgi/jetty-osgi-equinoxtools/pom.xml +++ b/jetty-osgi/jetty-osgi-equinoxtools/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.osgi jetty-osgi-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT ../pom.xml 4.0.0 diff --git a/jetty-osgi/jetty-osgi-httpservice/pom.xml b/jetty-osgi/jetty-osgi-httpservice/pom.xml index cb8f9d76281..f3cf6877ee8 100644 --- a/jetty-osgi/jetty-osgi-httpservice/pom.xml +++ b/jetty-osgi/jetty-osgi-httpservice/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.osgi jetty-osgi-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT ../pom.xml 4.0.0 diff --git a/jetty-osgi/pom.xml b/jetty-osgi/pom.xml index ae30fdd313e..99ae8c07307 100644 --- a/jetty-osgi/pom.xml +++ b/jetty-osgi/pom.xml @@ -3,7 +3,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT ../pom.xml org.eclipse.jetty.osgi diff --git a/jetty-osgi/test-jetty-osgi/pom.xml b/jetty-osgi/test-jetty-osgi/pom.xml index a7f02120f2e..fdc943e7f13 100644 --- a/jetty-osgi/test-jetty-osgi/pom.xml +++ b/jetty-osgi/test-jetty-osgi/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty.osgi jetty-osgi-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT ../pom.xml 4.0.0 diff --git a/jetty-overlay-deployer/pom.xml b/jetty-overlay-deployer/pom.xml index 75b8349308e..3f1330f3571 100644 --- a/jetty-overlay-deployer/pom.xml +++ b/jetty-overlay-deployer/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-overlay-deployer diff --git a/jetty-plus/pom.xml b/jetty-plus/pom.xml index 391eb9691c7..a2a6f2c65ef 100644 --- a/jetty-plus/pom.xml +++ b/jetty-plus/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-plus diff --git a/jetty-policy/pom.xml b/jetty-policy/pom.xml index 192234b2626..fc2930ec6f6 100644 --- a/jetty-policy/pom.xml +++ b/jetty-policy/pom.xml @@ -3,7 +3,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT jetty-policy Jetty :: Policy Tool diff --git a/jetty-rewrite/pom.xml b/jetty-rewrite/pom.xml index cdfe6d1c5b0..8717dc55032 100644 --- a/jetty-rewrite/pom.xml +++ b/jetty-rewrite/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-rewrite diff --git a/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RegexTargetHandler.java b/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RegexTargetHandler.java new file mode 100644 index 00000000000..736f8245f9f --- /dev/null +++ b/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RegexTargetHandler.java @@ -0,0 +1,149 @@ +package org.eclipse.jetty.rewrite.handler; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.handler.ContextHandler; +import org.eclipse.jetty.server.handler.ContextHandler.Context; +import org.eclipse.jetty.server.handler.ScopedHandler; +import org.eclipse.jetty.util.component.AggregateLifeCycle; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; + + +/* ------------------------------------------------------------ */ +/** A handle that uses regular expressions to select the target. + *

+ * This handler applies a list of regex to target name mappings to the URIs of requests. + * If the regex matches the URI, then the mapped target name is used in the nested + * call to {@link #doScope(String, Request, HttpServletRequest, HttpServletResponse)}. + *

+ * This handler should be installed as the first handler in a Context. It can be configured + * either with direct calls to {@link #addPatternTarget(String, String)} or by setting + * the context init parameters "org.eclipse.jetty.rewrite.handler.REGEX_MAPPINGS" to a comma + * separated list of strings in the format regex==target. + */ +public class RegexTargetHandler extends ScopedHandler +{ + private final static Logger LOG = Log.getLogger(RegexTargetHandler.class); + public final static String REGEX_MAPPINGS="org.eclipse.jetty.rewrite.handler.REGEX_MAPPINGS"; + static class RegexMapping + { + RegexMapping(String regex,String target) + { + _pattern=Pattern.compile(regex); + _target=target; + } + final Pattern _pattern; + final String _target; + + public String toString() + { + return _pattern+"=="+_target; + } + } + + final private List _patterns = new CopyOnWriteArrayList(); + + /* ------------------------------------------------------------ */ + /** Add a pattern to target mapping. + * @param pattern The regular expression pattern to match. + * @param target The target (normally servlet name) to handle the request + */ + public void addPatternTarget(String pattern,String target) + { + _patterns.add(new RegexMapping(pattern,target)); + } + + /* ------------------------------------------------------------ */ + @Override + protected void doStart() throws Exception + { + super.doStart(); + + Context context = ContextHandler.getCurrentContext(); + if (context!=null) + { + String config=context.getInitParameter(REGEX_MAPPINGS); + LOG.debug("{}={}",REGEX_MAPPINGS,config); + String[] mappings=config.split("\\s*,\\s*"); + for (String mapping : mappings) + { + mapping=mapping.trim(); + String[] parts=mapping.split("\\s*==\\s*"); + if (parts.length==2) + { + String pattern=parts[0]; + String target=parts[1]; + addPatternTarget(pattern,target); + } + else + LOG.warn("Bad regex mapping: "+mapping); + } + } + } + + /* ------------------------------------------------------------ */ + @Override + public void doScope(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + for (RegexTargetHandler.RegexMapping rm : _patterns) + { + Matcher m=rm._pattern.matcher(target); + if (m.matches()) + { + String new_target = rm._target; + final String sp; + final String pi; + + if (m.groupCount()==1&&target.endsWith(m.group(1))) + { + pi=m.group(1); + sp=target.substring(0,target.length()-pi.length()); + } + else + { + sp=target; + pi=null; + } + baseRequest.setServletPath(sp); + baseRequest.setPathInfo(pi); + baseRequest.setAttribute("org.eclipse.jetty.servlet.REGEX_PATH",target); + super.nextScope(new_target,baseRequest,request,response); + return; + } + } + super.nextScope(target,baseRequest,request,response); + } + + /* ------------------------------------------------------------ */ + @Override + public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + String path=(String)baseRequest.getAttribute("org.eclipse.jetty.servlet.REGEX_PATH"); + if (path==null) + path=target; + else + baseRequest.setAttribute("org.eclipse.jetty.servlet.REGEX_PATH",null); + + super.nextHandle(path,baseRequest,request,response); + } + + /* ------------------------------------------------------------ */ + public void dump(Appendable out, String indent) throws IOException + { + AggregateLifeCycle.dumpObject(out,this); + AggregateLifeCycle.dump(out,indent,_patterns,Collections.singletonList(getHandler())); + } + + +} \ No newline at end of file diff --git a/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewriteRegexRule.java b/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewriteRegexRule.java index ce5700155f0..6c57e29bdf6 100644 --- a/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewriteRegexRule.java +++ b/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/RewriteRegexRule.java @@ -23,10 +23,13 @@ import org.eclipse.jetty.server.Request; /** * Rewrite the URI by matching with a regular expression. * The replacement string may use $n" to replace the nth capture group. + * If the replacement string contains ? character, then it is split into a path + * and query string component. The returned target contains only the path. */ public class RewriteRegexRule extends RegexRule implements Rule.ApplyURI { private String _replacement; + private String _query; /* ------------------------------------------------------------ */ public RewriteRegexRule() @@ -43,7 +46,9 @@ public class RewriteRegexRule extends RegexRule implements Rule.ApplyURI */ public void setReplacement(String replacement) { - _replacement = replacement; + String[] split=replacement.split("\\?",2); + _replacement = split[0]; + _query=split.length==2?split[1]:null; } @@ -54,32 +59,36 @@ public class RewriteRegexRule extends RegexRule implements Rule.ApplyURI public String apply(String target, HttpServletRequest request, HttpServletResponse response, Matcher matcher) throws IOException { target=_replacement; + String query=_query; for (int g=1;g<=matcher.groupCount();g++) { - String group = Matcher.quoteReplacement(matcher.group(g)); + String group=matcher.group(g); + if (group==null) + group=""; + else + group = Matcher.quoteReplacement(group); target=target.replaceAll("\\$"+g,group); + if (query!=null) + query=query.replaceAll("\\$"+g,group); } + if (query!=null) + request.setAttribute("org.eclipse.jetty.rewrite.handler.RewriteRegexRule.Q",query); return target; } /* ------------------------------------------------------------ */ public void applyURI(Request request, String oldTarget, String newTarget) throws IOException { - Matcher matcher=_regex.matcher(request.getRequestURI()); - boolean matches = matcher.matches(); - if (matches) + request.setRequestURI(newTarget); + if (_query!=null) { - String uri=_replacement; - for (int g=1;g<=matcher.groupCount();g++) - { - String group = Matcher.quoteReplacement(matcher.group(g)); - uri=uri.replaceAll("\\$"+g,group); - } - request.setRequestURI(uri); + String query=(String)request.getAttribute("org.eclipse.jetty.rewrite.handler.RewriteRegexRule.Q"); + if (request.getQueryString()==null) + request.setQueryString(query); + else + request.setQueryString(request.getQueryString()+"&"+query); } - else - request.setRequestURI(newTarget); } /* ------------------------------------------------------------ */ diff --git a/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/RegexTargetHandlerTest.java b/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/RegexTargetHandlerTest.java new file mode 100644 index 00000000000..c47937621df --- /dev/null +++ b/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/RegexTargetHandlerTest.java @@ -0,0 +1,214 @@ +// ======================================================================== +// Copyright (c) 2006-2009 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== + +package org.eclipse.jetty.rewrite.handler; + +import static junit.framework.Assert.assertEquals; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.Socket; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import javax.servlet.RequestDispatcher; +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import javax.servlet.ServletRequestWrapper; +import javax.servlet.ServletResponseWrapper; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpServletResponseWrapper; + +import junit.framework.Assert; + +import org.eclipse.jetty.rewrite.handler.RegexTargetHandler; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +public class RegexTargetHandlerTest +{ + private static Server __server = new Server(0); + private static int __port; + + @BeforeClass + public static void setup() throws Exception + { + + ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); + context.setContextPath("/"); + __server.setHandler(context); + + // Serve some hello world servlets + context.addServlet(DispatchServletServlet.class,"/dispatch/*"); + context.addServlet(new ServletHolder("HelloAll",new HelloServlet("Hello World")),"/*"); + context.addServlet(new ServletHolder("Italian",new HelloServlet("Buongiorno Mondo")),"/it/*"); + context.addServlet(new ServletHolder("French", new HelloServlet("Bonjour le Monde")),"/fr/*"); + + RegexTargetHandler regexHandler=new RegexTargetHandler(); + regexHandler.setHandler(context.getHandler()); + context.setHandler(regexHandler); + + context.getInitParams().put(RegexTargetHandler.REGEX_MAPPINGS, + " .*\\.fr==French, \n"+ + "/ciao(/.*)$==Italian"); + + __server.start(); + + __port=__server.getConnectors()[0].getLocalPort(); + } + + @AfterClass + public static void shutdown() throws Exception + { + __server.stop(); + } + + + @Test + public void testNormal() throws Exception + { + String[] response=getResponse("/normal"); + assertEquals("HTTP/1.1 200 OK",response[0]); + assertEquals("Hello World",response[1]); + assertEquals("",response[2]); + assertEquals("/normal",response[3]); + + response=getResponse("/it/info"); + assertEquals("HTTP/1.1 200 OK",response[0]); + assertEquals("Buongiorno Mondo",response[1]); + assertEquals("/it",response[2]); + assertEquals("/info",response[3]); + } + + @Test + public void testFullMatch() throws Exception + { + String[] response=getResponse("/some/thing.fr"); + assertEquals("HTTP/1.1 200 OK",response[0]); + assertEquals("Bonjour le Monde",response[1]); + assertEquals("/some/thing.fr",response[2]); + assertEquals("null",response[3]); + } + + @Test + public void testCaptureMatch() throws Exception + { + String[] response=getResponse("/ciao/info"); + assertEquals("HTTP/1.1 200 OK",response[0]); + assertEquals("Buongiorno Mondo",response[1]); + assertEquals("/ciao",response[2]); + assertEquals("/info",response[3]); + } + + @Test + public void testDispatchFullMatch() throws Exception + { + String[] response=getResponse("/dispatch/xxx?forward=/some/thing.fr"); + assertEquals("HTTP/1.1 200 OK",response[0]); + assertEquals("Bonjour le Monde",response[1]); + assertEquals("/some/thing.fr",response[2]); + assertEquals("null",response[3]); + } + + @Test + public void testDispatchCaptureMatch() throws Exception + { + String[] response=getResponse("/dispatch/xxx?forward=/ciao/info"); + assertEquals("HTTP/1.1 200 OK",response[0]); + assertEquals("Buongiorno Mondo",response[1]); + assertEquals("/ciao",response[2]); + assertEquals("/info",response[3]); + } + + + private String[] getResponse(String uri) throws Exception + { + Socket socket = new Socket("127.0.0.1",__port); + + PrintWriter out = new PrintWriter(socket.getOutputStream()); + out.print("GET "+uri+" HTTP/1.0\r\n\r\n"); + out.flush(); + + BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); + + String[] response=new String[4]; + response[0]=in.readLine(); + //System.err.println(response[0]); + + String line=in.readLine(); + while(line.length()>0) + line=in.readLine(); + + response[1]=in.readLine(); + //System.err.println(response[1]); + response[2]=in.readLine(); + //System.err.println(response[2]); + response[3]=in.readLine(); + //System.err.println(response[3]); + + socket.close(); + return response; + } + + + public static class HelloServlet extends HttpServlet implements Servlet + { + final String _hello; + + public HelloServlet(String hello) + { + _hello=hello; + } + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException + { + response.setStatus(200); + response.getWriter().println(_hello); + response.getWriter().println(request.getServletPath()); + response.getWriter().println(request.getPathInfo()); + } + } + + + public static class DispatchServletServlet extends HttpServlet implements Servlet + { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException + { + RequestDispatcher dispatcher = null; + + if(request.getParameter("include")!=null) + { + dispatcher = getServletContext().getRequestDispatcher(request.getParameter("include")); + dispatcher.include(new HttpServletRequestWrapper(request), new HttpServletResponseWrapper(response)); + } + else if(request.getParameter("forward")!=null) + { + dispatcher = getServletContext().getRequestDispatcher(request.getParameter("forward")); + dispatcher.forward(new HttpServletRequestWrapper(request), new HttpServletResponseWrapper(response)); + } + + } + } +} diff --git a/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/RewriteRegexRuleTest.java b/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/RewriteRegexRuleTest.java index 35bb5f4ba0a..1464f67ab9c 100644 --- a/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/RewriteRegexRuleTest.java +++ b/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/RewriteRegexRuleTest.java @@ -23,11 +23,13 @@ public class RewriteRegexRuleTest extends AbstractRuleTestCase { private String[][] _tests= { - {"/foo/bar",".*","/replace","/replace"}, - {"/foo/bar","/xxx.*","/replace",null}, - {"/foo/bar","/(.*)/(.*)","/$2/$1/xxx","/bar/foo/xxx"}, - {"/foo/$bar",".*","/$replace","/$replace"}, - {"/foo/$bar","/foo/(.*)","/$1/replace","/$bar/replace"}, + {"/foo/bar",".*","/replace","/replace",null}, + {"/foo/bar","/xxx.*","/replace",null,null}, + {"/foo/bar","/(.*)/(.*)","/$2/$1/xxx","/bar/foo/xxx",null}, + {"/foo/bar","/(foo)/(.*)(bar)","/$3/$1/xxx$2","/bar/foo/xxx",null}, + {"/foo/$bar",".*","/$replace","/$replace",null}, + {"/foo/$bar","/foo/(.*)","/$1/replace","/$bar/replace",null}, + {"/foo/bar/info","/foo/(NotHere)?([^/]*)/(.*)","/$3/other?p1=$2","/info/other","p1=bar"}, }; private RewriteRegexRule _rule; @@ -47,6 +49,13 @@ public class RewriteRegexRuleTest extends AbstractRuleTestCase _rule.setReplacement(test[2]); String result = _rule.matchAndApply(test[0], _request, _response); assertEquals(test[1], test[3], result); + + _request.setRequestURI(test[0]); + _request.setQueryString(null); + _rule.applyURI(_request,test[0],result); + + assertEquals(test[3], _request.getRequestURI()); + assertEquals(test[4], _request.getQueryString()); } } } diff --git a/jetty-security/pom.xml b/jetty-security/pom.xml index 397991f6299..5a09732e232 100644 --- a/jetty-security/pom.xml +++ b/jetty-security/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-security diff --git a/jetty-security/src/main/java/org/eclipse/jetty/security/SecurityHandler.java b/jetty-security/src/main/java/org/eclipse/jetty/security/SecurityHandler.java index da34f2d6337..f6af0978805 100644 --- a/jetty-security/src/main/java/org/eclipse/jetty/security/SecurityHandler.java +++ b/jetty-security/src/main/java/org/eclipse/jetty/security/SecurityHandler.java @@ -469,7 +469,8 @@ public abstract class SecurityHandler extends HandlerWrapper implements Authenti { Authentication.User userAuth = (Authentication.User)authentication; baseRequest.setAuthentication(authentication); - previousIdentity = _identityService.associate(userAuth.getUserIdentity()); + if (_identityService!=null) + previousIdentity = _identityService.associate(userAuth.getUserIdentity()); if (isAuthMandatory) { @@ -483,7 +484,8 @@ public abstract class SecurityHandler extends HandlerWrapper implements Authenti } handler.handle(pathInContext, baseRequest, request, response); - authenticator.secureResponse(request, response, isAuthMandatory, userAuth); + if (authenticator!=null) + authenticator.secureResponse(request, response, isAuthMandatory, userAuth); } else if (authentication instanceof Authentication.Deferred) { diff --git a/jetty-server/pom.xml b/jetty-server/pom.xml index 2b0dfa41526..03273f40bfe 100644 --- a/jetty-server/pom.xml +++ b/jetty-server/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-server diff --git a/jetty-servlet/pom.xml b/jetty-servlet/pom.xml index 70ab5daf8a3..609a94dc28f 100644 --- a/jetty-servlet/pom.xml +++ b/jetty-servlet/pom.xml @@ -3,7 +3,7 @@ jetty-project org.eclipse.jetty - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-servlet diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java index 59299c608c4..2448ad29cf6 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java @@ -81,7 +81,17 @@ public class ServletHolder extends Holder implements UserIdentity.Scope public ServletHolder() { } + + /* ---------------------------------------------------------------- */ + /** Constructor for existing servlet. + */ + public ServletHolder(String name,Servlet servlet) + { + setName(name); + setServlet(servlet); + } + /* ---------------------------------------------------------------- */ /** Constructor for existing servlet. @@ -92,7 +102,16 @@ public class ServletHolder extends Holder implements UserIdentity.Scope } /* ---------------------------------------------------------------- */ - /** Constructor for existing servlet. + /** Constructor for servlet class. + */ + public ServletHolder(String name,Class servlet) + { + setName(name); + setHeldClass(servlet); + } + + /* ---------------------------------------------------------------- */ + /** Constructor for servlet class. */ public ServletHolder(Class servlet) { diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DispatcherTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DispatcherTest.java index b17796f0d4d..6aede63657e 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DispatcherTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DispatcherTest.java @@ -344,11 +344,16 @@ public class DispatcherTest RequestDispatcher dispatcher = null; if(request.getParameter("include")!=null) + { dispatcher = getServletContext().getRequestDispatcher(request.getParameter("include")); + dispatcher.include(new ServletRequestWrapper(request), new ServletResponseWrapper(response)); + } else if(request.getParameter("forward")!=null) + { dispatcher = getServletContext().getRequestDispatcher(request.getParameter("forward")); + dispatcher.forward(new ServletRequestWrapper(request), new ServletResponseWrapper(response)); + } - dispatcher.forward(new ServletRequestWrapper(request), new ServletResponseWrapper(response)); } } diff --git a/jetty-servlets/pom.xml b/jetty-servlets/pom.xml index 9e112abff9e..3e2982199c3 100644 --- a/jetty-servlets/pom.xml +++ b/jetty-servlets/pom.xml @@ -3,7 +3,7 @@ jetty-project org.eclipse.jetty - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-servlets diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/CrossOriginFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/CrossOriginFilter.java index 67c6e7c5fbd..bb57608c4b4 100644 --- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/CrossOriginFilter.java +++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/CrossOriginFilter.java @@ -17,6 +17,7 @@ package org.eclipse.jetty.servlets; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Enumeration; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -215,10 +216,18 @@ public class CrossOriginFilter implements Filter { // WebSocket clients such as Chrome 5 implement a version of the WebSocket // protocol that does not accept extra response headers on the upgrade response - if ("Upgrade".equalsIgnoreCase(request.getHeader("Connection")) && - "WebSocket".equalsIgnoreCase(request.getHeader("Upgrade"))) + for (Enumeration connections = request.getHeaders("Connection"); connections.hasMoreElements();) { - return false; + String connection = (String)connections.nextElement(); + if ("Upgrade".equalsIgnoreCase(connection)) + { + for (Enumeration upgrades = request.getHeaders("Upgrade"); upgrades.hasMoreElements();) + { + String upgrade = (String)upgrades.nextElement(); + if ("WebSocket".equalsIgnoreCase(upgrade)) + return false; + } + } } return true; } diff --git a/jetty-start/pom.xml b/jetty-start/pom.xml index 7d622d115e6..52964c5b6b4 100644 --- a/jetty-start/pom.xml +++ b/jetty-start/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-start diff --git a/jetty-util/pom.xml b/jetty-util/pom.xml index 9e5dc45445a..496c5863221 100644 --- a/jetty-util/pom.xml +++ b/jetty-util/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-util diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java b/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java index 06741c0a130..87b2f2e4a28 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/UrlEncoded.java @@ -462,52 +462,60 @@ public class UrlEncoded extends MultiMap implements Cloneable int totalLength=0; while ((b=in.read())>=0) { - switch ((char) b) + try { - case '&': - value = buffer.length()==0?"":buffer.toString(); - buffer.reset(); - if (key != null) - { - map.add(key,value); - } - else if (value!=null&&value.length()>0) - { - map.add(value,""); - } - key = null; - value=null; - if (maxKeys>0 && map.size()>maxKeys) - { - LOG.warn("maxFormKeys limit exceeded keys>{}",maxKeys); - return; - } - break; - - case '=': - if (key!=null) - { + switch ((char) b) + { + case '&': + value = buffer.length()==0?"":buffer.toString(); + buffer.reset(); + if (key != null) + { + map.add(key,value); + } + else if (value!=null&&value.length()>0) + { + map.add(value,""); + } + key = null; + value=null; + if (maxKeys>0 && map.size()>maxKeys) + { + LOG.warn("maxFormKeys limit exceeded keys>{}",maxKeys); + return; + } + break; + + case '=': + if (key!=null) + { + buffer.append((byte)b); + break; + } + key = buffer.toString(); + buffer.reset(); + break; + + case '+': + buffer.append((byte)' '); + break; + + case '%': + int dh=in.read(); + int dl=in.read(); + if (dh<0||dl<0) + break; + buffer.append((byte)((TypeUtil.convertHexDigit((byte)dh)<<4) + TypeUtil.convertHexDigit((byte)dl))); + break; + default: buffer.append((byte)b); break; - } - key = buffer.toString(); - buffer.reset(); - break; - - case '+': - buffer.append((byte)' '); - break; - - case '%': - int dh=in.read(); - int dl=in.read(); - if (dh<0||dl<0) - break; - buffer.append((byte)((TypeUtil.convertHexDigit((byte)dh)<<4) + TypeUtil.convertHexDigit((byte)dl))); - break; - default: - buffer.append((byte)b); - break; + } + } + catch(NotUtf8Exception e) + { + LOG.warn(e.toString()); + LOG.debug(e); } if (maxLength>=0 && (++totalLength > maxLength)) throw new IllegalStateException("Form too large"); diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/Utf8Appendable.java b/jetty-util/src/main/java/org/eclipse/jetty/util/Utf8Appendable.java index 8fe840c1b88..de02cc4e3f4 100644 --- a/jetty-util/src/main/java/org/eclipse/jetty/util/Utf8Appendable.java +++ b/jetty-util/src/main/java/org/eclipse/jetty/util/Utf8Appendable.java @@ -40,7 +40,7 @@ import java.io.IOException; **/ public abstract class Utf8Appendable { - private final char REPLACEMENT = '\ufffd'; + public static final char REPLACEMENT = '\ufffd'; private static final int UTF8_ACCEPT = 0; private static final int UTF8_REJECT = 12; diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/URLEncodedTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/URLEncodedTest.java index 42bba2b05bc..1678338df77 100644 --- a/jetty-util/src/test/java/org/eclipse/jetty/util/URLEncodedTest.java +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/URLEncodedTest.java @@ -220,7 +220,6 @@ public class URLEncodedTest */ } - /* -------------------------------------------------------------- */ @Test public void testUtf8() @@ -236,4 +235,21 @@ public class URLEncodedTest String expected = new String(TypeUtil.fromHexString(hex),"utf-8"); assertEquals(expected,url_encoded.get("text")); } + + /* -------------------------------------------------------------- */ + @Test + public void testNotUtf8() throws Exception + { + String query="name=X%c0%afZ"; + + MultiMap map = new MultiMap(); + + UrlEncoded.decodeUtf8To(query.getBytes(StringUtil.__ISO_8859_1),0,query.length(),map); + assertEquals("X"+Utf8Appendable.REPLACEMENT+Utf8Appendable.REPLACEMENT+"Z",map.getValue("name",0)); + + map.clear(); + + UrlEncoded.decodeUtf8To(new ByteArrayInputStream(query.getBytes(StringUtil.__ISO_8859_1)),map,100,2); + assertEquals("X"+Utf8Appendable.REPLACEMENT+Utf8Appendable.REPLACEMENT+"Z",map.getValue("name",0)); + } } diff --git a/jetty-webapp/pom.xml b/jetty-webapp/pom.xml index eb1971c5043..fe53e3d3ede 100644 --- a/jetty-webapp/pom.xml +++ b/jetty-webapp/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-webapp diff --git a/jetty-websocket/pom.xml b/jetty-websocket/pom.xml index cfb4b91e581..a4bb91a3781 100644 --- a/jetty-websocket/pom.xml +++ b/jetty-websocket/pom.xml @@ -3,7 +3,7 @@ jetty-project org.eclipse.jetty - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 diff --git a/jetty-xml/pom.xml b/jetty-xml/pom.xml index b2a39954309..ac7e26faf70 100644 --- a/jetty-xml/pom.xml +++ b/jetty-xml/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 jetty-xml diff --git a/pom.xml b/pom.xml index 63315d4c21c..2b3c38f75c8 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ 19 jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT Jetty :: Project ${jetty.url} pom diff --git a/test-continuation/pom.xml b/test-continuation/pom.xml index 498bf751457..8ea3c705b0c 100644 --- a/test-continuation/pom.xml +++ b/test-continuation/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 test-continuation diff --git a/test-jetty-nested/pom.xml b/test-jetty-nested/pom.xml index 2f5b334f991..f69edcd1124 100644 --- a/test-jetty-nested/pom.xml +++ b/test-jetty-nested/pom.xml @@ -4,7 +4,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT test-jetty-nested Jetty :: Nested Test diff --git a/test-jetty-servlet/pom.xml b/test-jetty-servlet/pom.xml index 65f98aa0f62..1d04833257f 100644 --- a/test-jetty-servlet/pom.xml +++ b/test-jetty-servlet/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 test-jetty-servlet diff --git a/test-jetty-webapp/pom.xml b/test-jetty-webapp/pom.xml index 4162b96e66e..b9806477a55 100644 --- a/test-jetty-webapp/pom.xml +++ b/test-jetty-webapp/pom.xml @@ -2,7 +2,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 test-jetty-webapp diff --git a/tests/pom.xml b/tests/pom.xml index 28cee13d78b..a2aa610a515 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -21,7 +21,7 @@ org.eclipse.jetty jetty-project - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT org.eclipse.jetty.tests tests-parent diff --git a/tests/test-integration/pom.xml b/tests/test-integration/pom.xml index 90bc814ddd0..1f2b2f8d381 100644 --- a/tests/test-integration/pom.xml +++ b/tests/test-integration/pom.xml @@ -20,7 +20,7 @@ org.eclipse.jetty.tests tests-parent - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT 4.0.0 test-integration diff --git a/tests/test-loginservice/pom.xml b/tests/test-loginservice/pom.xml index a5e08c91017..89716a6272f 100644 --- a/tests/test-loginservice/pom.xml +++ b/tests/test-loginservice/pom.xml @@ -21,7 +21,7 @@ org.eclipse.jetty.tests tests-parent - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT test-loginservice Jetty Tests :: Login Service diff --git a/tests/test-sessions/pom.xml b/tests/test-sessions/pom.xml index 8c829fa6935..d3db7956f0a 100644 --- a/tests/test-sessions/pom.xml +++ b/tests/test-sessions/pom.xml @@ -21,7 +21,7 @@ org.eclipse.jetty.tests tests-parent - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT test-sessions-parent Jetty Tests :: Sessions :: Parent diff --git a/tests/test-sessions/test-hash-sessions/pom.xml b/tests/test-sessions/test-hash-sessions/pom.xml index 1152f8a40e2..98c15fd029c 100644 --- a/tests/test-sessions/test-hash-sessions/pom.xml +++ b/tests/test-sessions/test-hash-sessions/pom.xml @@ -21,7 +21,7 @@ org.eclipse.jetty.tests test-sessions-parent - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT test-hash-sessions Jetty Tests :: Sessions :: Hash diff --git a/tests/test-sessions/test-jdbc-sessions/pom.xml b/tests/test-sessions/test-jdbc-sessions/pom.xml index 567cfad6daa..ad0f5aeb5f1 100644 --- a/tests/test-sessions/test-jdbc-sessions/pom.xml +++ b/tests/test-sessions/test-jdbc-sessions/pom.xml @@ -21,7 +21,7 @@ org.eclipse.jetty.tests test-sessions-parent - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT test-jdbc-sessions Jetty Tests :: Sessions :: JDBC diff --git a/tests/test-sessions/test-sessions-common/pom.xml b/tests/test-sessions/test-sessions-common/pom.xml index 2979f679288..7d5b892e93d 100644 --- a/tests/test-sessions/test-sessions-common/pom.xml +++ b/tests/test-sessions/test-sessions-common/pom.xml @@ -21,7 +21,7 @@ org.eclipse.jetty.tests test-sessions-parent - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT test-sessions-common Jetty Tests :: Sessions :: Common diff --git a/tests/test-webapps/pom.xml b/tests/test-webapps/pom.xml index c34dda4cdc9..26f83f052ce 100644 --- a/tests/test-webapps/pom.xml +++ b/tests/test-webapps/pom.xml @@ -21,7 +21,7 @@ org.eclipse.jetty.tests tests-parent - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT test-webapps-parent Jetty Tests :: WebApps :: Parent diff --git a/tests/test-webapps/test-webapp-rfc2616/pom.xml b/tests/test-webapps/test-webapp-rfc2616/pom.xml index b46690368a6..38c683a2ade 100644 --- a/tests/test-webapps/test-webapp-rfc2616/pom.xml +++ b/tests/test-webapps/test-webapp-rfc2616/pom.xml @@ -21,7 +21,7 @@ org.eclipse.jetty.tests test-webapps-parent - 7.6.0-SNAPSHOT + 7.6.1-SNAPSHOT test-webapp-rfc2616 Jetty Tests :: WebApp :: RFC2616