You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2021/12/17 20:48:30 UTC

[logging-log4j2] branch release-2.x updated: [LOG4J2-3242] Rename JNDI enablement property from 'log4j2.enableJndi' to 'log4j2.enableJndiLookup', 'log4j2.enableJndiJms', and 'log4j2.enableJndiContextSelector'.

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

ggregory pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/release-2.x by this push:
     new 4a4b753  [LOG4J2-3242] Rename JNDI enablement property from 'log4j2.enableJndi' to 'log4j2.enableJndiLookup', 'log4j2.enableJndiJms', and 'log4j2.enableJndiContextSelector'.
4a4b753 is described below

commit 4a4b7530b1848e630a65d79e9c7dc388a5a7785b
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Dec 17 15:48:27 2021 -0500

    [LOG4J2-3242] Rename JNDI enablement property from 'log4j2.enableJndi'
    to 'log4j2.enableJndiLookup', 'log4j2.enableJndiJms', and
    'log4j2.enableJndiContextSelector'.
---
 .../log4j/core/appender/AbstractManager.java       |  3 +-
 .../log4j/core/appender/mom/JmsManager.java        |  4 +--
 .../logging/log4j/core/lookup/Interpolator.java    |  4 +--
 .../logging/log4j/core/lookup/JndiLookup.java      | 18 +++++++---
 .../apache/logging/log4j/core/net/JndiManager.java | 41 +++++++++++++++-------
 .../log4j/core/selector/JndiContextSelector.java   |  4 +--
 .../log4j/core/appender/mom/JmsAppenderTest.java   |  7 +++-
 .../routing/RoutingAppenderWithJndiTest.java       | 12 +++++--
 .../log4j/core/lookup/InterpolatorTest.java        |  4 +--
 .../log4j/core/lookup/JndiDisabledLookupTest.java  | 36 ++-----------------
 .../logging/log4j/core/lookup/JndiLookupTest.java  |  2 +-
 .../core/lookup/JndiRestrictedLookupTest.java      |  2 +-
 .../logging/log4j/core/net/JndiManagerTest.java    | 31 ++++++++++++++++
 src/changes/changes.xml                            | 10 +++---
 src/site/xdoc/manual/appenders.xml                 |  4 +--
 src/site/xdoc/manual/configuration.xml.vm          | 22 ++++++++++--
 16 files changed, 129 insertions(+), 75 deletions(-)

diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
index 59492a3..b253f95 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/AbstractManager.java
@@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.appender;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
@@ -110,7 +111,7 @@ public abstract class AbstractManager implements AutoCloseable {
             @SuppressWarnings("unchecked")
             M manager = (M) MAP.get(name);
             if (manager == null) {
-                manager = factory.createManager(name, data);
+                manager = Objects.requireNonNull(factory, "factory").createManager(name, data);
                 if (manager == null) {
                     throw new IllegalStateException("ManagerFactory [" + factory + "] unable to create manager for ["
                             + name + "] with data [" + data + "]");
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
index afaf859..beeb775 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java
@@ -124,7 +124,7 @@ public class JmsManager extends AbstractManager {
 
         @Override
         public JmsManager createManager(final String name, final JmsManagerConfiguration data) {
-            if (JndiManager.isJndiEnabled()) {
+            if (JndiManager.isJndiJmsEnabled()) {
                 try {
                     return new JmsManager(name, data);
                 } catch (final Exception e) {
@@ -132,7 +132,7 @@ public class JmsManager extends AbstractManager {
                     return null;
                 }
             } else {
-                logger().error("JNDI has not been enabled. The log4j2.enableJndiJava property must be set to true");
+                logger().error("JNDI must be enabled by setting log4j2.enableJndiJms=true");
                 return null;
             }
         }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java
index 9c491ac..6da580c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java
@@ -78,7 +78,7 @@ public class Interpolator extends AbstractConfigurationAwareLookup {
         for (final Map.Entry<String, PluginType<?>> entry : plugins.entrySet()) {
             try {
                 final Class<? extends StrLookup> clazz = entry.getValue().getPluginClass().asSubclass(StrLookup.class);
-                if (!clazz.getName().equals("org.apache.logging.log4j.core.lookup.JndiLookup") || JndiManager.isJndiEnabled()) {
+                if (!clazz.getName().equals("org.apache.logging.log4j.core.lookup.JndiLookup") || JndiManager.isJndiLookupEnabled()) {
                     strLookupMap.put(entry.getKey().toLowerCase(), ReflectionUtil.instantiate(clazz));
                 }
             } catch (final Throwable t) {
@@ -109,7 +109,7 @@ public class Interpolator extends AbstractConfigurationAwareLookup {
         strLookupMap.put("lower", new LowerLookup());
         strLookupMap.put("upper", new UpperLookup());
         // JNDI
-        if (JndiManager.isJndiEnabled()) {
+        if (JndiManager.isJndiLookupEnabled()) {
             try {
                 // [LOG4J2-703] We might be on Android
                 strLookupMap.put(LOOKUP_KEY_JNDI,
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JndiLookup.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JndiLookup.java
index 30e65ad..a783ea4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JndiLookup.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/JndiLookup.java
@@ -41,9 +41,19 @@ public class JndiLookup extends AbstractLookup {
     static final String CONTAINER_JNDI_RESOURCE_PATH_PREFIX = "java:comp/env/";
 
     /**
+     * Constructs a new instance or throw IllegalStateException if this feature is disabled.
+     */
+    public JndiLookup() {
+        if (!JndiManager.isJndiLookupEnabled()) {
+            throw new IllegalStateException("JNDI must be enabled by setting log4j2.enableJndiLookup=true");
+        }
+    }
+
+    /**
      * Looks up the value of the JNDI resource.
+     * 
      * @param event The current LogEvent (is ignored by this StrLookup).
-     * @param key  the JNDI resource name to be looked up, may be null
+     * @param key the JNDI resource name to be looked up, may be null
      * @return The String value of the JNDI resource.
      */
     @Override
@@ -61,9 +71,9 @@ public class JndiLookup extends AbstractLookup {
     }
 
     /**
-     * Convert the given JNDI name to the actual JNDI name to use.
-     * Default implementation applies the "java:comp/env/" prefix
-     * unless other scheme like "java:" is given.
+     * Convert the given JNDI name to the actual JNDI name to use. Default implementation applies the "java:comp/env/"
+     * prefix unless other scheme like "java:" is given.
+     * 
      * @param jndiName The name of the resource.
      * @return The fully qualified name to look up.
      */
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java
index 127679e..d9d0c0b 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/JndiManager.java
@@ -39,13 +39,29 @@ import org.apache.logging.log4j.util.PropertiesUtil;
 public class JndiManager extends AbstractManager {
 
     private static final JndiManagerFactory FACTORY = new JndiManagerFactory();
-    private static final String PREFIX = "log4j2.";
-    private static final String JAVA = "java";
+    private static final String PREFIX = "log4j2.enableJndi";
+    private static final String JAVA_SCHEME = "java";
 
     private final InitialContext context;
 
+    private static boolean isJndiEnabled(final String subKey) {
+        return PropertiesUtil.getProperties().getBooleanProperty(PREFIX + subKey, false);
+    }
+
     public static boolean isJndiEnabled() {
-        return PropertiesUtil.getProperties().getBooleanProperty("log4j2.enableJndiJava", false);
+        return isJndiContextSelectorEnabled() || isJndiJmsEnabled() || isJndiLookupEnabled();
+    }
+
+    public static boolean isJndiContextSelectorEnabled() {
+        return isJndiEnabled("ContextSelector");
+    }
+
+    public static boolean isJndiJmsEnabled() {
+        return isJndiEnabled("Jms");
+    }
+
+    public static boolean isJndiLookupEnabled() {
+        return isJndiEnabled("Lookup");
     }
 
     private JndiManager(final String name, final InitialContext context) {
@@ -183,7 +199,7 @@ public class JndiManager extends AbstractManager {
         }
         try {
             URI uri = new URI(name);
-            if (uri.getScheme() == null || uri.getScheme().equals(JAVA)) {
+            if (uri.getScheme() == null || uri.getScheme().equals(JAVA_SCHEME)) {
                 return (T) this.context.lookup(name);
             }
             LOGGER.warn("Unsupported JNDI URI - {}", name);
@@ -197,15 +213,14 @@ public class JndiManager extends AbstractManager {
 
         @Override
         public JndiManager createManager(final String name, final Properties data) {
-            if (isJndiEnabled()) {
-                try {
-                    return new JndiManager(name, new InitialContext(data));
-                } catch (final NamingException e) {
-                    LOGGER.error("Error creating JNDI InitialContext.", e);
-                    return null;
-                }
-            } else {
-                return new JndiManager(name, null);
+            if (!isJndiEnabled()) {
+                throw new IllegalStateException(String.format("JNDI must be enabled by setting one of the %s* properties to true", PREFIX));
+            }
+            try {
+                return new JndiManager(name, new InitialContext(data));
+            } catch (final NamingException e) {
+                LOGGER.error("Error creating JNDI InitialContext for '{}'.", name, e);
+                return null;
             }
         }
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
index 21fbcbe..a4df310 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/JndiContextSelector.java
@@ -94,8 +94,8 @@ public class JndiContextSelector implements NamedContextSelector {
     private static final StatusLogger LOGGER = StatusLogger.getLogger();
 
     public JndiContextSelector() {
-        if (!JndiManager.isJndiEnabled()) {
-            throw new IllegalStateException("JNDI must be enabled by setting log4j2.enableJndiJava=true");
+        if (!JndiManager.isJndiContextSelectorEnabled()) {
+            throw new IllegalStateException("JNDI must be enabled by setting log4j2.enableJndiContextSelector=true");
         }
     }
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderTest.java
index 988614c..4c5b1a9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderTest.java
@@ -85,8 +85,13 @@ public class JmsAppenderTest {
     public RuleChain rules = RuleChain.outerRule(jndiRule).around(ctx);
 
     @BeforeClass
+    public static void afterClass() throws Exception {
+        System.clearProperty("log4j2.enableJndiJms");
+    }
+
+    @BeforeClass
     public static void beforeClass() throws Exception {
-        System.setProperty("log4j2.enableJndiJava", "true");
+        System.setProperty("log4j2.enableJndiJms", "true");
     }
 
     public JmsAppenderTest() throws Exception {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithJndiTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithJndiTest.java
index a169ca2..1b36062 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithJndiTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithJndiTest.java
@@ -52,7 +52,9 @@ public class RoutingAppenderWithJndiTest {
     public static RuleChain rules = RuleChain.outerRule(new JndiRule(initBindings())).around(loggerContextRule);
 
     private static Map<String, Object> initBindings() {
-        System.setProperty("log4j2.enableJndiJava", "true");
+        System.setProperty("log4j2.enableJndiLookup", "true");
+        //System.setProperty("log4j2.enableJndiJms", "true");
+        //System.setProperty("log4j2.enableJndiContextSelector", "true");
         return Collections.emptyMap();
     }
 
@@ -64,8 +66,12 @@ public class RoutingAppenderWithJndiTest {
 
     @After
     public void after() {
-        listAppender1.clear();
-        listAppender2.clear();
+        if (listAppender1 != null) {
+            listAppender1.clear();
+        }
+        if (listAppender2 != null) {
+            listAppender2.clear();
+        }
     }
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/InterpolatorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/InterpolatorTest.java
index 4c96551..6289cd8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/InterpolatorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/InterpolatorTest.java
@@ -49,14 +49,14 @@ public class InterpolatorTest {
         protected void before() throws Throwable {
             System.setProperty(TESTKEY, TESTVAL);
             System.setProperty(TESTKEY2, TESTVAL);
-            System.setProperty("log4j2.enableJndiJava", "true");
+            System.setProperty("log4j2.enableJndiLookup", "true");
         }
 
         @Override
         protected void after() {
             System.clearProperty(TESTKEY);
             System.clearProperty(TESTKEY2);
-            System.clearProperty("log4j2.enableJndiJava");
+            System.clearProperty("log4j2.enableJndiLookup");
         }
     }).around(new JndiRule(
         JndiLookup.CONTAINER_JNDI_RESOURCE_PATH_PREFIX + TEST_CONTEXT_RESOURCE_NAME, TEST_CONTEXT_NAME));
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiDisabledLookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiDisabledLookupTest.java
index b4f453b..9400c68 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiDisabledLookupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiDisabledLookupTest.java
@@ -16,49 +16,19 @@
  */
 package org.apache.logging.log4j.core.lookup;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
-import org.apache.logging.log4j.junit.JndiRule;
-import org.junit.BeforeClass;
-import org.junit.Rule;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
 /**
  * JndiDisabledLookupTest
  *
- * Verifies the Lookups are disabled without the log4j2.enableJndiJava property set to true.
+ * Verifies the Lookups are disabled without the log4j2.enableJndiLookup property set to true.
  */
 public class JndiDisabledLookupTest {
 
-    private static final String TEST_CONTEXT_RESOURCE_NAME = "logging/context-name";
-    private static final String TEST_CONTEXT_NAME = "app-1";
-    private static final String TEST_INTEGRAL_NAME = "int-value";
-    private static final int TEST_INTEGRAL_VALUE = 42;
-    private static final String TEST_STRINGS_NAME = "string-collection";
-    private static final Collection<String> TEST_STRINGS_COLLECTION = Arrays.asList("one", "two", "three");
-
-    @Rule
-    public JndiRule jndiRule = new JndiRule(createBindings());
-
-    private Map<String, Object> createBindings() {
-        final Map<String, Object> map = new HashMap<>();
-        map.put(JndiLookup.CONTAINER_JNDI_RESOURCE_PATH_PREFIX + TEST_CONTEXT_RESOURCE_NAME, TEST_CONTEXT_NAME);
-        map.put(JndiLookup.CONTAINER_JNDI_RESOURCE_PATH_PREFIX + TEST_INTEGRAL_NAME, TEST_INTEGRAL_VALUE);
-        map.put(JndiLookup.CONTAINER_JNDI_RESOURCE_PATH_PREFIX + TEST_STRINGS_NAME, TEST_STRINGS_COLLECTION);
-        return map;
-    }
-
     @Test
     public void testLookup() {
-        final StrLookup lookup = new JndiLookup();
-
-        String contextName = lookup.lookup(TEST_CONTEXT_RESOURCE_NAME);
-        assertNull(contextName);
+        assertThrows(IllegalStateException.class, JndiLookup::new);
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiLookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiLookupTest.java
index 90301df..454faa9 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiLookupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiLookupTest.java
@@ -45,7 +45,7 @@ public class JndiLookupTest {
 
     @BeforeClass
     public static void beforeClass() {
-        System.setProperty("log4j2.enableJndiJava", "true");
+        System.setProperty("log4j2.enableJndiLookup", "true");
     }
 
     private Map<String, Object> createBindings() {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiRestrictedLookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiRestrictedLookupTest.java
index 21c23e9..e40cdb2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiRestrictedLookupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/JndiRestrictedLookupTest.java
@@ -30,7 +30,7 @@ public class JndiRestrictedLookupTest {
 
     @BeforeClass
     public static void beforeClass() {
-        System.setProperty("log4j2.enableJndiJava", "true");
+        System.setProperty("log4j2.enableJndiLookup", "true");
     }
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/JndiManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/JndiManagerTest.java
index 2006b0a..e421734 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/JndiManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/JndiManagerTest.java
@@ -18,6 +18,9 @@
 package org.apache.logging.log4j.core.net;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import java.util.Properties;
 
 import org.junit.jupiter.api.Test;
 
@@ -30,4 +33,32 @@ public class JndiManagerTest {
     public void testIsJndiEnabled() {
         assertFalse(JndiManager.isJndiEnabled());
     }
+
+    @Test
+    public void testIsJndiContextSelectorEnabled() {
+        assertFalse(JndiManager.isJndiContextSelectorEnabled());
+    }
+
+    @Test
+    public void testIsJndiJmsEnabled() {
+        assertFalse(JndiManager.isJndiJmsEnabled());
+    }
+
+    @Test
+    public void testIsJndiLookupEnabled() {
+        assertFalse(JndiManager.isJndiLookupEnabled());
+    }
+    
+    @Test
+    public void testNoInstanceByDefault() {
+        assertThrows(IllegalStateException.class, () -> JndiManager.getDefaultManager());
+        assertThrows(IllegalStateException.class, () -> JndiManager.getDefaultManager(null));
+        assertThrows(IllegalStateException.class, () -> JndiManager.getDefaultManager("A"));
+        assertThrows(IllegalStateException.class, () -> JndiManager.getJndiManager(null));
+        assertThrows(IllegalStateException.class, () -> JndiManager.getJndiManager(new Properties()));
+        assertThrows(IllegalStateException.class, () -> JndiManager.getJndiManager(null, null, null, null, null, null));
+        assertThrows(IllegalStateException.class, () -> JndiManager.getJndiManager("A", "A", "A", "A", "A", new Properties()));
+    }
+    
+    
 }
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index f54e627..08e3fd5 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -30,12 +30,12 @@
          - "remove" - Removed
     -->
     <release version="2.17.0" date="2021-MM-dd" description="GA Release 2.17.0">
-      <action issue="LOG4J2-3242" dev="rgoers" type="fix">
-        Limit JNDI to the java protocol only. JNDI will remain disabled by default. The enablement
-        property has been renamed to 'log4j2.enableJndiJava'
+      <action issue="LOG4J2-3242" dev="rgoers, ggregory" type="fix">
+        Limit JNDI to the java protocol only. JNDI will remain disabled by default. Rename JNDI enablement property from
+        'log4j2.enableJndi' to 'log4j2.enableJndiLookup', 'log4j2.enableJndiJms', and 'log4j2.enableJndiContextSelector'.
       </action>
       <action issue="LOG4J2-3241" dev="rgoers" type="fix">
-        Do not declare log4j-api-java9 and log4j-core-java9 as depdendencies as it causes problems with the
+        Do not declare log4j-api-java9 and log4j-core-java9 as dependencies as it causes problems with the
         Maven enforcer plugin.
       </action>
       <action issue="LOG4J2-3247" dev="ggregory" type="fix">
@@ -45,7 +45,7 @@
         Log4j 1.2 bridge for Syslog Appender defaults to port 512 instead of 514.
       </action>
       <action issue="LOG4J2-3237" dev="ggregory" type="fix">
-        Log4j 1.2 bridge API hard codes protocol to TCP.
+        Log4j 1.2 bridge API hard codes the Syslog protocol to TCP.
       </action>
     </release>
     <release version="2.16.0" date="2021-12-13" description="GA Release 2.16.0">
diff --git a/src/site/xdoc/manual/appenders.xml b/src/site/xdoc/manual/appenders.xml
index 28a2373..35d88c0 100644
--- a/src/site/xdoc/manual/appenders.xml
+++ b/src/site/xdoc/manual/appenders.xml
@@ -1541,8 +1541,8 @@ public class ConnectionFactory {
         <subsection name="JMS Appender">
           <p>The JMS Appender sends the formatted log event to a JMS Destination.</p>
           <p>The JMS Appender requires JNDI support so as of release 2.16.0 this appender will not function unless
-            <code>log4j2.enableJndiJava=true</code>log4j2.enableJndiJava=true is configured as a system property or environment
-            variable. See the <a href="./configuration.html#enableJndiJava">enableJndiJava</a> system property.</p>
+            <code>log4j2.enableJndiJms=true</code> is configured as a system property or environment
+            variable. See the <a href="./configuration.html#enableJndiJms">enableJndiJms</a> system property.</p>
           <p>
             Note that in Log4j 2.0, this appender was split into a JMSQueueAppender and a JMSTopicAppender. Starting
             in Log4j 2.1, these appenders were combined into the JMS Appender which makes no distinction between queues
diff --git a/src/site/xdoc/manual/configuration.xml.vm b/src/site/xdoc/manual/configuration.xml.vm
index 2793a68..2c1c315 100644
--- a/src/site/xdoc/manual/configuration.xml.vm
+++ b/src/site/xdoc/manual/configuration.xml.vm
@@ -2149,11 +2149,27 @@ public class AwesomeTest {
     </td>
   </tr>
   <tr>
-    <td><a name="enableJndiJava"/>log4j2.enableJndiJava</td>
-    <td>LOG4J_ENABLE_JNDI_JAVA</td>
+    <td><a name="enableJndiContextSelector"/>log4j2.enableJndiContextSelector</td>
+    <td>LOG4J_ENABLE_JNDI_CONTEXT_SELECTOR</td>
     <td>false</td>
     <td>
-      When true, Log4j components that use JNDI java protocol are enabled. When false, the default, they are disabled.
+      When true, the Log4j context selector that uses the JNDI java protocol is enabled. When false, the default, they are disabled.
+    </td>
+  </tr>
+  <tr>
+    <td><a name="enableJndiJms"/>log4j2.enableJndiJms</td>
+    <td>LOG4J_ENABLE_JNDI_JMS</td>
+    <td>false</td>
+    <td>
+      When true, the Log4j JMS Appender that uses JNDI's java protocol is enabled. When false, the default, they are disabled.
+    </td>
+  </tr>
+  <tr>
+    <td><a name="enableJndiLookup"/>log4j2.enableJndiLookup</td>
+    <td>LOG4J_ENABLE_JNDI_LOOKUP</td>
+    <td>false</td>
+    <td>
+      When true, the Log4j lookup that uses JNDI's java protocol is enabled. When false, the default, they are disabled.
     </td>
   </tr>
   <tr>