From af04f40bb1356f467641a597c4e514bc51701d11 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 8 Aug 2013 09:32:47 +0800 Subject: [PATCH] bug fixed for SAE security error --- .../alibaba/druid/pool/DruidDataSource.java | 27 +++++++-- .../com/alibaba/druid/proxy/DruidDriver.java | 10 +++- .../bvt/sql/oracle/OracleDeleteTest_1.java | 59 +++++++++++++++++++ 3 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDeleteTest_1.java diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index ed1588b2cb..c331771932 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -18,6 +18,8 @@ package com.alibaba.druid.pool; import static com.alibaba.druid.util.IOUtils.getBoolean; import java.io.Closeable; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; @@ -1283,16 +1285,31 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat public void registerMbean() { if (!mbeanRegistered) { - ObjectName objectName = DruidDataSourceStatManager.addDataSource(this, this.name); - this.setObjectName(objectName); - this.mbeanRegistered = true; + AccessController.doPrivileged(new PrivilegedAction() { + + @Override + public Object run() { + ObjectName objectName = DruidDataSourceStatManager.addDataSource(DruidDataSource.this, + DruidDataSource.this.name); + DruidDataSource.this.setObjectName(objectName); + DruidDataSource.this.mbeanRegistered = true; + return null; + } + }); } } public void unregisterMbean() { if (mbeanRegistered) { - DruidDataSourceStatManager.removeDataSource(this); - mbeanRegistered = false; + AccessController.doPrivileged(new PrivilegedAction() { + + @Override + public Object run() { + DruidDataSourceStatManager.removeDataSource(DruidDataSource.this); + DruidDataSource.this.mbeanRegistered = false; + return null; + } + }); } } diff --git a/src/main/java/com/alibaba/druid/proxy/DruidDriver.java b/src/main/java/com/alibaba/druid/proxy/DruidDriver.java index f0b79a47af..314abebb29 100644 --- a/src/main/java/com/alibaba/druid/proxy/DruidDriver.java +++ b/src/main/java/com/alibaba/druid/proxy/DruidDriver.java @@ -16,6 +16,8 @@ package com.alibaba.druid.proxy; import java.lang.management.ManagementFactory; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; @@ -76,7 +78,13 @@ public class DruidDriver implements Driver, DruidDriverMBean { private final static String MBEAN_NAME = "com.alibaba.druid:type=DruidDriver"; static { - registerDriver(instance); + AccessController.doPrivileged(new PrivilegedAction() { + @Override + public Object run() { + registerDriver(instance); + return null; + } + }); } public static boolean registerDriver(Driver driver) { diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDeleteTest_1.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDeleteTest_1.java new file mode 100644 index 0000000000..72ebaf750f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDeleteTest_1.java @@ -0,0 +1,59 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.sql.oracle; + +import java.util.List; + +import org.junit.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class OracleDeleteTest_1 extends OracleTest { + + public void test_0() throws Exception { + String sql = "delete fromm xx"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + + Assert.assertEquals(1, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getColumns().size()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("fromm"))); + // Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees"))); + // +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("fromm", "guid"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary"))); + // Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "commission_pct"))); + } + +}