[ 
https://issues.apache.org/jira/browse/DBCP-245?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Phil Steitz resolved DBCP-245.
------------------------------

    Resolution: Fixed

Slightly modified version of the suggested fix implemented in r616142.
Thanks!

> SharedPoolDataSource saves wrong password forever
> -------------------------------------------------
>
>                 Key: DBCP-245
>                 URL: https://issues.apache.org/jira/browse/DBCP-245
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: 1.1, 1.2, 1.2.1, 1.2.2
>         Environment: Use of SharedPoolDataSource see sample code
>       if (privSharedDS == null)
> {
>       privConPoolDS = new PGConnectionPoolDataSource();
>       privConPoolDS.setServerName(privServerName);
>       privConPoolDS.setDatabaseName(privServerDB);
>       privConPoolDS.setUser(privUser);
>       privConPoolDS.setPassword(privPassword);
>       // --------------------------------------
>       // dbcp caching via SharedPoolDataSource
>       // --------------------------------------
>       privSharedDS = new SharedPoolDataSource();
>       privSharedDS.setConnectionPoolDataSource(privConPoolDS);
>               privSharedDS.setMaxActive(10); // 0 = no limit
>       privSharedDS.setMaxIdle(10);
>       privSharedDS.setMinEvictableIdleTimeMillis(1000);
>       privSharedDS.setMaxWait(1000); // -1 = no limit
>       privSharedDS.setTimeBetweenEvictionRunsMillis(1000);
>       privSharedDS.setTestWhileIdle(true);
> }
> // --------------------------------------
> // dbcp caching via SharedPoolDataSource
> // --------------------------------------
> tmpCon = privSharedDS.getConnection(privUser, privPassword);
>            Reporter: Michael Drechsel
>            Priority: Minor
>             Fix For: 1.3
>
>
> The SharedPoolDataSource saves wrong password forever
> 1. Get a connection for user1 (use username of user1 and password of user1) 
> ---> connection ok
> 2. Get a connection for user2 (use username of user2 and a wrong password) 
> --> connection failed
> 3. Get a connection for user2 (use username of user2 and password of user2) 
> --> connection will be failed too because the wrong password is stored in the 
> usersKey map.
> Bugfix
> ===================================================================
>    protected synchronized PooledConnectionAndInfo 
>         getPooledConnectionAndInfo(String username, String password)
>         throws SQLException {
>         if (pool == null) {
>             try {
>                 registerPool(username, password);
>             } catch (NamingException e) {
>                 throw new SQLNestedException("RegisterPool failed", e);
>             }
>         }
>         PooledConnectionAndInfo info = null;
>         UserPassKey userPassKey = null;
>         try {
>               userPassKey = getUserPassKey(username, password);
>             info = (PooledConnectionAndInfo) pool
>                 .borrowObject(userPassKey);
>         }
>         catch (Exception e) {
>               
>               if (userKeys != null && userKeys.containsKey(username)) {
>                       userKeys.remove(username);
>               }
>               
>             throw new SQLNestedException(
>                 "Could not retrieve connection info from pool", e);
>         }
>         return info;
>     }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to