You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2021/06/06 16:31:09 UTC

[commons-dbcp] branch master updated: Internal package private CPDSConnectionFactory class stores its user name as a char[] as it already does the password.

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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-dbcp.git


The following commit(s) were added to refs/heads/master by this push:
     new 7da0703  Internal package private CPDSConnectionFactory class stores its user name as a char[] as it already does the password.
7da0703 is described below

commit 7da0703a04e58335638da4a943e56bdec2a4d10a
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun Jun 6 12:31:05 2021 -0400

    Internal package private CPDSConnectionFactory class stores its user
    name as a
    char[] as it already does the password.
---
 .../commons/dbcp2/datasources/CPDSConnectionFactory.java    | 10 +++++-----
 .../org/apache/commons/dbcp2/datasources/CharArray.java     |  2 +-
 .../dbcp2/datasources/KeyedCPDSConnectionFactory.java       | 12 ++++++------
 .../commons/dbcp2/datasources/PooledConnectionAndInfo.java  | 13 +++++++++----
 .../org/apache/commons/dbcp2/datasources/UserPassKey.java   |  4 ++++
 .../dbcp2/datasources/TestInstanceKeyDataSource.java        |  2 +-
 6 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java
index e2fc3e6..ddb1eb4 100644
--- a/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java
+++ b/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java
@@ -52,7 +52,7 @@ class CPDSConnectionFactory
     private final int validationQueryTimeoutSeconds;
     private final boolean rollbackAfterValidation;
     private ObjectPool<PooledConnectionAndInfo> pool;
-    private final String userName;
+    private char[] userName;
     private char[] userPassword;
     private Duration maxConnLifetime = Duration.ofMillis(-1);
 
@@ -91,7 +91,7 @@ class CPDSConnectionFactory
         this.cpds = cpds;
         this.validationQuery = validationQuery;
         this.validationQueryTimeoutSeconds = validationQueryTimeoutSeconds;
-        this.userName = userName;
+        this.userName = Utils.toCharArray(userName);
         this.userPassword = userPassword;
         this.rollbackAfterValidation = rollbackAfterValidation;
     }
@@ -116,9 +116,9 @@ class CPDSConnectionFactory
      */
     public CPDSConnectionFactory(final ConnectionPoolDataSource cpds, final String validationQuery,
             final int validationQueryTimeoutSeconds, final boolean rollbackAfterValidation, final String userName,
-            final String userPassword) {
+        final String userPassword) {
         this(cpds, validationQuery, validationQueryTimeoutSeconds, rollbackAfterValidation, userName,
-                Utils.toCharArray(userPassword));
+            Utils.toCharArray(userPassword));
     }
 
     /**
@@ -156,7 +156,7 @@ class CPDSConnectionFactory
             if (userName == null) {
                 pc = cpds.getPooledConnection();
             } else {
-                pc = cpds.getPooledConnection(userName, Utils.toString(userPassword));
+                pc = cpds.getPooledConnection(Utils.toString(userName), Utils.toString(userPassword));
             }
 
             if (pc == null) {
diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/CharArray.java b/src/main/java/org/apache/commons/dbcp2/datasources/CharArray.java
index e0334ef..2bea59a 100644
--- a/src/main/java/org/apache/commons/dbcp2/datasources/CharArray.java
+++ b/src/main/java/org/apache/commons/dbcp2/datasources/CharArray.java
@@ -24,7 +24,7 @@ import org.apache.commons.dbcp2.Utils;
 /**
  * A {@code char} array wrapper that does not reveal its contents inadvertently through toString(). In contrast to, for
  * example, AtomicReference which toString()'s its contents.
- * 
+ *
  * May contain null.
  *
  * @since 2.9.0
diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java
index f57b82b..e8c9297 100644
--- a/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java
+++ b/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java
@@ -105,17 +105,17 @@ class KeyedCPDSConnectionFactory implements KeyedPooledObjectFactory<UserPassKey
     /**
      * Creates a new {@code PooledConnectionAndInfo} from the given {@code UserPassKey}.
      *
-     * @param upkey
+     * @param userPassKey
      *            {@code UserPassKey} containing user credentials
      * @throws SQLException
      *             if the connection could not be created.
      * @see org.apache.commons.pool2.KeyedPooledObjectFactory#makeObject(java.lang.Object)
      */
     @Override
-    public synchronized PooledObject<PooledConnectionAndInfo> makeObject(final UserPassKey upkey) throws Exception {
+    public synchronized PooledObject<PooledConnectionAndInfo> makeObject(final UserPassKey userPassKey) throws Exception {
         PooledConnection pooledConnection = null;
-        final String userName = upkey.getUserName();
-        final String password = upkey.getPassword();
+        final String userName = userPassKey.getUserName();
+        final String password = userPassKey.getPassword();
         if (userName == null) {
             pooledConnection = cpds.getPooledConnection();
         } else {
@@ -129,7 +129,7 @@ class KeyedCPDSConnectionFactory implements KeyedPooledObjectFactory<UserPassKey
         // should we add this object as a listener or the pool.
         // consider the validateObject method in decision
         pooledConnection.addConnectionEventListener(this);
-        final PooledConnectionAndInfo pci = new PooledConnectionAndInfo(pooledConnection, userName, upkey.getPasswordCharArray());
+        final PooledConnectionAndInfo pci = new PooledConnectionAndInfo(pooledConnection, userPassKey);
         pcMap.put(pooledConnection, pci);
 
         return new DefaultPooledObject<>(pci);
@@ -152,7 +152,7 @@ class KeyedCPDSConnectionFactory implements KeyedPooledObjectFactory<UserPassKey
      * @param key
      *            ignored
      * @param pooledObject
-     *            wrapped {@link PooledConnectionAndInfo} containing the connection to validate
+     *            wrapped {@code PooledConnectionAndInfo} containing the connection to validate
      * @return true if validation succeeds
      */
     @Override
diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/PooledConnectionAndInfo.java b/src/main/java/org/apache/commons/dbcp2/datasources/PooledConnectionAndInfo.java
index 620eedb..af0b38e 100644
--- a/src/main/java/org/apache/commons/dbcp2/datasources/PooledConnectionAndInfo.java
+++ b/src/main/java/org/apache/commons/dbcp2/datasources/PooledConnectionAndInfo.java
@@ -28,6 +28,7 @@ import javax.sql.PooledConnection;
 final class PooledConnectionAndInfo {
 
     private final PooledConnection pooledConnection;
+
     private final UserPassKey userPassKey;
 
     /**
@@ -35,9 +36,13 @@ final class PooledConnectionAndInfo {
      *
      * @since 2.4.0
      */
-    PooledConnectionAndInfo(final PooledConnection pc, final String userName, final char[] userPassword) {
-        this.pooledConnection = pc;
-        this.userPassKey = new UserPassKey(userName, userPassword);
+    PooledConnectionAndInfo(final PooledConnection pooledConnection, final char[] userName, final char[] userPassword) {
+        this(pooledConnection, new UserPassKey(userName, userPassword));
+    }
+
+    PooledConnectionAndInfo(final PooledConnection pooledConnection, final UserPassKey userPassKey) {
+        this.pooledConnection = pooledConnection;
+        this.userPassKey = userPassKey;
     }
 
     /**
@@ -63,7 +68,7 @@ final class PooledConnectionAndInfo {
      *
      * @return value of userName.
      */
-    String getUsername() {
+    String getUserName() {
         return userPassKey.getUserName();
     }
 
diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java b/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java
index 4d2f28b..ac06184 100644
--- a/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java
+++ b/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java
@@ -53,6 +53,10 @@ class UserPassKey implements Serializable {
         this(new CharArray(userName), CharArray.NULL);
     }
 
+    UserPassKey(final char[] userName, final char[] password) {
+        this(new CharArray(userName), new CharArray(password));
+    }
+
     UserPassKey(final String userName, final char[] password) {
         this(new CharArray(userName), new CharArray(password));
     }
diff --git a/src/test/java/org/apache/commons/dbcp2/datasources/TestInstanceKeyDataSource.java b/src/test/java/org/apache/commons/dbcp2/datasources/TestInstanceKeyDataSource.java
index d8d3250..950a1a6 100644
--- a/src/test/java/org/apache/commons/dbcp2/datasources/TestInstanceKeyDataSource.java
+++ b/src/test/java/org/apache/commons/dbcp2/datasources/TestInstanceKeyDataSource.java
@@ -302,7 +302,7 @@ public class TestInstanceKeyDataSource {
         pcds.setUrl(URL);
         spds.setConnectionPoolDataSource(pcds);
         final PooledConnectionAndInfo info = spds.getPooledConnectionAndInfo(null, null);
-        assertNull(info.getUsername());
+        assertNull(info.getUserName());
         assertNull(info.getPassword());
         final Connection conn = spds.getConnection();
         assertNotNull(conn);