This is an automated email from the ASF dual-hosted git repository.
rmaucher pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new 3c36bc9fb9 Code review fixes
3c36bc9fb9 is described below
commit 3c36bc9fb9e5408d4ef1fcec596875d02cf67615
Author: remm <[email protected]>
AuthorDate: Thu Jun 11 23:40:04 2026 +0200
Code review fixes
---
.../catalina/manager/HTMLManagerServlet.java | 4 +--
java/org/apache/catalina/manager/JspHelper.java | 14 --------
.../apache/catalina/manager/ManagerServlet.java | 40 +++++++++++++---------
.../catalina/manager/host/HostManagerServlet.java | 18 +++++-----
.../catalina/mbeans/ContextResourceLinkMBean.java | 6 +++-
.../catalina/mbeans/ContextResourceMBean.java | 6 +++-
.../mbeans/DataSourceUserDatabaseMBean.java | 6 ++--
.../apache/catalina/mbeans/LocalStrings.properties | 1 +
java/org/apache/catalina/mbeans/MBeanFactory.java | 9 +++--
java/org/apache/catalina/mbeans/MBeanUtils.java | 5 +--
.../catalina/mbeans/SparseUserDatabaseMBean.java | 6 ++--
.../realm/DigestCredentialHandlerBase.java | 8 ++++-
java/org/apache/catalina/realm/JAASRealm.java | 3 ++
java/org/apache/catalina/realm/JNDIRealm.java | 12 +++++--
java/org/apache/catalina/realm/LockOutRealm.java | 2 +-
15 files changed, 81 insertions(+), 59 deletions(-)
diff --git a/java/org/apache/catalina/manager/HTMLManagerServlet.java
b/java/org/apache/catalina/manager/HTMLManagerServlet.java
index 9edd3c6cf7..0ae0ba8526 100644
--- a/java/org/apache/catalina/manager/HTMLManagerServlet.java
+++ b/java/org/apache/catalina/manager/HTMLManagerServlet.java
@@ -325,7 +325,7 @@ public class HTMLManagerServlet extends ManagerServlet {
args[0] = getServletContext().getContextPath();
args[1] = smClient.getString("htmlManagerServlet.title");
if (htmlSubTitle != null) {
- args[1] += "</font><br/><font size=\"+1\">" + htmlSubTitle;
+ args[1] += "</font><br/><font size=\"+1\">" +
Escape.htmlElementContent(htmlSubTitle);
}
// HTML Header Section
@@ -1078,7 +1078,7 @@ public class HTMLManagerServlet extends ManagerServlet {
httpSession.removeAttribute(attributeName);
} catch (IllegalStateException ise) {
if (debug >= 1) {
- log("Cannot remote attribute '" + attributeName + "' for
invalidated session id " + sessionId);
+ log("Cannot remove attribute '" + attributeName + "' for
invalidated session id " + sessionId);
}
}
return wasPresent;
diff --git a/java/org/apache/catalina/manager/JspHelper.java
b/java/org/apache/catalina/manager/JspHelper.java
index 5321670b63..3463b5e05f 100644
--- a/java/org/apache/catalina/manager/JspHelper.java
+++ b/java/org/apache/catalina/manager/JspHelper.java
@@ -204,20 +204,6 @@ public class JspHelper {
}
- /*
- * Following copied from org.apache.taglibs.standard.tag.common.core.Util
v1.1.2
- */
-
- private static final int HIGHEST_SPECIAL = '>';
- private static final char[][] specialCharactersRepresentation = new
char[HIGHEST_SPECIAL + 1][];
- static {
- specialCharactersRepresentation['&'] = "&".toCharArray();
- specialCharactersRepresentation['<'] = "<".toCharArray();
- specialCharactersRepresentation['>'] = ">".toCharArray();
- specialCharactersRepresentation['"'] = """.toCharArray();
- specialCharactersRepresentation['\''] = "'".toCharArray();
- }
-
/**
* Escapes XML special characters in the given object's string
representation.
*
diff --git a/java/org/apache/catalina/manager/ManagerServlet.java
b/java/org/apache/catalina/manager/ManagerServlet.java
index 84b3939e90..24c9504079 100644
--- a/java/org/apache/catalina/manager/ManagerServlet.java
+++ b/java/org/apache/catalina/manager/ManagerServlet.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
@@ -411,12 +412,14 @@ public class ManagerServlet extends HttpServlet
implements ContainerServlet {
}
// Set our properties from the initialization parameters
- String value;
- try {
- value = getServletConfig().getInitParameter("debug");
- debug = Integer.parseInt(value);
- } catch (Throwable t) {
- ExceptionUtils.handleThrowable(t);
+ String value = getServletConfig().getInitParameter("debug");
+ if (value != null) {
+ try {
+ debug = Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ // Ignore
+ debug = 0;
+ }
}
// Acquire global JNDI resources if available
@@ -1701,18 +1704,21 @@ public class ManagerServlet extends HttpServlet
implements ContainerServlet {
for (SSLHostConfig sslHostConfig : sslHostConfigs) {
String name = connector.toString() + "-" +
sslHostConfig.getHostName();
List<String> certList = new ArrayList<>();
- SSLContext sslContext =
sslHostConfig.getCertificates().iterator().next().getSslContext();
- if (sslContext == null) {
-
certList.add(smClient.getString("managerServlet.certsNotLoaded"));
- } else {
- X509Certificate[] certs =
sslContext.getAcceptedIssuers();
- if (certs == null) {
-
certList.add(smClient.getString("managerServlet.certsNotAvailable"));
- } else if (certs.length == 0) {
-
certList.add(smClient.getString("managerServlet.trustedCertsNotConfigured"));
+ Iterator<SSLHostConfigCertificate> certificates =
sslHostConfig.getCertificates().iterator();
+ while (certificates.hasNext()) {
+ SSLContext sslContext =
certificates.next().getSslContext();
+ if (sslContext == null) {
+
certList.add(smClient.getString("managerServlet.certsNotLoaded"));
} else {
- for (Certificate cert : certs) {
- certList.add(cert.toString());
+ X509Certificate[] certs =
sslContext.getAcceptedIssuers();
+ if (certs == null) {
+
certList.add(smClient.getString("managerServlet.certsNotAvailable"));
+ } else if (certs.length == 0) {
+
certList.add(smClient.getString("managerServlet.trustedCertsNotConfigured"));
+ } else {
+ for (Certificate cert : certs) {
+ certList.add(cert.toString());
+ }
}
}
}
diff --git a/java/org/apache/catalina/manager/host/HostManagerServlet.java
b/java/org/apache/catalina/manager/host/HostManagerServlet.java
index 07efad930a..e173532c10 100644
--- a/java/org/apache/catalina/manager/host/HostManagerServlet.java
+++ b/java/org/apache/catalina/manager/host/HostManagerServlet.java
@@ -44,7 +44,6 @@ import org.apache.catalina.Wrapper;
import org.apache.catalina.core.ContainerBase;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.startup.HostConfig;
-import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.buf.StringUtils;
import org.apache.tomcat.util.res.StringManager;
@@ -276,12 +275,14 @@ public class HostManagerServlet extends HttpServlet
implements ContainerServlet
}
// Set our properties from the initialization parameters
- String value;
- try {
- value = getServletConfig().getInitParameter("debug");
- debug = Integer.parseInt(value);
- } catch (Throwable t) {
- ExceptionUtils.handleThrowable(t);
+ String value = getServletConfig().getInitParameter("debug");
+ if (value != null) {
+ try {
+ debug = Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ // Ignore
+ debug = 0;
+ }
}
}
@@ -604,13 +605,12 @@ public class HostManagerServlet extends HttpServlet
implements ContainerServlet
writer.println(smClient.getString("hostManagerServlet.persisted"));
} catch (Exception e) {
getServletContext().log(sm.getString("hostManagerServlet.persistFailed"), e);
-
writer.println(smClient.getString("hostManagerServlet.persistFailed"));
// catch InstanceNotFoundException when StoreConfig is not enabled
instead of printing
// the failure message
if (e instanceof InstanceNotFoundException) {
writer.println(smClient.getString("hostManagerServlet.noStoreConfig"));
} else {
-
writer.println(smClient.getString("hostManagerServlet.exception",
e.toString()));
+
writer.println(smClient.getString("hostManagerServlet.persistFailed"));
}
}
}
diff --git a/java/org/apache/catalina/mbeans/ContextResourceLinkMBean.java
b/java/org/apache/catalina/mbeans/ContextResourceLinkMBean.java
index d5a51b965e..619f97ba86 100644
--- a/java/org/apache/catalina/mbeans/ContextResourceLinkMBean.java
+++ b/java/org/apache/catalina/mbeans/ContextResourceLinkMBean.java
@@ -22,6 +22,8 @@ import javax.management.MBeanException;
import javax.management.ReflectionException;
import javax.management.RuntimeOperationsException;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.descriptor.web.ContextResourceLink;
import org.apache.tomcat.util.descriptor.web.NamingResources;
import org.apache.tomcat.util.res.StringManager;
@@ -38,6 +40,7 @@ public class ContextResourceLinkMBean extends
BaseCatalinaMBean<ContextResourceL
public ContextResourceLinkMBean() {
}
+ protected static final Log log =
LogFactory.getLog(ContextResourceLinkMBean.class);
private static final StringManager sm =
StringManager.getManager(ContextResourceLinkMBean.class);
@Override
@@ -95,7 +98,8 @@ public class ContextResourceLinkMBean extends
BaseCatalinaMBean<ContextResourceL
} else if ("description".equals(name)) {
crl.setDescription((String) value);
} else if ("name".equals(name)) {
- crl.setName((String) value);
+ // Updating the name actually needs removing and adding back the
component under the new name
+ log.info(sm.getString("mBean.nameChange"));
} else if ("type".equals(name)) {
crl.setType((String) value);
} else {
diff --git a/java/org/apache/catalina/mbeans/ContextResourceMBean.java
b/java/org/apache/catalina/mbeans/ContextResourceMBean.java
index 0c2f6f67b4..ad7e2b39e9 100644
--- a/java/org/apache/catalina/mbeans/ContextResourceMBean.java
+++ b/java/org/apache/catalina/mbeans/ContextResourceMBean.java
@@ -22,6 +22,8 @@ import javax.management.MBeanException;
import javax.management.ReflectionException;
import javax.management.RuntimeOperationsException;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.descriptor.web.ContextResource;
import org.apache.tomcat.util.descriptor.web.NamingResources;
import org.apache.tomcat.util.res.StringManager;
@@ -38,6 +40,7 @@ public class ContextResourceMBean extends
BaseCatalinaMBean<ContextResource> {
public ContextResourceMBean() {
}
+ protected static final Log log =
LogFactory.getLog(ContextResourceMBean.class);
private static final StringManager sm =
StringManager.getManager(ContextResourceMBean.class);
@Override
@@ -96,7 +99,8 @@ public class ContextResourceMBean extends
BaseCatalinaMBean<ContextResource> {
} else if ("description".equals(name)) {
cr.setDescription((String) value);
} else if ("name".equals(name)) {
- cr.setName((String) value);
+ // Updating the name actually needs removing and adding back the
component under the new name
+ log.info(sm.getString("mBean.nameChange"));
} else if ("scope".equals(name)) {
cr.setScope((String) value);
} else if ("type".equals(name)) {
diff --git a/java/org/apache/catalina/mbeans/DataSourceUserDatabaseMBean.java
b/java/org/apache/catalina/mbeans/DataSourceUserDatabaseMBean.java
index 866d3917e8..d6e76365db 100644
--- a/java/org/apache/catalina/mbeans/DataSourceUserDatabaseMBean.java
+++ b/java/org/apache/catalina/mbeans/DataSourceUserDatabaseMBean.java
@@ -115,7 +115,7 @@ public class DataSourceUserDatabaseMBean extends
BaseModelMBean {
/**
* Create a new Group and return the corresponding name.
*
- * @param groupname Group name of the new group
+ * @param groupname Group name of the new group
* @param description Description of the new group
*
* @return the new group name
@@ -130,8 +130,8 @@ public class DataSourceUserDatabaseMBean extends
BaseModelMBean {
/**
* Create a new Role and return the corresponding name.
*
- * @param rolename Group name of the new group
- * @param description Description of the new group
+ * @param rolename Role name of the new role
+ * @param description Description of the new role
*
* @return the new role name
*/
diff --git a/java/org/apache/catalina/mbeans/LocalStrings.properties
b/java/org/apache/catalina/mbeans/LocalStrings.properties
index 20ef27b87a..16d8b7fe41 100644
--- a/java/org/apache/catalina/mbeans/LocalStrings.properties
+++ b/java/org/apache/catalina/mbeans/LocalStrings.properties
@@ -30,6 +30,7 @@ globalResources.userDatabaseCreateError=Exception creating
UserDatabase MBeans f
listener.notServer=This listener must only be nested within Server elements,
but is in [{0}].
mBean.attributeNotFound=Cannot find attribute [{0}]
+mBean.nameChange=Cannot update name property
mBean.nullAttribute=Attribute is null
mBean.nullName=Attribute name is null
diff --git a/java/org/apache/catalina/mbeans/MBeanFactory.java
b/java/org/apache/catalina/mbeans/MBeanFactory.java
index f77689ad34..a782328fcc 100644
--- a/java/org/apache/catalina/mbeans/MBeanFactory.java
+++ b/java/org/apache/catalina/mbeans/MBeanFactory.java
@@ -497,7 +497,7 @@ public class MBeanFactory {
*
* @param domain Domain name for the container instance
* @param defaultHost Name of the default host to be used in the Engine
- * @param baseDir Base directory value for Engine
+ * @param baseDir Base directory value for Engine, not used anymore
*
* @return the object name of the created service
*
@@ -805,7 +805,9 @@ public class MBeanFactory {
ObjectName oname = new ObjectName(name);
// Acquire a reference to the component to be removed
Container container = getParentContainerFromChild(oname);
- container.setRealm(null);
+ if (container != null) {
+ container.setRealm(null);
+ }
}
@@ -841,6 +843,9 @@ public class MBeanFactory {
// Acquire a reference to the component to be removed
ObjectName oname = new ObjectName(name);
Container container = getParentContainerFromChild(oname);
+ if (container == null) {
+ return;
+ }
Valve[] valves = container.getPipeline().getValves();
for (Valve valve : valves) {
if (valve instanceof JmxEnabled) {
diff --git a/java/org/apache/catalina/mbeans/MBeanUtils.java
b/java/org/apache/catalina/mbeans/MBeanUtils.java
index 142e3a73ec..c9316dd159 100644
--- a/java/org/apache/catalina/mbeans/MBeanUtils.java
+++ b/java/org/apache/catalina/mbeans/MBeanUtils.java
@@ -363,15 +363,16 @@ public class MBeanUtils {
throws MalformedObjectNameException {
ObjectName name = null;
+ String quotedEnvironmentName = ObjectName.quote(environment.getName());
Object container = environment.getNamingResources().getContainer();
if (container instanceof Server) {
- name = new ObjectName(domain + ":type=Environment" +
",resourcetype=Global,name=" + environment.getName());
+ name = new ObjectName(domain + ":type=Environment" +
",resourcetype=Global,name=" + quotedEnvironmentName);
} else if (container instanceof Context) {
Context context = ((Context) container);
ContextName cn = new ContextName(context.getName(), false);
Container host = context.getParent();
name = new ObjectName(domain + ":type=Environment" +
",resourcetype=Context,host=" + host.getName() +
- ",context=" + cn.getDisplayName() + ",name=" +
environment.getName());
+ ",context=" + cn.getDisplayName() + ",name=" +
quotedEnvironmentName);
}
return name;
diff --git a/java/org/apache/catalina/mbeans/SparseUserDatabaseMBean.java
b/java/org/apache/catalina/mbeans/SparseUserDatabaseMBean.java
index 26ccdb4565..50bff322b2 100644
--- a/java/org/apache/catalina/mbeans/SparseUserDatabaseMBean.java
+++ b/java/org/apache/catalina/mbeans/SparseUserDatabaseMBean.java
@@ -79,7 +79,7 @@ public class SparseUserDatabaseMBean extends BaseModelMBean {
/**
- * The <code>ManagedBean</code> information describing Group MBeans.
+ * The <code>ManagedBean</code> information describing Role MBeans.
*/
protected final ManagedBean managedRole = registry.findManagedBean("Role");
@@ -171,8 +171,8 @@ public class SparseUserDatabaseMBean extends BaseModelMBean
{
/**
* Create a new Role and return the corresponding MBean Name.
*
- * @param rolename Group name of the new group
- * @param description Description of the new group
+ * @param rolename Role name of the new role
+ * @param description Description of the new role
*
* @return the new role object name
*/
diff --git a/java/org/apache/catalina/realm/DigestCredentialHandlerBase.java
b/java/org/apache/catalina/realm/DigestCredentialHandlerBase.java
index 643a233c2a..6c4b216e64 100644
--- a/java/org/apache/catalina/realm/DigestCredentialHandlerBase.java
+++ b/java/org/apache/catalina/realm/DigestCredentialHandlerBase.java
@@ -190,7 +190,13 @@ public abstract class DigestCredentialHandlerBase
implements CredentialHandler {
String hexSalt = storedCredentials.substring(0, sep1);
- int iterations = Integer.parseInt(storedCredentials.substring(sep1 +
1, sep2));
+ int iterations;
+ try {
+ iterations = Integer.parseInt(storedCredentials.substring(sep1 +
1, sep2));
+ } catch (NumberFormatException e) {
+ logInvalidStoredCredentials(storedCredentials);
+ return false;
+ }
String storedHexEncoded = storedCredentials.substring(sep2 + 1);
byte[] salt;
diff --git a/java/org/apache/catalina/realm/JAASRealm.java
b/java/org/apache/catalina/realm/JAASRealm.java
index ca2efb833e..afd3521c72 100644
--- a/java/org/apache/catalina/realm/JAASRealm.java
+++ b/java/org/apache/catalina/realm/JAASRealm.java
@@ -620,6 +620,9 @@ public class JAASRealm extends RealmBase {
jaasConfigurationLoaded = true;
return null;
}
+ if (jaasConfigurationLoaded) {
+ return jaasConfiguration;
+ }
@SuppressWarnings("unchecked")
Class<Configuration> sunConfigFile =
(Class<Configuration>)
Class.forName("com.sun.security.auth.login.ConfigFile");
diff --git a/java/org/apache/catalina/realm/JNDIRealm.java
b/java/org/apache/catalina/realm/JNDIRealm.java
index 37531cdf15..e36a3ab436 100644
--- a/java/org/apache/catalina/realm/JNDIRealm.java
+++ b/java/org/apache/catalina/realm/JNDIRealm.java
@@ -2321,8 +2321,14 @@ public class JNDIRealm extends RealmBase {
NamingEnumeration<?> e = attr.getAll();
try {
while (e.hasMore()) {
- String value = (String) e.next();
- values.add(value);
+ Object value = e.next();
+ String valueString;
+ if (value instanceof byte[]) {
+ valueString = new String((byte[]) value);
+ } else {
+ valueString = value.toString();
+ }
+ values.add(valueString);
}
} catch (PartialResultException ex) {
if (!adCompat) {
@@ -2682,7 +2688,7 @@ public class JNDIRealm extends RealmBase {
@Override
public boolean isAvailable() {
// Simple best effort check
- return (connectionPool != null || singleConnection.context != null);
+ return (connectionPool != null || (singleConnection != null &&
singleConnection.context != null));
}
diff --git a/java/org/apache/catalina/realm/LockOutRealm.java
b/java/org/apache/catalina/realm/LockOutRealm.java
index 547d0cc881..86cdc6afa9 100644
--- a/java/org/apache/catalina/realm/LockOutRealm.java
+++ b/java/org/apache/catalina/realm/LockOutRealm.java
@@ -393,7 +393,7 @@ public class LockOutRealm extends CombinedRealm {
/**
* The time of the last failure.
*/
- private long lastFailureTime = 0;
+ private volatile long lastFailureTime = 0;
/**
* Default constructor.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]