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

clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/main by this push:
     new a415917d45 ARTEMIS-5659 support masking JDBC URL
a415917d45 is described below

commit a415917d4542fe9c12589f9ff0ee023ef39326ff
Author: Justin Bertram <[email protected]>
AuthorDate: Mon Sep 15 15:09:55 2025 -0500

    ARTEMIS-5659 support masking JDBC URL
---
 .../deployers/impl/FileConfigurationParser.java    |  6 ++-
 ...=> FileConfigurationDbEncryptedConfigTest.java} | 58 +++++++++++++++++++---
 ...l => ConfigurationTest-db-encrypted-config.xml} |  7 +--
 3 files changed, 59 insertions(+), 12 deletions(-)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
index 8f100cf59a..43f8934bb1 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
@@ -2015,7 +2015,11 @@ public final class FileConfigurationParser extends 
XMLConfigurationUtil {
       conf.setLargeMessageTableName(getString(storeNode, 
"large-message-table-name", conf.getLargeMessageTableName(), NO_CHECK));
       conf.setPageStoreTableName(getString(storeNode, "page-store-table-name", 
conf.getPageStoreTableName(), NO_CHECK));
       conf.setNodeManagerStoreTableName(getString(storeNode, 
"node-manager-store-table-name", conf.getNodeManagerStoreTableName(), 
NO_CHECK));
-      conf.setJdbcConnectionUrl(getString(storeNode, "jdbc-connection-url", 
conf.getJdbcConnectionUrl(), NO_CHECK));
+      String jdbcConnectionUrl = getString(storeNode, "jdbc-connection-url", 
conf.getJdbcConnectionUrl(), NO_CHECK);
+      if (jdbcConnectionUrl != null && !jdbcConnectionUrl.startsWith("jdbc:")) 
{
+         jdbcConnectionUrl = 
PasswordMaskingUtil.resolveMask(jdbcConnectionUrl, 
mainConfig.getPasswordCodec());
+      }
+      conf.setJdbcConnectionUrl(jdbcConnectionUrl);
       conf.setJdbcDriverClassName(getString(storeNode, 
"jdbc-driver-class-name", conf.getJdbcDriverClassName(), NO_CHECK));
       conf.setJdbcNetworkTimeout(getInteger(storeNode, "jdbc-network-timeout", 
conf.getJdbcNetworkTimeout(), NO_CHECK));
       conf.setJdbcLockRenewPeriodMillis(getLong(storeNode, 
"jdbc-lock-renew-period", conf.getJdbcLockRenewPeriodMillis(), NO_CHECK));
diff --git 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationDbEncryptedPassTest.java
 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationDbEncryptedConfigTest.java
similarity index 53%
rename from 
artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationDbEncryptedPassTest.java
rename to 
artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationDbEncryptedConfigTest.java
index d1bafd417e..e2a4a7a0f3 100644
--- 
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationDbEncryptedPassTest.java
+++ 
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationDbEncryptedConfigTest.java
@@ -16,17 +16,52 @@
  */
 package org.apache.activemq.artemis.core.config.impl;
 
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.activemq.artemis.core.config.Configuration;
 import org.apache.activemq.artemis.core.config.FileDeploymentManager;
+import 
org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfiguration;
+import org.apache.activemq.artemis.utils.RandomUtil;
 import org.apache.activemq.artemis.utils.SensitiveDataCodec;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-public class FileConfigurationDbEncryptedPassTest extends 
AbstractConfigurationTestBase {
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class FileConfigurationDbEncryptedConfigTest extends 
AbstractConfigurationTestBase {
+
+   private static final String ENCODED_PASSWORD = 
RandomUtil.randomUUIDString();
+   private static final String PASSWORD = RandomUtil.randomUUIDString();
+   private static final String ENCODED_USER = RandomUtil.randomUUIDString();
+   private static final String USER = RandomUtil.randomUUIDString();
+   private static final String ENCODED_URL = RandomUtil.randomUUIDString();
+   private static final String URL = RandomUtil.randomUUIDString();
+
+   private static final Map<String, String> SENSITIVE_PROPERTIES = new 
HashMap<>();
+
+   static {
+      SENSITIVE_PROPERTIES.put(ENCODED_PASSWORD, PASSWORD);
+      SENSITIVE_PROPERTIES.put(ENCODED_USER, USER);
+      SENSITIVE_PROPERTIES.put(ENCODED_URL, URL);
+   }
 
    protected String getConfigurationName() {
-      return "ConfigurationTest-db-encrypted-pass-config.xml";
+      return "ConfigurationTest-db-encrypted-config.xml";
+   }
+
+   @Override
+   @BeforeEach
+   public void setUp() throws Exception {
+      System.setProperty("dbPass", ENCODED_PASSWORD);
+      System.setProperty("dbUser", ENCODED_USER);
+      System.setProperty("dbUrl", ENCODED_URL);
+      runAfter(() -> {
+         System.clearProperty("dbPass");
+         System.clearProperty("dbUser");
+         System.clearProperty("dbUrl");
+      });
+      super.setUp();
    }
 
    @Override
@@ -40,7 +75,17 @@ public class FileConfigurationDbEncryptedPassTest extends 
AbstractConfigurationT
 
    @Test
    public void testJdbcPasswordWithCustomCodec() {
-      assertTrue(MySensitiveStringCodec.decoded);
+      assertEquals(PASSWORD, 
((DatabaseStorageConfiguration)conf.getStoreConfiguration()).getJdbcPassword());
+   }
+
+   @Test
+   public void testJdbcUserWithCustomCodec() {
+      assertEquals(USER, 
((DatabaseStorageConfiguration)conf.getStoreConfiguration()).getJdbcUser());
+   }
+
+   @Test
+   public void testJdbcUrlWithCustomCodec() {
+      assertEquals(URL, 
((DatabaseStorageConfiguration)conf.getStoreConfiguration()).getJdbcConnectionUrl());
    }
 
    @Test
@@ -64,12 +109,9 @@ public class FileConfigurationDbEncryptedPassTest extends 
AbstractConfigurationT
    }
 
    public static class MySensitiveStringCodec implements 
SensitiveDataCodec<String> {
-      public static boolean decoded = false;
-
       @Override
       public String decode(Object mask) throws Exception {
-         decoded = true;
-         return null;
+         return SENSITIVE_PROPERTIES.get(mask);
       }
 
       @Override
diff --git 
a/artemis-server/src/test/resources/ConfigurationTest-db-encrypted-pass-config.xml
 b/artemis-server/src/test/resources/ConfigurationTest-db-encrypted-config.xml
similarity index 85%
rename from 
artemis-server/src/test/resources/ConfigurationTest-db-encrypted-pass-config.xml
rename to 
artemis-server/src/test/resources/ConfigurationTest-db-encrypted-config.xml
index 9caa854e69..45235f4cc0 100644
--- 
a/artemis-server/src/test/resources/ConfigurationTest-db-encrypted-pass-config.xml
+++ 
b/artemis-server/src/test/resources/ConfigurationTest-db-encrypted-config.xml
@@ -20,17 +20,18 @@
         xsi:schemaLocation="urn:activemq 
../../../../activemq-server/src/main/resources/schema/artemis-server.xsd">
    <core xmlns="urn:activemq:core">
 
-      
<password-codec>org.apache.activemq.artemis.core.config.impl.FileConfigurationDbEncryptedPassTest$MySensitiveStringCodec</password-codec>
+      
<password-codec>org.apache.activemq.artemis.core.config.impl.FileConfigurationDbEncryptedConfigTest$MySensitiveStringCodec</password-codec>
 
       <store>
          <database-store>
             <jdbc-driver-class-name>foo</jdbc-driver-class-name>
-            <jdbc-connection-url>foo</jdbc-connection-url>
+            <jdbc-connection-url>ENC(${dbUrl})</jdbc-connection-url>
             <message-table-name>foo</message-table-name>
             <bindings-table-name>foo</bindings-table-name>
             <large-message-table-name>foo</large-message-table-name>
             <page-store-table-name>foo</page-store-table-name>
-            <jdbc-password>ENC(foo)</jdbc-password>
+            <jdbc-password>ENC(${dbPass})</jdbc-password>
+            <jdbc-user>ENC(${dbUser})</jdbc-user>
          </database-store>
       </store>
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to