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 2018/06/10 17:26:53 UTC

commons-dbcp git commit: [DBCP-500] org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS should use a char[] instead of a String to store passwords.

Repository: commons-dbcp
Updated Branches:
  refs/heads/master 7dfe5908c -> 1d0496004


[DBCP-500] org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS should
use a char[] instead of a String to store passwords.

Project: http://git-wip-us.apache.org/repos/asf/commons-dbcp/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-dbcp/commit/1d049600
Tree: http://git-wip-us.apache.org/repos/asf/commons-dbcp/tree/1d049600
Diff: http://git-wip-us.apache.org/repos/asf/commons-dbcp/diff/1d049600

Branch: refs/heads/master
Commit: 1d049600404981120633155a69a2effa10b26cfb
Parents: 7dfe590
Author: Gary Gregory <ga...@gmail.com>
Authored: Sun Jun 10 11:26:49 2018 -0600
Committer: Gary Gregory <ga...@gmail.com>
Committed: Sun Jun 10 11:26:49 2018 -0600

----------------------------------------------------------------------
 src/changes/changes.xml                         |  7 ++-
 .../dbcp2/cpdsadapter/DriverAdapterCPDS.java    | 55 ++++++++++++++------
 .../cpdsadapter/TestDriverAdapterCPDS.java      |  4 +-
 3 files changed, 47 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/1d049600/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index b6a1da5..76b1a36 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -83,10 +83,13 @@ The <action> type attribute can be add,update,fix,remove.
         Deprecate use of PStmtKeyCPDS in favor of PStmtKey.
       </action>
       <action dev="ggregory" type="update" issue="DBCP-498" due-to="Gary Gregory">
-        org.apache.commons.dbcp2.DataSourceConnectionFactory should use a char[] instead of a String to save passwords.
+        org.apache.commons.dbcp2.DataSourceConnectionFactory should use a char[] instead of a String to store passwords.
       </action>
       <action dev="ggregory" type="update" issue="DBCP-499" due-to="Gary Gregory">
-        org.apache.commons.dbcp2.managed.DataSourceXAConnectionFactory should use a char[] instead of a String to save passwords.
+        org.apache.commons.dbcp2.managed.DataSourceXAConnectionFactory should use a char[] instead of a String to store passwords.
+      </action>
+      <action dev="ggregory" type="update" issue="DBCP-500" due-to="Gary Gregory">
+        org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS should use a char[] instead of a String to store passwords.
       </action>
     </release>
     <release version="2.3.0" date="2018-05-12" description="This is a minor release, including bug fixes and enhancements.">

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/1d049600/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java
index a955411..58a0749 100644
--- a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java
+++ b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/DriverAdapterCPDS.java
@@ -39,6 +39,7 @@ import javax.sql.PooledConnection;
 
 import org.apache.commons.dbcp2.DelegatingPreparedStatement;
 import org.apache.commons.dbcp2.PStmtKey;
+import org.apache.commons.dbcp2.Utils;
 import org.apache.commons.pool2.KeyedObjectPool;
 import org.apache.commons.pool2.impl.BaseObjectPoolConfig;
 import org.apache.commons.pool2.impl.GenericKeyedObjectPool;
@@ -108,14 +109,14 @@ public class DriverAdapterCPDS
     /** Description */
     private String description;
     
-    /** Password */
-    private String password;
-    
     /** Url name */
     private String url;
     
     /** User name */
     private String userName;
+
+    /** User password */
+    private char[] userPassword;
     
     /** Driver class name */
     private String driver;
@@ -168,13 +169,13 @@ public class DriverAdapterCPDS
     /**
      * Attempt to establish a database connection.
      * 
-     * @param userName
+     * @param pooledUserName
      *            name to be used for the connection
-     * @param pass
+     * @param pooledUserPassword
      *            password to be used fur the connection
      */
     @Override
-    public PooledConnection getPooledConnection(final String userName, final String pass)
+    public PooledConnection getPooledConnection(final String pooledUserName, final String pooledUserPassword)
             throws SQLException {
         getConnectionCalled = true;
         PooledConnectionImpl pci = null;
@@ -182,13 +183,13 @@ public class DriverAdapterCPDS
         // exception upon first invocation.
         try {
             if (connectionProperties != null) {
-                update(connectionProperties, KEY_USER, userName);
-                update(connectionProperties, KEY_PASSWORD, pass);
+                update(connectionProperties, KEY_USER, pooledUserName);
+                update(connectionProperties, KEY_PASSWORD, pooledUserPassword);
                 pci = new PooledConnectionImpl(DriverManager.getConnection(
                         getUrl(), connectionProperties));
             } else {
                 pci = new PooledConnectionImpl(DriverManager.getConnection(
-                        getUrl(), userName, pass));
+                        getUrl(), pooledUserName, pooledUserPassword));
             }
             pci.setAccessToUnderlyingConnectionAllowed(isAccessToUnderlyingConnectionAllowed());
         } catch (final ClassCircularityError e) {
@@ -197,7 +198,7 @@ public class DriverAdapterCPDS
                         getUrl(), connectionProperties));
             } else {
                 pci = new PooledConnectionImpl(DriverManager.getConnection(
-                        getUrl(), userName, pass));
+                        getUrl(), pooledUserName, pooledUserPassword));
             }
             pci.setAccessToUnderlyingConnectionAllowed(isAccessToUnderlyingConnectionAllowed());
         }
@@ -437,23 +438,47 @@ public class DriverAdapterCPDS
      * Gets the value of password for the default user.
      * 
      * @return value of password.
+     * @since 2.4.0
+     */
+    public char[] getPasswordCharArray() {
+        return userPassword;
+    }
+
+    /**
+     * Gets the value of password for the default user.
+     * 
+     * @return value of password.
      */
     public String getPassword() {
-        return password;
+        return Utils.toString(userPassword);
     }
 
     /**
      * Sets the value of password for the default user.
      * 
-     * @param v
+     * @param userPassword
+     *            Value to assign to password.
+     * @throws IllegalStateException
+     *             if {@link #getPooledConnection()} has been called
+     */
+    public void setPassword(final char[] userPassword) {
+        assertInitializationAllowed();
+        this.userPassword = userPassword;
+        update(connectionProperties, KEY_PASSWORD, Utils.toString(userPassword));
+    }
+
+    /**
+     * Sets the value of password for the default user.
+     * 
+     * @param userPassword
      *            Value to assign to password.
      * @throws IllegalStateException
      *             if {@link #getPooledConnection()} has been called
      */
-    public void setPassword(final String v) {
+    public void setPassword(final String userPassword) {
         assertInitializationAllowed();
-        this.password = v;
-        update(connectionProperties, KEY_PASSWORD, v);
+        this.userPassword = Utils.toCharArray(userPassword);
+        update(connectionProperties, KEY_PASSWORD, userPassword);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/1d049600/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java b/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java
index a641214..98204b8 100644
--- a/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java
+++ b/src/test/java/org/apache/commons/dbcp2/cpdsadapter/TestDriverAdapterCPDS.java
@@ -188,7 +188,7 @@ public class TestDriverAdapterCPDS {
     public void testSetPasswordNull() throws Exception {
         pcds.setPassword("Secret");
         assertEquals("Secret", pcds.getPassword());
-        pcds.setPassword(null);
+        pcds.setPassword((char[]) null);
         assertEquals(null, pcds.getPassword());
     }
 
@@ -197,7 +197,7 @@ public class TestDriverAdapterCPDS {
         pcds.setConnectionProperties(new Properties());
         pcds.setPassword("Secret");
         assertEquals("Secret", pcds.getPassword());
-        pcds.setPassword(null);
+        pcds.setPassword((char[]) null);
         assertEquals(null, pcds.getPassword());
     }