diff --git a/.gitignore b/.gitignore index 115c1db..6954f48 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,10 @@ +jetty-5.1.12.fedora.zip +jetty-5.1.14.fedora.tgz +jetty-5.1.15.fedora.tgz +jetty-6.1.20-src.zip +jetty-6.1.21-src.zip +jetty-6.1.24-src.zip +jetty-6.1.26-src.zip /jetty-8.1.0.RC4.tar.bz2 /jetty-8.1.0.RC5.tar.bz2 /jetty-8.1.0.v20120127.tar.bz2 @@ -55,17 +62,3 @@ /jetty-9.4.10.RC1.tar.gz /jetty-9.4.10.v20180503.tar.gz /jetty-9.4.11.v20180605.tar.gz -/jetty-9.4.14.v20181114.tar.gz -/jetty-9.4.15.v20190215.tar.gz -/jetty-9.4.17.v20190418.tar.gz -/jetty-9.4.18.v20190429.tar.gz -/jetty-9.4.19.v20190610.tar.gz -/jetty-9.4.20.v20190813.tar.gz -/jetty-9.4.24.v20191120.tar.gz -/jetty-9.4.27.v20200227.tar.gz -/jetty-9.4.30.v20200611.tar.gz -/jetty-9.4.31.v20200723.tar.gz -/jetty-9.4.33.v20201020.tar.gz -/jetty-9.4.36.v20210114.tar.gz -/jetty-9.4.38.v20210224.tar.gz -/jetty-9.4.40.v20210413.tar.gz diff --git a/0001-Distro-jetty.home.patch b/0001-Fedora-jetty.home.patch similarity index 60% rename from 0001-Distro-jetty.home.patch rename to 0001-Fedora-jetty.home.patch index 269e227..8faab58 100644 --- a/0001-Distro-jetty.home.patch +++ b/0001-Fedora-jetty.home.patch @@ -1,25 +1,26 @@ -From 29d160bf916b4ab358a01496029f9aaa5fba66b3 Mon Sep 17 00:00:00 2001 -From: Mat Booth -Date: Mon, 9 Sep 2019 12:42:10 +0100 -Subject: [PATCH 1/2] Distro jetty.home +From 9ec63a25b98d2ff5b5815e9ae6c5998a75c1d031 Mon Sep 17 00:00:00 2001 +From: Michael Simacek +Date: Tue, 2 Jun 2015 22:52:21 +0200 +Subject: [PATCH 1/2] Fedora jetty.home --- - .../org/eclipse/jetty/start/config/CommandLineConfigSource.java | 2 ++ - 1 file changed, 2 insertions(+) + .../eclipse/jetty/start/config/CommandLineConfigSource.java | 3 +++ + 1 file changed, 3 insertions(+) diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java b/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java -index 30440c4..cb0ed3d 100644 +index f0c9e07b2a..7d2ee3e0d1 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java -@@ -120,6 +120,8 @@ public class CommandLineConfigSource implements ConfigSource +@@ -120,6 +120,9 @@ public class CommandLineConfigSource implements ConfigSource try { Path home = new File(new URI(m.group(1))).getParentFile().toPath(); + if (home.endsWith("/usr/share/java/jetty")) + home = new File(home.toString().replaceAll("java/jetty$", "jetty")).toPath(); - setProperty(BaseHome.JETTY_HOME, home.toString(), ORIGIN_INTERNAL_FALLBACK); ++ + setProperty(BaseHome.JETTY_HOME,home.toString(),ORIGIN_INTERNAL_FALLBACK); return home; } -- -2.26.2 +2.20.1 diff --git a/0002-Fixes-2722-Improve-configurability-for-SETTINGS-fram.patch b/0002-Fixes-2722-Improve-configurability-for-SETTINGS-fram.patch new file mode 100644 index 0000000..ec7a717 --- /dev/null +++ b/0002-Fixes-2722-Improve-configurability-for-SETTINGS-fram.patch @@ -0,0 +1,375 @@ +From 02c55e638fc14d696fdef42ce0ec9316713a5917 Mon Sep 17 00:00:00 2001 +From: Simone Bordet +Date: Wed, 18 Jul 2018 10:07:14 +0200 +Subject: [PATCH 2/2] Fixes #2722 - Improve configurability for SETTINGS + frames. (#2723) + +* Fixes #2722 - Improve configurability for SETTINGS frames. + +Signed-off-by: Simone Bordet +--- + .../jetty/http2/client/HTTP2Client.java | 13 +++ + .../client/HTTP2ClientConnectionFactory.java | 1 + + .../jetty/http2/frames/SettingsFrame.java | 2 + + .../eclipse/jetty/http2/parser/Parser.java | 13 ++- + .../http2/parser/SettingsBodyParser.java | 29 ++++++- + .../frames/SettingsGenerateParseTest.java | 84 +++++++++++++++++-- + .../AbstractHTTP2ServerConnectionFactory.java | 14 ++++ + 7 files changed, 145 insertions(+), 11 deletions(-) + +diff --git a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java +index 83ff1c487e..865379c68a 100644 +--- a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java ++++ b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2Client.java +@@ -34,6 +34,7 @@ import org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory; + import org.eclipse.jetty.http2.BufferingFlowControlStrategy; + import org.eclipse.jetty.http2.FlowControlStrategy; + import org.eclipse.jetty.http2.api.Session; ++import org.eclipse.jetty.http2.frames.SettingsFrame; + import org.eclipse.jetty.io.ByteBufferPool; + import org.eclipse.jetty.io.ClientConnectionFactory; + import org.eclipse.jetty.io.Connection; +@@ -129,6 +130,7 @@ public class HTTP2Client extends ContainerLifeCycle + private List protocols = Arrays.asList("h2", "h2-17", "h2-16", "h2-15", "h2-14"); + private int initialSessionRecvWindow = 16 * 1024 * 1024; + private int initialStreamRecvWindow = 8 * 1024 * 1024; ++ private int maxSettingsKeys = SettingsFrame.DEFAULT_MAX_KEYS; + private FlowControlStrategy.Factory flowControlStrategyFactory = () -> new BufferingFlowControlStrategy(0.5F); + + @Override +@@ -334,6 +336,17 @@ public class HTTP2Client extends ContainerLifeCycle + this.initialStreamRecvWindow = initialStreamRecvWindow; + } + ++ @ManagedAttribute("The max number of keys in all SETTINGS frames") ++ public int getMaxSettingsKeys() ++ { ++ return maxSettingsKeys; ++ } ++ ++ public void setMaxSettingsKeys(int maxSettingsKeys) ++ { ++ this.maxSettingsKeys = maxSettingsKeys; ++ } ++ + public void connect(InetSocketAddress address, Session.Listener listener, Promise promise) + { + connect(null, address, listener, promise); +diff --git a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java +index 9875d60252..b07e4c2f2a 100644 +--- a/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java ++++ b/jetty-http2/http2-client/src/main/java/org/eclipse/jetty/http2/client/HTTP2ClientConnectionFactory.java +@@ -67,6 +67,7 @@ public class HTTP2ClientConnectionFactory implements ClientConnectionFactory + FlowControlStrategy flowControl = client.getFlowControlStrategyFactory().newFlowControlStrategy(); + HTTP2ClientSession session = new HTTP2ClientSession(scheduler, endPoint, generator, listener, flowControl); + Parser parser = new Parser(byteBufferPool, session, 4096, 8192); ++ parser.setMaxSettingsKeys(client.getMaxSettingsKeys()); + + HTTP2ClientConnection connection = new HTTP2ClientConnection(client, byteBufferPool, executor, endPoint, + parser, session, client.getInputBufferSize(), promise, listener); +diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/SettingsFrame.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/SettingsFrame.java +index b2ffa40ec2..76eed25b4b 100644 +--- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/SettingsFrame.java ++++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/frames/SettingsFrame.java +@@ -22,6 +22,8 @@ import java.util.Map; + + public class SettingsFrame extends Frame + { ++ public static final int DEFAULT_MAX_KEYS = 64; ++ + public static final int HEADER_TABLE_SIZE = 1; + public static final int ENABLE_PUSH = 2; + public static final int MAX_CONCURRENT_STREAMS = 3; +diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java +index 4187211512..016bd0ef74 100644 +--- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java ++++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/Parser.java +@@ -52,6 +52,7 @@ public class Parser + private final HeaderParser headerParser; + private final HeaderBlockParser headerBlockParser; + private final BodyParser[] bodyParsers; ++ private int maxSettingsKeys = SettingsFrame.DEFAULT_MAX_KEYS; + private boolean continuation; + private State state = State.HEADER; + +@@ -71,7 +72,7 @@ public class Parser + bodyParsers[FrameType.HEADERS.getType()] = new HeadersBodyParser(headerParser, listener, headerBlockParser, headerBlockFragments); + bodyParsers[FrameType.PRIORITY.getType()] = new PriorityBodyParser(headerParser, listener); + bodyParsers[FrameType.RST_STREAM.getType()] = new ResetBodyParser(headerParser, listener); +- bodyParsers[FrameType.SETTINGS.getType()] = new SettingsBodyParser(headerParser, listener); ++ bodyParsers[FrameType.SETTINGS.getType()] = new SettingsBodyParser(headerParser, listener, getMaxSettingsKeys()); + bodyParsers[FrameType.PUSH_PROMISE.getType()] = new PushPromiseBodyParser(headerParser, listener, headerBlockParser); + bodyParsers[FrameType.PING.getType()] = new PingBodyParser(headerParser, listener); + bodyParsers[FrameType.GO_AWAY.getType()] = new GoAwayBodyParser(headerParser, listener); +@@ -203,6 +204,16 @@ public class Parser + return headerParser.hasFlag(bit); + } + ++ public int getMaxSettingsKeys() ++ { ++ return maxSettingsKeys; ++ } ++ ++ public void setMaxSettingsKeys(int maxSettingsKeys) ++ { ++ this.maxSettingsKeys = maxSettingsKeys; ++ } ++ + protected void notifyConnectionFailure(int error, String reason) + { + try +diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java +index 7452f2bd17..1d2cf892ab 100644 +--- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java ++++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/parser/SettingsBodyParser.java +@@ -32,16 +32,25 @@ import org.eclipse.jetty.util.log.Logger; + public class SettingsBodyParser extends BodyParser + { + private static final Logger LOG = Log.getLogger(SettingsBodyParser.class); ++ ++ private final int maxKeys; + private State state = State.PREPARE; + private int cursor; + private int length; + private int settingId; + private int settingValue; ++ private int keys; + private Map settings; + + public SettingsBodyParser(HeaderParser headerParser, Parser.Listener listener) ++ { ++ this(headerParser, listener, SettingsFrame.DEFAULT_MAX_KEYS); ++ } ++ ++ public SettingsBodyParser(HeaderParser headerParser, Parser.Listener listener, int maxKeys) + { + super(headerParser, listener); ++ this.maxKeys = maxKeys; + } + + protected void reset() +@@ -54,6 +63,11 @@ public class SettingsBodyParser extends BodyParser + settings = null; + } + ++ public int getMaxKeys() ++ { ++ return maxKeys; ++ } ++ + @Override + protected void emptyBody(ByteBuffer buffer) + { +@@ -116,7 +130,8 @@ public class SettingsBodyParser extends BodyParser + settingValue = buffer.getInt(); + if (LOG.isDebugEnabled()) + LOG.debug(String.format("setting %d=%d",settingId, settingValue)); +- settings.put(settingId, settingValue); ++ if (!onSetting(buffer, settings, settingId, settingValue)) ++ return false; + state = State.SETTING_ID; + length -= 4; + if (length == 0) +@@ -142,7 +157,8 @@ public class SettingsBodyParser extends BodyParser + { + if (LOG.isDebugEnabled()) + LOG.debug(String.format("setting %d=%d",settingId, settingValue)); +- settings.put(settingId, settingValue); ++ if (!onSetting(buffer, settings, settingId, settingValue)) ++ return false; + state = State.SETTING_ID; + if (length == 0) + return onSettings(settings); +@@ -158,6 +174,15 @@ public class SettingsBodyParser extends BodyParser + return false; + } + ++ protected boolean onSetting(ByteBuffer buffer, Map settings, int key, int value) ++ { ++ ++keys; ++ if (keys > getMaxKeys()) ++ return connectionFailure(buffer, ErrorCode.ENHANCE_YOUR_CALM_ERROR.code, "invalid_settings_frame"); ++ settings.put(key, value); ++ return true; ++ } ++ + protected boolean onSettings(Map settings) + { + SettingsFrame frame = new SettingsFrame(settings, hasFlag(Flags.ACK)); +diff --git a/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java +index dc65254586..ccf3c70483 100644 +--- a/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java ++++ b/jetty-http2/http2-common/src/test/java/org/eclipse/jetty/http2/frames/SettingsGenerateParseTest.java +@@ -41,9 +41,9 @@ public class SettingsGenerateParseTest + private final ByteBufferPool byteBufferPool = new MappedByteBufferPool(); + + @Test +- public void testGenerateParseNoSettings() throws Exception ++ public void testGenerateParseNoSettings() + { +- List frames = testGenerateParse(Collections.emptyMap()); ++ List frames = testGenerateParse(Collections.emptyMap()); + Assert.assertEquals(1, frames.size()); + SettingsFrame frame = frames.get(0); + Assert.assertEquals(0, frame.getSettings().size()); +@@ -51,7 +51,7 @@ public class SettingsGenerateParseTest + } + + @Test +- public void testGenerateParseSettings() throws Exception ++ public void testGenerateParseSettings() + { + Map settings1 = new HashMap<>(); + int key1 = 13; +@@ -73,7 +73,7 @@ public class SettingsGenerateParseTest + { + SettingsGenerator generator = new SettingsGenerator(new HeaderGenerator()); + +- final List frames = new ArrayList<>(); ++ List frames = new ArrayList<>(); + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() + { + @Override +@@ -104,11 +104,11 @@ public class SettingsGenerateParseTest + } + + @Test +- public void testGenerateParseInvalidSettings() throws Exception ++ public void testGenerateParseInvalidSettings() + { + SettingsGenerator generator = new SettingsGenerator(new HeaderGenerator()); + +- final AtomicInteger errorRef = new AtomicInteger(); ++ AtomicInteger errorRef = new AtomicInteger(); + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() + { + @Override +@@ -139,11 +139,11 @@ public class SettingsGenerateParseTest + } + + @Test +- public void testGenerateParseOneByteAtATime() throws Exception ++ public void testGenerateParseOneByteAtATime() + { + SettingsGenerator generator = new SettingsGenerator(new HeaderGenerator()); + +- final List frames = new ArrayList<>(); ++ List frames = new ArrayList<>(); + Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() + { + @Override +@@ -182,4 +182,72 @@ public class SettingsGenerateParseTest + Assert.assertTrue(frame.isReply()); + } + } ++ ++ @Test ++ public void testGenerateParseTooManySettingsInOneFrame() ++ { ++ SettingsGenerator generator = new SettingsGenerator(new HeaderGenerator()); ++ ++ AtomicInteger errorRef = new AtomicInteger(); ++ Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() ++ { ++ @Override ++ public void onConnectionFailure(int error, String reason) ++ { ++ errorRef.set(error); ++ } ++ }, 4096, 8192); ++ int maxSettingsKeys = 32; ++ parser.setMaxSettingsKeys(maxSettingsKeys); ++ parser.init(UnaryOperator.identity()); ++ ++ Map settings = new HashMap<>(); ++ for (int i = 0; i < maxSettingsKeys + 1; ++i) ++ settings.put(i + 10, i); ++ ++ ByteBufferPool.Lease lease = new ByteBufferPool.Lease(byteBufferPool); ++ generator.generateSettings(lease, settings, false); ++ ++ for (ByteBuffer buffer : lease.getByteBuffers()) ++ { ++ while (buffer.hasRemaining()) ++ parser.parse(buffer); ++ } ++ ++ Assert.assertEquals(ErrorCode.ENHANCE_YOUR_CALM_ERROR.code, errorRef.get()); ++ } ++ ++ @Test ++ public void testGenerateParseTooManySettingsInMultipleFrames() ++ { ++ SettingsGenerator generator = new SettingsGenerator(new HeaderGenerator()); ++ ++ AtomicInteger errorRef = new AtomicInteger(); ++ Parser parser = new Parser(byteBufferPool, new Parser.Listener.Adapter() ++ { ++ @Override ++ public void onConnectionFailure(int error, String reason) ++ { ++ errorRef.set(error); ++ } ++ }, 4096, 8192); ++ int maxSettingsKeys = 32; ++ parser.setMaxSettingsKeys(maxSettingsKeys); ++ parser.init(UnaryOperator.identity()); ++ ++ Map settings = new HashMap<>(); ++ settings.put(13, 17); ++ ++ ByteBufferPool.Lease lease = new ByteBufferPool.Lease(byteBufferPool); ++ for (int i = 0; i < maxSettingsKeys + 1; ++i) ++ generator.generateSettings(lease, settings, false); ++ ++ for (ByteBuffer buffer : lease.getByteBuffers()) ++ { ++ while (buffer.hasRemaining()) ++ parser.parse(buffer); ++ } ++ ++ Assert.assertEquals(ErrorCode.ENHANCE_YOUR_CALM_ERROR.code, errorRef.get()); ++ } + } +diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java +index b2cc1ad504..317b7db7b9 100644 +--- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java ++++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/AbstractHTTP2ServerConnectionFactory.java +@@ -50,6 +50,7 @@ public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConne + private int initialStreamRecvWindow = 512 * 1024; + private int maxConcurrentStreams = 128; + private int maxHeaderBlockFragment = 0; ++ private int maxSettingsKeys = SettingsFrame.DEFAULT_MAX_KEYS; + private FlowControlStrategy.Factory flowControlStrategyFactory = () -> new BufferingFlowControlStrategy(0.5F); + private long streamIdleTimeout; + +@@ -145,6 +146,17 @@ public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConne + this.streamIdleTimeout = streamIdleTimeout; + } + ++ @ManagedAttribute("The max number of keys in all SETTINGS frames") ++ public int getMaxSettingsKeys() ++ { ++ return maxSettingsKeys; ++ } ++ ++ public void setMaxSettingsKeys(int maxSettingsKeys) ++ { ++ this.maxSettingsKeys = maxSettingsKeys; ++ } ++ + /** + * @return -1 + * @deprecated feature removed, no replacement +@@ -205,6 +217,8 @@ public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConne + session.setWriteThreshold(getHttpConfiguration().getOutputBufferSize()); + + ServerParser parser = newServerParser(connector, session); ++ parser.setMaxSettingsKeys(getMaxSettingsKeys()); ++ + HTTP2Connection connection = new HTTP2ServerConnection(connector.getByteBufferPool(), connector.getExecutor(), + endPoint, httpConfiguration, parser, session, getInputBufferSize(), listener); + connection.addListener(connectionListener); +-- +2.20.1 + diff --git a/0002-Port-to-servlet-api-4-5.patch b/0002-Port-to-servlet-api-4-5.patch deleted file mode 100644 index 5078549..0000000 --- a/0002-Port-to-servlet-api-4-5.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 65b5de2ef9ffc5eacb23c6c4834cc1c513f0eafa Mon Sep 17 00:00:00 2001 -From: Mat Booth -Date: Wed, 19 Aug 2020 13:14:37 +0100 -Subject: [PATCH 2/2] Port to servlet-api 4/5 - ---- - .../jetty/server/handler/ContextHandler.java | 46 +++++++++++++++++++ - 1 file changed, 46 insertions(+) - -diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java -index 7960b0f..4981755 100644 ---- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java -+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java -@@ -2760,6 +2760,13 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu - return null; - } - -+ public ServletRegistration.Dynamic addJspFile(String servletName, String jspFile) -+ { -+ // TODO new in 4.0 -+ LOG.warn(UNIMPLEMENTED_USE_SERVLET_CONTEXT_HANDLER, "addJspFile(String, String)"); -+ return null; -+ } -+ - @Override - public javax.servlet.ServletRegistration.Dynamic addServlet(String servletName, Class servletClass) - { -@@ -2930,6 +2937,45 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu - { - return null; - } -+ -+ public int getSessionTimeout() -+ { -+ // TODO new in 4.0 -+ LOG.warn(UNIMPLEMENTED_USE_SERVLET_CONTEXT_HANDLER, "getSessionTimeout()"); -+ return 0; -+ } -+ -+ public void setSessionTimeout(int sessionTimeout) -+ { -+ // TODO new in 4.0 -+ LOG.warn(UNIMPLEMENTED_USE_SERVLET_CONTEXT_HANDLER, "setSessionTimeout(int)"); -+ } -+ -+ public String getRequestCharacterEncoding() -+ { -+ // TODO new in 4.0 -+ LOG.warn(UNIMPLEMENTED_USE_SERVLET_CONTEXT_HANDLER, "getRequestCharacterEncoding()"); -+ return null; -+ } -+ -+ public void setRequestCharacterEncoding(String encoding) -+ { -+ // TODO new in 4.0 -+ LOG.warn(UNIMPLEMENTED_USE_SERVLET_CONTEXT_HANDLER, "setRequestCharacterEncoding(String)"); -+ } -+ -+ public String getResponseCharacterEncoding() -+ { -+ // TODO new in 4.0 -+ LOG.warn(UNIMPLEMENTED_USE_SERVLET_CONTEXT_HANDLER, "getResponseCharacterEncoding()"); -+ return null; -+ } -+ -+ public void setResponseCharacterEncoding(String encoding) -+ { -+ // TODO new in 4.0 -+ LOG.warn(UNIMPLEMENTED_USE_SERVLET_CONTEXT_HANDLER, "setResponseCharacterEncoding(String)"); -+ } - } - - /** --- -2.26.2 - diff --git a/jetty.spec b/jetty.spec index 1306fdf..0d3ccd7 100644 --- a/jetty.spec +++ b/jetty.spec @@ -40,22 +40,21 @@ %global appdir %{jettylibdir}/webapps -%global addver .v20210413 +%global addver .v20180605 # minimal version required to build eclipse and thermostat # eclipse needs: util, server, http, continuation, io, security, servlet # thermostat needs: server, jaas, webapp # above modules need: jmx, xml -%bcond_without jp_minimal +%bcond_with jp_minimal Name: jetty -Version: 9.4.40 -Release: 17%{?dist} +Version: 9.4.11 +Release: 3%{addver}%{?dist} Summary: Java Webserver and Servlet Container # Jetty is dual licensed under both ASL 2.0 and EPL 1.0, see NOTICE.txt -# Automatically converted from old format: ASL 2.0 or EPL-1.0 - review is highly recommended. -License: Apache-2.0 OR EPL-1.0 +License: ASL 2.0 or EPL URL: http://www.eclipse.org/jetty/ Source0: https://github.com/eclipse/%{name}.project/archive/%{name}-%{version}%{addver}.tar.gz Source1: jetty.sh @@ -64,10 +63,10 @@ Source5: %{name}.service # MIT license text taken from Utf8Appendable.java Source6: LICENSE-MIT -Patch1: 0001-Distro-jetty.home.patch -Patch2: 0002-Port-to-servlet-api-4-5.patch +Patch1: 0001-Fedora-jetty.home.patch +Patch2: 0002-Fixes-2722-Improve-configurability-for-SETTINGS-fram.patch -BuildRequires: maven-local-openjdk25 +BuildRequires: maven-local BuildRequires: mvn(javax.servlet:javax.servlet-api) BuildRequires: mvn(org.apache.felix:maven-bundle-plugin) BuildRequires: mvn(org.apache.maven.plugins:maven-shade-plugin) @@ -75,8 +74,10 @@ BuildRequires: mvn(org.codehaus.mojo:build-helper-maven-plugin) BuildRequires: mvn(org.slf4j:slf4j-api) %if %{without jp_minimal} -BuildRequires: maven-local-openjdk25 +BuildRequires: maven-local BuildRequires: mvn(com.github.jnr:jnr-unixsocket) +BuildRequires: mvn(com.hazelcast:hazelcast) +BuildRequires: mvn(com.hazelcast:hazelcast-client) BuildRequires: mvn(javax.annotation:javax.annotation-api) BuildRequires: mvn(javax.enterprise:cdi-api) BuildRequires: mvn(javax.servlet:javax.servlet-api) @@ -108,17 +109,22 @@ BuildRequires: mvn(org.apache.taglibs:taglibs-standard-spec) BuildRequires: mvn(org.apache.tomcat:tomcat-jasper) BuildRequires: mvn(org.codehaus.mojo:build-helper-maven-plugin) BuildRequires: mvn(org.codehaus.mojo:exec-maven-plugin) +BuildRequires: mvn(org.eclipse.equinox.http:servlet) BuildRequires: mvn(org.eclipse.jetty.alpn:alpn-api) BuildRequires: mvn(org.eclipse.jetty.orbit:javax.mail.glassfish) BuildRequires: mvn(org.eclipse.jetty.orbit:javax.security.auth.message) BuildRequires: mvn(org.eclipse.jetty.toolchain:jetty-assembly-descriptors) BuildRequires: mvn(org.eclipse.jetty.toolchain:jetty-schemas) BuildRequires: mvn(org.eclipse.jetty.toolchain:jetty-test-helper) +BuildRequires: mvn(org.eclipse.osgi:org.eclipse.osgi) +BuildRequires: mvn(org.eclipse.osgi:org.eclipse.osgi.services) +BuildRequires: mvn(org.infinispan:infinispan-core) BuildRequires: mvn(org.jboss.weld.servlet:weld-servlet-core) BuildRequires: mvn(org.mongodb:mongo-java-driver) BuildRequires: mvn(org.ow2.asm:asm) BuildRequires: mvn(org.ow2.asm:asm-commons) BuildRequires: mvn(org.slf4j:slf4j-api) +BuildRequires: mvn(org.springframework:spring-beans) BuildRequires: mvn(org.mortbay.jetty.alpn:alpn-boot) BuildRequires: mvn(org.eclipse.jetty.toolchain:jetty-artifact-remote-resources) @@ -128,21 +134,16 @@ BuildRequires: mvn(org.eclipse.jetty.toolchain:jetty-test-policy) BuildRequires: maven-javadoc-plugin BuildRequires: glassfish-el BuildRequires: systemd -BuildRequires: junit5 # duplicate providers, choose one BuildRequires: jboss-websocket-1.0-api Requires: jboss-websocket-1.0-api -%endif +%endif # without jp_minimal BuildArch: noarch -ExclusiveArch: %{java_arches} noarch # jp_minimal doesn't have main package %if %{without jp_minimal} -# Explicit requires for javapackages-tools since jetty.sh script -# uses /usr/share/java-utils/java-functions -Requires: javapackages-tools Requires: %{name}-annotations = %{version}-%{release} Requires: %{name}-ant = %{version}-%{release} Requires: %{name}-client = %{version}-%{release} @@ -167,12 +168,15 @@ Requires: %{name}-security = %{version}-%{release} Requires: %{name}-server = %{version}-%{release} Requires: %{name}-servlet = %{version}-%{release} Requires: %{name}-servlets = %{version}-%{release} +Requires: %{name}-spring = %{version}-%{release} Requires: %{name}-start = %{version}-%{release} Requires: %{name}-unixsocket = %{version}-%{release} Requires: %{name}-util = %{version}-%{release} Requires: %{name}-util-ajax = %{version}-%{release} Requires: %{name}-webapp = %{version}-%{release} Requires: %{name}-xml = %{version}-%{release} +Requires: %{name}-infinispan = %{version}-%{release} +Requires: %{name}-hazelcast = %{version}-%{release} Requires: %{name}-cdi = %{version}-%{release} Requires: %{name}-websocket-api = %{version}-%{release} Requires: %{name}-websocket-client = %{version}-%{release} @@ -182,6 +186,11 @@ Requires: %{name}-websocket-servlet = %{version}-%{release} Requires: %{name}-javax-websocket-client-impl = %{version}-%{release} Requires: %{name}-javax-websocket-server-impl = %{version}-%{release} Requires: %{name}-nosql = %{version}-%{release} +Requires: %{name}-httpservice = %{version}-%{release} +Requires: %{name}-osgi-boot = %{version}-%{release} +Requires: %{name}-osgi-boot-warurl = %{version}-%{release} +Requires: %{name}-osgi-boot-jsp = %{version}-%{release} +Requires: %{name}-osgi-alpn = %{version}-%{release} Requires: %{name}-quickstart = %{version}-%{release} Requires: %{name}-jstl = %{version}-%{release} Requires: %{name}-alpn-client = %{version}-%{release} @@ -192,64 +201,23 @@ Requires: %{name}-http2-hpack = %{version}-%{release} Requires: %{name}-http2-http-client-transport = %{version}-%{release} Requires: %{name}-http2-server = %{version}-%{release} +Requires(pre): shadow-utils %{?systemd_ordering} Provides: group(%username) = %jtuid Provides: user(%username) = %jtuid -%endif +%endif # without jp_minimal -# Hazelcast in Fedora is too old for jetty to build against (Added in F29) -Obsoletes: %{name}-hazelcast < 9.4.18-1 -# Infinispan in Fedora is too old for jetty to build against (Added in F31) -Obsoletes: %{name}-infinispan < 9.4.18-1 -# Eclipse no longer available (Added in F31) -Obsoletes: %{name}-osgi-alpn < 9.4.18-1 -Obsoletes: %{name}-osgi-boot < 9.4.18-1 -Obsoletes: %{name}-osgi-boot-jsp < 9.4.18-1 -Obsoletes: %{name}-osgi-boot-warurl < 9.4.18-1 -# Spring framework removed from Fedora (Added in F32) -Obsoletes: %{name}-spring < 9.4.24-1 - -%if %{with jp_minimal} -# Remove left-over packages that would have broken deps when built in minimal mode -Obsoletes: %{name}-project < 9.4.20-1 -Obsoletes: %{name}-annotations < 9.4.20-1 -Obsoletes: %{name}-ant < 9.4.20-1 -Obsoletes: %{name}-cdi < 9.4.20-1 -Obsoletes: %{name}-deploy < 9.4.20-1 -Obsoletes: %{name}-fcgi-client < 9.4.20-1 -Obsoletes: %{name}-fcgi-server < 9.4.20-1 -Obsoletes: %{name}-http-spi < 9.4.20-1 -Obsoletes: %{name}-jaspi < 9.4.20-1 -Obsoletes: %{name}-jndi < 9.4.20-1 -Obsoletes: %{name}-jsp < 9.4.20-1 -Obsoletes: %{name}-jstl < 9.4.20-1 -Obsoletes: %{name}-jspc-maven-plugin < 9.4.20-1 -Obsoletes: %{name}-maven-plugin < 9.4.20-1 -Obsoletes: %{name}-plus < 9.4.20-1 -Obsoletes: %{name}-proxy < 9.4.20-1 -Obsoletes: %{name}-quickstart < 9.4.20-1 -Obsoletes: %{name}-rewrite < 9.4.20-1 -Obsoletes: %{name}-servlets < 9.4.20-1 -Obsoletes: %{name}-start < 9.4.20-1 -Obsoletes: %{name}-unixsocket < 9.4.20-1 -Obsoletes: %{name}-websocket-api < 9.4.20-1 -Obsoletes: %{name}-websocket-client < 9.4.20-1 -Obsoletes: %{name}-websocket-common < 9.4.20-1 -Obsoletes: %{name}-websocket-server < 9.4.20-1 -Obsoletes: %{name}-websocket-servlet < 9.4.20-1 -Obsoletes: %{name}-javax-websocket-client-impl < 9.4.20-1 -Obsoletes: %{name}-javax-websocket-server-impl < 9.4.20-1 -Obsoletes: %{name}-alpn-client < 9.4.20-1 -Obsoletes: %{name}-alpn-server < 9.4.20-1 -Obsoletes: %{name}-http2-client < 9.4.20-1 -Obsoletes: %{name}-http2-common < 9.4.20-1 -Obsoletes: %{name}-http2-hpack < 9.4.20-1 -Obsoletes: %{name}-http2-http-client-transport < 9.4.20-1 -Obsoletes: %{name}-http2-server < 9.4.20-1 -Obsoletes: %{name}-nosql < 9.4.20-1 -%endif +Obsoletes: %{name}-manual < 9.4.0-0.4 +Obsoletes: %{name}-ajp < 9.4.0-0.4 +Obsoletes: %{name}-nested < 9.4.0-0.4 +Obsoletes: %{name}-overlay-deployer < 9.4.0-0.4 +Obsoletes: %{name}-policy < 9.4.0-0.4 +Obsoletes: %{name}-websocket-mux-extension < 9.4.0-0.4 +Obsoletes: %{name}-runner < 9.4.0-0.4 +Obsoletes: %{name}-osgi-npn < 9.4.0-0.4 +Obsoletes: %{name}-monitor < 9.4.0-0.4 %description %global desc \ @@ -294,6 +262,7 @@ Summary: http-spi module for Jetty %package io Summary: io module for Jetty +Obsoletes: %{name}-websocket < 9.4.0-0.4 %description io %{extdesc} %{summary}. @@ -325,8 +294,6 @@ Summary: server module for Jetty %package servlet Summary: servlet module for Jetty -# Eclipse no longer available (Added in F31) -Obsoletes: %{name}-httpservice < 9.4.18-1 %description servlet %{extdesc} %{summary}. @@ -334,18 +301,11 @@ Obsoletes: %{name}-httpservice < 9.4.18-1 %package util Summary: util module for Jetty # Utf8Appendable.java is additionally under MIT license -# Automatically converted from old format: (ASL 2.0 or EPL-1.0) and MIT - review is highly recommended. -License: (Apache-2.0 OR EPL-1.0) AND LicenseRef-Callaway-MIT +License: (ASL 2.0 or EPL) and MIT %description util %{extdesc} %{summary}. -%package util-ajax -Summary: util-ajax module for Jetty - -%description util-ajax -%{extdesc} %{summary}. - %package webapp Summary: webapp module for Jetty @@ -401,6 +361,12 @@ Summary: Jetty CDI Configuration %description cdi %{extdesc} %{summary}. +%package hazelcast +Summary: hazelcast module for Jetty + +%description hazelcast +%{extdesc} %{summary}. + %package fcgi-client Summary: FastCGI client module for Jetty @@ -413,6 +379,12 @@ Summary: FastCGI client module for Jetty %description fcgi-server %{extdesc} %{summary}. +%package infinispan +Summary: infinispan module for Jetty + +%description infinispan +%{extdesc} %{summary}. + %package jaspi Summary: jaspi module for Jetty @@ -461,6 +433,12 @@ Summary: servlets module for Jetty %description servlets %{extdesc} %{summary}. +%package spring +Summary: spring module for Jetty + +%description spring +%{extdesc} %{summary}. + %package start Summary: start module for Jetty @@ -473,6 +451,12 @@ Summary: unixsocket module for Jetty %description unixsocket %{extdesc} %{summary}. +%package util-ajax +Summary: util-ajax module for Jetty + +%description util-ajax +%{extdesc} %{summary}. + %package websocket-api Summary: websocket-api module for Jetty @@ -521,6 +505,36 @@ Summary: nosql module for Jetty %description nosql %{extdesc} %{summary}. +%package httpservice +Summary: httpservice module for Jetty + +%description httpservice +%{extdesc} %{summary}. + +%package osgi-boot +Summary: osgi-boot module for Jetty + +%description osgi-boot +%{extdesc} %{summary}. + +%package osgi-boot-warurl +Summary: osgi-boot-warurl module for Jetty + +%description osgi-boot-warurl +%{extdesc} %{summary}. + +%package osgi-boot-jsp +Summary: osgi-boot-jsp module for Jetty + +%description osgi-boot-jsp +%{extdesc} %{summary}. + +%package osgi-alpn +Summary: osgi-alpn module for Jetty + +%description osgi-alpn +%{extdesc} %{summary}. + %package quickstart Summary: quickstart module for Jetty @@ -575,13 +589,12 @@ Summary: jstl module for Jetty %description jstl %{extdesc} %{summary}. -%endif +%endif # without jp_minimal %package javadoc Summary: Javadoc for %{name} # some MIT-licensed code (from Utf8Appendable) is used to generate javadoc -# Automatically converted from old format: (ASL 2.0 or EPL-1.0) and MIT - review is highly recommended. -License: (Apache-2.0 OR EPL-1.0) AND LicenseRef-Callaway-MIT +License: (ASL 2.0 or EPL) and MIT %description javadoc %{summary}. @@ -589,17 +602,18 @@ License: (Apache-2.0 OR EPL-1.0) AND LicenseRef-Callaway-MIT %prep %setup -q -n %{name}.project-%{name}-%{version}%{addver} -%patch -P1 -p1 -%patch -P2 -p1 +%patch1 -p1 +%patch2 -p1 find . -name "*.?ar" -exec rm {} \; find . -name "*.class" -exec rm {} \; # Plugins irrelevant or harmful to building the package -%pom_remove_plugin -r :maven-checkstyle-plugin -%pom_remove_plugin -r :spotbugs-maven-plugin +%pom_remove_plugin -r :findbugs-maven-plugin %pom_remove_plugin -r :maven-enforcer-plugin +%pom_remove_plugin -r :clirr-maven-plugin %pom_remove_plugin -r :maven-eclipse-plugin +%pom_remove_plugin -r :maven-pmd-plugin %pom_remove_plugin -r :license-maven-plugin %pom_remove_plugin -r :maven-site-plugin %pom_remove_plugin -r :maven-source-plugin @@ -607,23 +621,16 @@ find . -name "*.class" -exec rm {} \; %pom_remove_plugin -r :jacoco-maven-plugin %pom_remove_plugin -r :maven-release-plugin %pom_remove_plugin -r :buildnumber-maven-plugin -%pom_remove_plugin -r :h2spec-maven-plugin - -# Unnecessary pom flattening can be skipped -%pom_remove_plugin -r :flatten-maven-plugin jetty-bom %pom_disable_module aggregates/jetty-all -# Reflective use of classes that might not be present in the JDK should be optional OSGi-wise -%pom_xpath_inject "pom:configuration/pom:instructions" \ -"sun.misc;resolution:=optional,com.sun.nio.file;resolution:=optional,*" +# Use proper groupId for apache ant +%pom_xpath_replace "pom:groupId[text()='ant']" "org.apache.ant" jetty-ant/pom.xml %pom_remove_dep "com.sun.net.httpserver:http" jetty-http-spi %pom_change_dep -r org.mortbay.jasper:apache-jsp org.apache.tomcat:tomcat-jasper -%pom_add_dep 'org.junit.jupiter:junit-jupiter-engine:${junit.version}' tests/test-sessions/test-sessions-common - # provided by glassfish-jsp-api that has newer version %pom_change_dep -r javax.servlet.jsp:jsp-api javax.servlet.jsp:javax.servlet.jsp-api @@ -637,11 +644,14 @@ find . -name "*.class" -exec rm {} \; # Unwanted JS in javadoc sed -i '/^\s*\*.*