You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2020/07/13 16:36:24 UTC

[tomcat] branch 8.5.x updated (200da3c -> a372184)

This is an automated email from the ASF dual-hosted git repository.

markt pushed a change to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git.


    from 200da3c  Simplify some #toString() methods
     new 74edb31  Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=53411
     new a372184  Fix BZ 64593. Delay 404 when Context is null.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/catalina/connector/CoyoteAdapter.java   |  8 ++++----
 .../apache/catalina/core/LocalStrings.properties   |  1 -
 .../catalina/core/LocalStrings_es.properties       |  1 -
 .../catalina/core/LocalStrings_fr.properties       |  1 -
 .../catalina/core/LocalStrings_ja.properties       |  1 -
 java/org/apache/catalina/core/StandardEngine.java  |  3 +++
 .../apache/catalina/core/StandardEngineValve.java  | 22 ++++++----------------
 .../apache/catalina/core/StandardHostValve.java    |  4 ++++
 java/org/apache/catalina/mapper/Mapper.java        |  6 ++++--
 .../org/apache/catalina/mapper/MapperListener.java | 14 ++++++++++----
 webapps/docs/changelog.xml                         | 11 +++++++++++
 11 files changed, 42 insertions(+), 30 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


[tomcat] 02/02: Fix BZ 64593. Delay 404 when Context is null.

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit a372184ecc3dca8abfef5b432effc90358d68f8c
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Jul 13 16:46:23 2020 +0100

    Fix BZ 64593. Delay 404 when Context is null.
    
    This gives the rewrite valve an opportunity to rewrite the request.
---
 java/org/apache/catalina/connector/CoyoteAdapter.java  | 8 ++++----
 java/org/apache/catalina/core/StandardEngineValve.java | 6 +++++-
 java/org/apache/catalina/core/StandardHostValve.java   | 4 ++++
 webapps/docs/changelog.xml                             | 5 +++++
 4 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/java/org/apache/catalina/connector/CoyoteAdapter.java b/java/org/apache/catalina/connector/CoyoteAdapter.java
index 0f11f3d..cdc2151 100644
--- a/java/org/apache/catalina/connector/CoyoteAdapter.java
+++ b/java/org/apache/catalina/connector/CoyoteAdapter.java
@@ -697,11 +697,11 @@ public class CoyoteAdapter implements Adapter {
             // because no ROOT context has been deployed or the URI was invalid
             // so no context could be mapped.
             if (request.getContext() == null) {
-                // Don't overwrite an existing error
-                if (!response.isError()) {
-                    response.sendError(404);
-                }
                 // Allow processing to continue.
+                // If present, the rewrite Valve may rewrite this to a valid
+                // request.
+                // The StandardEngineValve will handle the case of a missing
+                // Host and the StandardHostValve the case of a missing Context.
                 // If present, the error reporting valve will provide a response
                 // body.
                 return true;
diff --git a/java/org/apache/catalina/core/StandardEngineValve.java b/java/org/apache/catalina/core/StandardEngineValve.java
index 96ef64e..688d522 100644
--- a/java/org/apache/catalina/core/StandardEngineValve.java
+++ b/java/org/apache/catalina/core/StandardEngineValve.java
@@ -63,7 +63,11 @@ final class StandardEngineValve extends ValveBase {
         Host host = request.getHost();
         if (host == null) {
             // HTTP 0.9 or HTTP 1.0 request without a host when no default host
-            // is defined. This is handled by the CoyoteAdapter.
+            // is defined.
+            // Don't overwrite an existing error
+            if (!response.isError()) {
+                response.sendError(404);
+            }
             return;
         }
         if (request.isAsyncSupported()) {
diff --git a/java/org/apache/catalina/core/StandardHostValve.java b/java/org/apache/catalina/core/StandardHostValve.java
index c713652..26e9f2a 100644
--- a/java/org/apache/catalina/core/StandardHostValve.java
+++ b/java/org/apache/catalina/core/StandardHostValve.java
@@ -110,6 +110,10 @@ final class StandardHostValve extends ValveBase {
         // Select the Context to be used for this Request
         Context context = request.getContext();
         if (context == null) {
+            // Don't overwrite an existing error
+            if (!response.isError()) {
+                response.sendError(404);
+            }
             return;
         }
 
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index a585ea2..02544fa 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -58,6 +58,11 @@
         prevent a potential exception when running under a security manager.
         Patch provided by Johnathan Gilday. (markt)
       </fix>
+      <fix>
+        <bug>64593</bug>: If a request is not matched to a Context, delay
+        issuing the 404 response to give the rewrite valve, if configured, an
+        opportunity to rewrite the request. (remm/markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


[tomcat] 01/02: Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=53411

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 74edb3133edb52af9b3490192aab27ec1c96194e
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Thu Jun 28 12:13:34 2018 +0000

    Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=53411
    
    Improve the handling of HTTP requests that do not explicitly specify a
    host name when no default host is configured. Also improve the tracking
    of changes to the default host as hosts are added and removed while
    Tomcat is running.
---
 java/org/apache/catalina/core/LocalStrings.properties  |  1 -
 .../apache/catalina/core/LocalStrings_es.properties    |  1 -
 .../apache/catalina/core/LocalStrings_fr.properties    |  1 -
 .../apache/catalina/core/LocalStrings_ja.properties    |  1 -
 java/org/apache/catalina/core/StandardEngine.java      |  3 +++
 java/org/apache/catalina/core/StandardEngineValve.java | 18 ++----------------
 java/org/apache/catalina/mapper/Mapper.java            |  6 ++++--
 java/org/apache/catalina/mapper/MapperListener.java    | 14 ++++++++++----
 webapps/docs/changelog.xml                             |  6 ++++++
 9 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/java/org/apache/catalina/core/LocalStrings.properties b/java/org/apache/catalina/core/LocalStrings.properties
index 8343a22..787d4ba 100644
--- a/java/org/apache/catalina/core/LocalStrings.properties
+++ b/java/org/apache/catalina/core/LocalStrings.properties
@@ -217,7 +217,6 @@ standardContext.workPath=Exception obtaining work path for context [{0}]
 standardContextValve.acknowledgeException=Failed to acknowledge request with a 100 (Continue) response
 
 standardEngine.jvmRouteFail=Failed to set Engine's jvmRoute attribute from system property
-standardEngine.noHost=No Host matches server name [{0}]
 standardEngine.notHost=Child of an Engine must be a Host
 standardEngine.notParent=Engine cannot have a parent Container
 
diff --git a/java/org/apache/catalina/core/LocalStrings_es.properties b/java/org/apache/catalina/core/LocalStrings_es.properties
index 66a20d0..3b439e7 100644
--- a/java/org/apache/catalina/core/LocalStrings_es.properties
+++ b/java/org/apache/catalina/core/LocalStrings_es.properties
@@ -146,7 +146,6 @@ standardContext.workPath=Excepción obteniendo ruta de trabajo para el contexto
 standardContextValve.acknowledgeException=No pude reconocer el requerimiento con una respuesta 100 (Continuar)
 
 standardEngine.jvmRouteFail=No pude poner el atributo jvmRoute del Motor para la propiedad del sistema
-standardEngine.noHost=No hay Máquina que coincida con nombre de servidor [{0}]
 standardEngine.notHost=El Hijo de un Motor debe de ser un Máquina
 standardEngine.notParent=El Motor no puede tener un Contenedor padre
 
diff --git a/java/org/apache/catalina/core/LocalStrings_fr.properties b/java/org/apache/catalina/core/LocalStrings_fr.properties
index ab87356..0dd5d95 100644
--- a/java/org/apache/catalina/core/LocalStrings_fr.properties
+++ b/java/org/apache/catalina/core/LocalStrings_fr.properties
@@ -216,7 +216,6 @@ standardContext.workPath=Impossible d''obtenir le chemin de travail pour le cont
 standardContextValve.acknowledgeException=Impossible de confirmer la requête avec une réponse 100 (continuer)
 
 standardEngine.jvmRouteFail=Impossible de fixer la jvmRoute de l'Engine à partir d'une propriété système
-standardEngine.noHost=Aucune hôte (host) ne correspond au nom de serveur [{0}]
 standardEngine.notHost=Le fils d'un moteur (child of an Engine) doit être un hôte
 standardEngine.notParent=Un moteur (engine) ne peut avoir de conteneur parent (container)
 
diff --git a/java/org/apache/catalina/core/LocalStrings_ja.properties b/java/org/apache/catalina/core/LocalStrings_ja.properties
index 2630d7d..24b73df 100644
--- a/java/org/apache/catalina/core/LocalStrings_ja.properties
+++ b/java/org/apache/catalina/core/LocalStrings_ja.properties
@@ -216,7 +216,6 @@ standardContext.workPath=コンテキスト[{0}]のworkパスを取得中の例
 standardContextValve.acknowledgeException=100 (Continue) レスポンスでリクエストを確認できませんでした。
 
 standardEngine.jvmRouteFail=EngineのjvmRoute属性をシステムプロパティから設定できませんでした
-standardEngine.noHost=サーバ名 [{0}] に一致するホストが存在しません
 standardEngine.notHost=Engineの子供はHostでなければいけません
 standardEngine.notParent=エンジンは親のコンテナを持つことはできません
 
diff --git a/java/org/apache/catalina/core/StandardEngine.java b/java/org/apache/catalina/core/StandardEngine.java
index 2522de6..4e7881c 100644
--- a/java/org/apache/catalina/core/StandardEngine.java
+++ b/java/org/apache/catalina/core/StandardEngine.java
@@ -149,6 +149,9 @@ public class StandardEngine extends ContainerBase implements Engine {
         } else {
             this.defaultHost = host.toLowerCase(Locale.ENGLISH);
         }
+        if (getState().isAvailable()) {
+            service.getMapper().setDefaultHostName(host);
+        }
         support.firePropertyChange("defaultHost", oldDefaultHost,
                                    this.defaultHost);
 
diff --git a/java/org/apache/catalina/core/StandardEngineValve.java b/java/org/apache/catalina/core/StandardEngineValve.java
index 8ec5ef3..96ef64e 100644
--- a/java/org/apache/catalina/core/StandardEngineValve.java
+++ b/java/org/apache/catalina/core/StandardEngineValve.java
@@ -19,13 +19,11 @@ package org.apache.catalina.core;
 import java.io.IOException;
 
 import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletResponse;
 
 import org.apache.catalina.Host;
 import org.apache.catalina.connector.Request;
 import org.apache.catalina.connector.Response;
 import org.apache.catalina.valves.ValveBase;
-import org.apache.tomcat.util.res.StringManager;
 
 /**
  * Valve that implements the default basic behavior for the
@@ -44,15 +42,6 @@ final class StandardEngineValve extends ValveBase {
     }
 
 
-    // ----------------------------------------------------- Instance Variables
-
-    /**
-     * The string manager for this package.
-     */
-    private static final StringManager sm =
-        StringManager.getManager(Constants.Package);
-
-
     // --------------------------------------------------------- Public Methods
 
     /**
@@ -73,10 +62,8 @@ final class StandardEngineValve extends ValveBase {
         // Select the Host to be used for this Request
         Host host = request.getHost();
         if (host == null) {
-            response.sendError
-                (HttpServletResponse.SC_BAD_REQUEST,
-                 sm.getString("standardEngine.noHost",
-                              request.getServerName()));
+            // HTTP 0.9 or HTTP 1.0 request without a host when no default host
+            // is defined. This is handled by the CoyoteAdapter.
             return;
         }
         if (request.isAsyncSupported()) {
@@ -85,6 +72,5 @@ final class StandardEngineValve extends ValveBase {
 
         // Ask this Host to process this request
         host.getPipeline().getFirst().invoke(request, response);
-
     }
 }
diff --git a/java/org/apache/catalina/mapper/Mapper.java b/java/org/apache/catalina/mapper/Mapper.java
index d8f45df..7395a35 100644
--- a/java/org/apache/catalina/mapper/Mapper.java
+++ b/java/org/apache/catalina/mapper/Mapper.java
@@ -691,12 +691,14 @@ public final class Mapper {
                     MappingData mappingData) throws IOException {
 
         if (host.isNull()) {
+            if (defaultHostName == null) {
+                return;
+            }
             host.getCharChunk().append(defaultHostName);
         }
         host.toChars();
         uri.toChars();
-        internalMap(host.getCharChunk(), uri.getCharChunk(), version,
-                mappingData);
+        internalMap(host.getCharChunk(), uri.getCharChunk(), version, mappingData);
     }
 
 
diff --git a/java/org/apache/catalina/mapper/MapperListener.java b/java/org/apache/catalina/mapper/MapperListener.java
index 508fd6d..b918e8d 100644
--- a/java/org/apache/catalina/mapper/MapperListener.java
+++ b/java/org/apache/catalina/mapper/MapperListener.java
@@ -266,7 +266,7 @@ public class MapperListener extends LifecycleMBeanBase
 
         boolean found = false;
 
-        if (defaultHost != null && defaultHost.length() >0) {
+        if (defaultHost != null && defaultHost.length() > 0) {
             Container[] containers = engine.findChildren();
 
             for (Container container : containers) {
@@ -286,11 +286,10 @@ public class MapperListener extends LifecycleMBeanBase
             }
         }
 
-        if(found) {
+        if (found) {
             mapper.setDefaultHostName(defaultHost);
         } else {
-            log.warn(sm.getString("mapperListener.unknownDefaultHost",
-                    defaultHost, service));
+            log.error(sm.getString("mapperListener.unknownDefaultHost", defaultHost, service));
         }
     }
 
@@ -308,6 +307,10 @@ public class MapperListener extends LifecycleMBeanBase
                 registerContext((Context) container);
             }
         }
+
+        // Default host may have changed
+        findDefaultHost();
+
         if(log.isDebugEnabled()) {
             log.debug(sm.getString("mapperListener.registerHost",
                     host.getName(), domain, service));
@@ -324,6 +327,9 @@ public class MapperListener extends LifecycleMBeanBase
 
         mapper.removeHost(hostname);
 
+        // Default host may have changed
+        findDefaultHost();
+
         if(log.isDebugEnabled()) {
             log.debug(sm.getString("mapperListener.unregisterHost", hostname,
                     domain, service));
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index ceab57a..a585ea2 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -48,6 +48,12 @@
   <subsection name="Catalina">
     <changelog>
       <fix>
+        <bug>53411</bug>: Improve the handling of HTTP requests that do not
+        explicitly specify a host name when no default host is configured. Also
+        improve the tracking of changes to the default host as hosts are added
+        and removed while Tomcat is running. (markt)
+      </fix>
+      <fix>
         <bug>64582</bug>: Pre-load the <code>CoyoteOutputStream</code> class to
         prevent a potential exception when running under a security manager.
         Patch provided by Johnathan Gilday. (markt)


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org