diff --git a/.gitignore b/.gitignore index 6954f48..115c1db 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,3 @@ -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 @@ -62,3 +55,17 @@ jetty-6.1.26-src.zip /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-Fedora-jetty.home.patch b/0001-Distro-jetty.home.patch similarity index 60% rename from 0001-Fedora-jetty.home.patch rename to 0001-Distro-jetty.home.patch index 8faab58..269e227 100644 --- a/0001-Fedora-jetty.home.patch +++ b/0001-Distro-jetty.home.patch @@ -1,26 +1,25 @@ -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 +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 --- - .../eclipse/jetty/start/config/CommandLineConfigSource.java | 3 +++ - 1 file changed, 3 insertions(+) + .../org/eclipse/jetty/start/config/CommandLineConfigSource.java | 2 ++ + 1 file changed, 2 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 f0c9e07b2a..7d2ee3e0d1 100644 +index 30440c4..cb0ed3d 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,9 @@ public class CommandLineConfigSource implements ConfigSource +@@ -120,6 +120,8 @@ 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.20.1 +2.26.2 diff --git a/0002-Fixes-2722-Improve-configurability-for-SETTINGS-fram.patch b/0002-Fixes-2722-Improve-configurability-for-SETTINGS-fram.patch deleted file mode 100644 index ec7a717..0000000 --- a/0002-Fixes-2722-Improve-configurability-for-SETTINGS-fram.patch +++ /dev/null @@ -1,375 +0,0 @@ -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 new file mode 100644 index 0000000..5078549 --- /dev/null +++ b/0002-Port-to-servlet-api-4-5.patch @@ -0,0 +1,76 @@ +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 0d3ccd7..1306fdf 100644 --- a/jetty.spec +++ b/jetty.spec @@ -40,21 +40,22 @@ %global appdir %{jettylibdir}/webapps -%global addver .v20180605 +%global addver .v20210413 # 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_with jp_minimal +%bcond_without jp_minimal Name: jetty -Version: 9.4.11 -Release: 3%{addver}%{?dist} +Version: 9.4.40 +Release: 17%{?dist} Summary: Java Webserver and Servlet Container # Jetty is dual licensed under both ASL 2.0 and EPL 1.0, see NOTICE.txt -License: ASL 2.0 or EPL +# Automatically converted from old format: ASL 2.0 or EPL-1.0 - review is highly recommended. +License: Apache-2.0 OR EPL-1.0 URL: http://www.eclipse.org/jetty/ Source0: https://github.com/eclipse/%{name}.project/archive/%{name}-%{version}%{addver}.tar.gz Source1: jetty.sh @@ -63,10 +64,10 @@ Source5: %{name}.service # MIT license text taken from Utf8Appendable.java Source6: LICENSE-MIT -Patch1: 0001-Fedora-jetty.home.patch -Patch2: 0002-Fixes-2722-Improve-configurability-for-SETTINGS-fram.patch +Patch1: 0001-Distro-jetty.home.patch +Patch2: 0002-Port-to-servlet-api-4-5.patch -BuildRequires: maven-local +BuildRequires: maven-local-openjdk25 BuildRequires: mvn(javax.servlet:javax.servlet-api) BuildRequires: mvn(org.apache.felix:maven-bundle-plugin) BuildRequires: mvn(org.apache.maven.plugins:maven-shade-plugin) @@ -74,10 +75,8 @@ BuildRequires: mvn(org.codehaus.mojo:build-helper-maven-plugin) BuildRequires: mvn(org.slf4j:slf4j-api) %if %{without jp_minimal} -BuildRequires: maven-local +BuildRequires: maven-local-openjdk25 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) @@ -109,22 +108,17 @@ 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) @@ -134,16 +128,21 @@ 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 # without jp_minimal +%endif 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} @@ -168,15 +167,12 @@ 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} @@ -186,11 +182,6 @@ 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} @@ -201,23 +192,64 @@ 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 # without jp_minimal +%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 +# 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 %description %global desc \ @@ -262,7 +294,6 @@ 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}. @@ -294,6 +325,8 @@ 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}. @@ -301,11 +334,18 @@ Summary: servlet module for Jetty %package util Summary: util module for Jetty # Utf8Appendable.java is additionally under MIT license -License: (ASL 2.0 or EPL) and MIT +# 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 %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 @@ -361,12 +401,6 @@ 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 @@ -379,12 +413,6 @@ 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 @@ -433,12 +461,6 @@ 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 @@ -451,12 +473,6 @@ 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 @@ -505,36 +521,6 @@ 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 @@ -589,12 +575,13 @@ Summary: jstl module for Jetty %description jstl %{extdesc} %{summary}. -%endif # without jp_minimal +%endif %package javadoc Summary: Javadoc for %{name} # some MIT-licensed code (from Utf8Appendable) is used to generate javadoc -License: (ASL 2.0 or EPL) and MIT +# 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 %description javadoc %{summary}. @@ -602,18 +589,17 @@ License: (ASL 2.0 or EPL) and MIT %prep %setup -q -n %{name}.project-%{name}-%{version}%{addver} -%patch1 -p1 -%patch2 -p1 +%patch -P1 -p1 +%patch -P2 -p1 find . -name "*.?ar" -exec rm {} \; find . -name "*.class" -exec rm {} \; # Plugins irrelevant or harmful to building the package -%pom_remove_plugin -r :findbugs-maven-plugin +%pom_remove_plugin -r :maven-checkstyle-plugin +%pom_remove_plugin -r :spotbugs-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 @@ -621,16 +607,23 @@ 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 -# Use proper groupId for apache ant -%pom_xpath_replace "pom:groupId[text()='ant']" "org.apache.ant" jetty-ant/pom.xml +# 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,*" %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 @@ -644,14 +637,11 @@ find . -name "*.class" -exec rm {} \; # Unwanted JS in javadoc sed -i '/^\s*\*.*