Author: markt Date: Fri Feb 7 12:26:29 2014 New Revision: 1565630 URL: http://svn.apache.org/r1565630 Log: Start work on DBCP-177 Enable getConnection() to work under a security manager
Modified: commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/Utils.java Modified: commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java?rev=1565630&r1=1565629&r2=1565630&view=diff ============================================================================== --- commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java (original) +++ commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java Fri Feb 7 12:26:29 2014 @@ -27,6 +27,9 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.Collections; import java.util.logging.Logger; +import java.security.AccessController; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; @@ -1341,7 +1344,21 @@ public class BasicDataSource */ @Override public Connection getConnection() throws SQLException { - return createDataSource().getConnection(); + if (Utils.IS_SECURITY_ENABLED) { + PrivilegedExceptionAction<Connection> action = new PaGetConnection(); + try { + return AccessController.doPrivileged(action); + } catch (PrivilegedActionException e) { + Throwable cause = e.getCause(); + if (cause instanceof SQLException) { + throw (SQLException) cause; + } else { + throw new SQLException(e); + } + } + } else { + return createDataSource().getConnection(); + } } @@ -2197,4 +2214,12 @@ public class BasicDataSource protected ObjectName getRegisteredJmxName() { return registeredJmxName; } + + private class PaGetConnection implements PrivilegedExceptionAction<Connection> { + + @Override + public Connection run() throws SQLException { + return createDataSource().getConnection(); + } + } } Modified: commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/Utils.java URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/Utils.java?rev=1565630&r1=1565629&r2=1565630&view=diff ============================================================================== --- commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/Utils.java (original) +++ commons/proper/dbcp/trunk/src/main/java/org/apache/commons/dbcp2/Utils.java Fri Feb 7 12:26:29 2014 @@ -32,6 +32,10 @@ public class Utils { private static final ResourceBundle messages = ResourceBundle.getBundle( Utils.class.getPackage().getName() + ".LocalStrings"); + public static final boolean IS_SECURITY_ENABLED = + (System.getSecurityManager() != null); + + private Utils() { // not instantiable }