Skip to content

Commit b22a80b

Browse files
authored
Use JndiHelper in AbstractMessageListenerContainer (#2918)
1 parent b4e79e2 commit b22a80b

3 files changed

Lines changed: 33 additions & 2 deletions

File tree

rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/AbstractMessageListenerContainer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ public void setJndiEnvironment(Properties jndiEnvironment) {
106106
public InitialContext createInitialContext() {
107107
if (jndiEnvironment != null) {
108108
try {
109-
return new InitialContext(this.jndiEnvironment);
109+
JndiHelper helper = new JndiHelper(this.jndiEnvironment);
110+
return helper.createInitialContext();
110111
} catch (NamingException e) {
111112
LOG.log(Level.SEVERE, "Could not expose JNDI environment to JMS thread context", e);
112113
}

rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JndiHelper.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public JndiHelper(Properties environment) {
7878

7979
@SuppressWarnings("unchecked")
8080
public <T> T lookup(final String name, Class<T> requiredType) throws NamingException {
81-
Context ctx = new InitialContext(this.environment);
81+
Context ctx = createInitialContext();
8282
try {
8383
Object located = ctx.lookup(name);
8484
if (located == null) {
@@ -90,4 +90,8 @@ public <T> T lookup(final String name, Class<T> requiredType) throws NamingExcep
9090
}
9191
}
9292

93+
public InitialContext createInitialContext() throws NamingException {
94+
return new InitialContext(this.environment);
95+
}
96+
9397
}

rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/util/MessageListenerTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
package org.apache.cxf.transport.jms.util;
2020

2121
import java.util.Enumeration;
22+
import java.util.Properties;
2223
import java.util.Timer;
2324

25+
import javax.naming.Context;
2426
import javax.transaction.xa.XAException;
2527

2628
import jakarta.jms.Connection;
@@ -53,6 +55,7 @@
5355
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
5456
import org.apache.activemq.artemis.junit.EmbeddedActiveMQResource;
5557
import org.apache.activemq.artemis.ra.ActiveMQResourceAdapter;
58+
import org.apache.cxf.transport.jms.JMSConfiguration;
5659
import org.awaitility.Awaitility;
5760
import org.jboss.narayana.jta.jms.ConnectionFactoryProxy;
5861
import org.jboss.narayana.jta.jms.TransactionHelperImpl;
@@ -64,6 +67,7 @@
6467
import static org.junit.Assert.assertEquals;
6568
import static org.junit.Assert.assertNotNull;
6669
import static org.junit.Assert.assertThat;
70+
import static org.junit.Assert.assertTrue;
6771

6872

6973
public class MessageListenerTest {
@@ -94,6 +98,28 @@ public void testConnectionProblem() throws JMSException {
9498
assertEquals("Connection is closed", ex.getMessage());
9599
}
96100

101+
@Test
102+
public void testJndiForbiddenProtocolForPollingContainer() {
103+
Properties env = new Properties();
104+
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
105+
env.put(Context.PROVIDER_URL, "ldap://127.0.0.1:12345");
106+
env.put(Context.REFERRAL, "follow");
107+
108+
JMSConfiguration jmsConfig = new JMSConfiguration();
109+
jmsConfig.setJndiEnvironment(env);
110+
111+
PollingMessageListenerContainer container =
112+
new PollingMessageListenerContainer(jmsConfig, false, message -> { });
113+
container.setJndiEnvironment(env);
114+
115+
try {
116+
container.createInitialContext();
117+
org.junit.Assert.fail("JNDI context creation should have failed for unsafe LDAP protocol");
118+
} catch (IllegalArgumentException ex) {
119+
assertTrue(ex.getMessage().contains("Unsafe protocol in JNDI URL"));
120+
}
121+
}
122+
97123
@Test
98124
public void testConnectionProblemXA() throws JMSException, XAException, ResourceException {
99125
TransactionManager transactionManager = com.arjuna.ats.jta.TransactionManager.transactionManager();

0 commit comments

Comments
 (0)