001: /*
002:
003: Derby - Class org.apache.derbyTesting.functionTests.tests.derbynet.checkSecMgr
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to You under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derbyTesting.functionTests.tests.derbynet;
023:
024: import java.sql.CallableStatement;
025: import java.sql.Connection;
026: import java.sql.DriverManager;
027: import java.sql.Statement;
028: import java.sql.PreparedStatement;
029: import java.sql.ResultSet;
030: import java.sql.SQLException;
031: import org.apache.derbyTesting.functionTests.util.JDBCTestDisplayUtil;
032: import org.apache.derby.impl.tools.ij.util;
033: import org.apache.derbyTesting.functionTests.util.TestUtil;
034:
035: /**
036: This tests to see if the security manager is running.
037: */
038:
039: public class checkSecMgr {
040:
041: public static void main(String args[]) {
042: try {
043: Connection conn = null;
044: util.getPropertyArg(args);
045: conn = util.startJBMS();
046: // bug 6021
047: // testIllegalDBCreate();
048: testIllegalPropertySet(conn);
049: cleanUp(conn);
050: } catch (Exception e) {
051: e.printStackTrace();
052: }
053: }
054:
055: public static void testIllegalDBCreate() throws Exception {
056: System.out.println("Security Manager Test Starts");
057: // Initialize JavaCommonClient Driver.
058: Class.forName("com.ibm.db2.jcc.DB2Driver");
059: Connection conn = null;
060:
061: // This tries to create a database that is not allowed.
062: // To repro bug 6021 change to some disallowed file system.
063: // There are two problems with this test.
064: // 1) if set to a different file system than the test runs,
065: // (e.g. D:/wombat), a null pointer is thrown.
066: // 2) If just set to a disallowed directory on the same file system.
067: // We seem to be able to create the database.
068: // Ideally this test should attempt to create the database
069: // ../wombat;create=true and get the security exception.
070: String hostName = TestUtil.getHostName();
071: String databaseURL;
072: if (hostName.equals("localhost")) {
073: databaseURL = TestUtil.getJdbcUrlPrefix() + hostName
074: + "/\"D:/wombat;create=true\"";
075: } else {
076: databaseURL = TestUtil.getJdbcUrlPrefix() + hostName
077: + "wombat";
078: }
079: //System.out.println(databaseURL);
080: java.util.Properties properties = new java.util.Properties();
081: properties.put("user", "cs");
082: properties.put("password", "cs");
083:
084: try {
085: conn = DriverManager.getConnection(databaseURL, properties);
086: System.out.println("FAILED: Expected Security Exception");
087: } catch (SQLException se) {
088: System.out.println("Expected Security Exception");
089: JDBCTestDisplayUtil.ShowCommonSQLException(System.out, se);
090: }
091: }
092:
093: /** Try to set a property in a stored procedure for which there is not
094: * adequate permissions in the policy file
095: */
096: public static void testIllegalPropertySet(Connection conn) {
097: System.out.println("testIllegalPropertySet");
098: try {
099: String createproc = "CREATE PROCEDURE setIllegalPropertyProc() DYNAMIC RESULT SETS 0 LANGUAGE JAVA EXTERNAL NAME 'org.apache.derbyTesting.functionTests.tests.derbynet.checkSecMgr.setIllegalPropertyProc' PARAMETER STYLE JAVA";
100: PreparedStatement pstmt = conn.prepareStatement(createproc);
101: pstmt.executeUpdate();
102: CallableStatement cstmt = conn
103: .prepareCall("{call setIllegalPropertyProc()}");
104: System.out
105: .println("execute the procedure setting illegal property");
106: cstmt.executeUpdate();
107: System.out
108: .println("FAILED: Should have gotten security Exception");
109: } catch (SQLException se) {
110: System.out.println("Expected Security Exception");
111: JDBCTestDisplayUtil.ShowCommonSQLException(System.out, se);
112: }
113: }
114:
115: public static void setIllegalPropertyProc() {
116: System.setProperty("notAllowed", "somevalue");
117: }
118:
119: public static void cleanUp(Connection conn) throws SQLException {
120: Statement stmt = conn.createStatement();
121: try {
122: stmt.executeUpdate("drop procedure setIllegalPropertyProc");
123: } catch (SQLException se) {
124: JDBCTestDisplayUtil.ShowCommonSQLException(System.out, se);
125: }
126: }
127:
128: }
|