11591693c7b415e9869157c711fe11263c95d74eDavid Li/* 21591693c7b415e9869157c711fe11263c95d74eDavid Li * Licensed to the Apache Software Foundation (ASF) under one 31591693c7b415e9869157c711fe11263c95d74eDavid Li * or more contributor license agreements. See the NOTICE file 41591693c7b415e9869157c711fe11263c95d74eDavid Li * distributed with this work for additional information 51591693c7b415e9869157c711fe11263c95d74eDavid Li * regarding copyright ownership. The ASF licenses this file 61591693c7b415e9869157c711fe11263c95d74eDavid Li * to you under the Apache License, Version 2.0 (the "License"); 71591693c7b415e9869157c711fe11263c95d74eDavid Li * you may not use this file except in compliance with the License. 81591693c7b415e9869157c711fe11263c95d74eDavid Li * You may obtain a copy of the License at 91591693c7b415e9869157c711fe11263c95d74eDavid Li * 101591693c7b415e9869157c711fe11263c95d74eDavid Li * http://www.apache.org/licenses/LICENSE-2.0 111591693c7b415e9869157c711fe11263c95d74eDavid Li * 121591693c7b415e9869157c711fe11263c95d74eDavid Li * Unless required by applicable law or agreed to in writing, software 131591693c7b415e9869157c711fe11263c95d74eDavid Li * distributed under the License is distributed on an "AS IS" BASIS, 141591693c7b415e9869157c711fe11263c95d74eDavid Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 151591693c7b415e9869157c711fe11263c95d74eDavid Li * See the License for the specific language governing permissions and 161591693c7b415e9869157c711fe11263c95d74eDavid Li * limitations under the License. 171591693c7b415e9869157c711fe11263c95d74eDavid Li */ 181591693c7b415e9869157c711fe11263c95d74eDavid Li/* 191591693c7b415e9869157c711fe11263c95d74eDavid Li * $Id$ 201591693c7b415e9869157c711fe11263c95d74eDavid Li */ 211591693c7b415e9869157c711fe11263c95d74eDavid Li 221591693c7b415e9869157c711fe11263c95d74eDavid Lipackage org.apache.xml.utils; 231591693c7b415e9869157c711fe11263c95d74eDavid Li 241591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.io.File; 251591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.io.FileInputStream; 261591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.io.FileNotFoundException; 271591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.io.InputStream; 281591693c7b415e9869157c711fe11263c95d74eDavid Li 291591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.security.AccessController; 301591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.security.PrivilegedAction; 311591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.security.PrivilegedActionException; 321591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.security.PrivilegedExceptionAction; 331591693c7b415e9869157c711fe11263c95d74eDavid Li 341591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.util.Properties; 351591693c7b415e9869157c711fe11263c95d74eDavid Li 361591693c7b415e9869157c711fe11263c95d74eDavid Li/** 371591693c7b415e9869157c711fe11263c95d74eDavid Li * This class is duplicated for each Xalan-Java subpackage so keep it in sync. 381591693c7b415e9869157c711fe11263c95d74eDavid Li * It is package private and therefore is not exposed as part of the Xalan-Java 391591693c7b415e9869157c711fe11263c95d74eDavid Li * API. 401591693c7b415e9869157c711fe11263c95d74eDavid Li * 411591693c7b415e9869157c711fe11263c95d74eDavid Li * Security related methods that only work on J2SE 1.2 and newer. 421591693c7b415e9869157c711fe11263c95d74eDavid Li */ 431591693c7b415e9869157c711fe11263c95d74eDavid Liclass SecuritySupport12 extends SecuritySupport { 441591693c7b415e9869157c711fe11263c95d74eDavid Li 451591693c7b415e9869157c711fe11263c95d74eDavid Li ClassLoader getContextClassLoader() { 461591693c7b415e9869157c711fe11263c95d74eDavid Li return (ClassLoader) 471591693c7b415e9869157c711fe11263c95d74eDavid Li AccessController.doPrivileged(new PrivilegedAction() { 481591693c7b415e9869157c711fe11263c95d74eDavid Li public Object run() { 491591693c7b415e9869157c711fe11263c95d74eDavid Li ClassLoader cl = null; 501591693c7b415e9869157c711fe11263c95d74eDavid Li try { 511591693c7b415e9869157c711fe11263c95d74eDavid Li cl = Thread.currentThread().getContextClassLoader(); 52d50d9a90a0df4d706421850e17c0fbd85bf710eeDavid Li } catch (SecurityException ex) { } 531591693c7b415e9869157c711fe11263c95d74eDavid Li return cl; 541591693c7b415e9869157c711fe11263c95d74eDavid Li } 551591693c7b415e9869157c711fe11263c95d74eDavid Li }); 561591693c7b415e9869157c711fe11263c95d74eDavid Li } 57d50d9a90a0df4d706421850e17c0fbd85bf710eeDavid Li 581591693c7b415e9869157c711fe11263c95d74eDavid Li ClassLoader getSystemClassLoader() { 591591693c7b415e9869157c711fe11263c95d74eDavid Li return (ClassLoader) 601591693c7b415e9869157c711fe11263c95d74eDavid Li AccessController.doPrivileged(new PrivilegedAction() { 611591693c7b415e9869157c711fe11263c95d74eDavid Li public Object run() { 621591693c7b415e9869157c711fe11263c95d74eDavid Li ClassLoader cl = null; 631591693c7b415e9869157c711fe11263c95d74eDavid Li try { 641591693c7b415e9869157c711fe11263c95d74eDavid Li cl = ClassLoader.getSystemClassLoader(); 651591693c7b415e9869157c711fe11263c95d74eDavid Li } catch (SecurityException ex) {} 661591693c7b415e9869157c711fe11263c95d74eDavid Li return cl; 671591693c7b415e9869157c711fe11263c95d74eDavid Li } 681591693c7b415e9869157c711fe11263c95d74eDavid Li }); 691591693c7b415e9869157c711fe11263c95d74eDavid Li } 701591693c7b415e9869157c711fe11263c95d74eDavid Li 711591693c7b415e9869157c711fe11263c95d74eDavid Li ClassLoader getParentClassLoader(final ClassLoader cl) { 721591693c7b415e9869157c711fe11263c95d74eDavid Li return (ClassLoader) 731591693c7b415e9869157c711fe11263c95d74eDavid Li AccessController.doPrivileged(new PrivilegedAction() { 741591693c7b415e9869157c711fe11263c95d74eDavid Li public Object run() { 751591693c7b415e9869157c711fe11263c95d74eDavid Li ClassLoader parent = null; 761591693c7b415e9869157c711fe11263c95d74eDavid Li try { 771591693c7b415e9869157c711fe11263c95d74eDavid Li parent = cl.getParent(); 781591693c7b415e9869157c711fe11263c95d74eDavid Li } catch (SecurityException ex) {} 791591693c7b415e9869157c711fe11263c95d74eDavid Li 801591693c7b415e9869157c711fe11263c95d74eDavid Li // eliminate loops in case of the boot 811591693c7b415e9869157c711fe11263c95d74eDavid Li // ClassLoader returning itself as a parent 821591693c7b415e9869157c711fe11263c95d74eDavid Li return (parent == cl) ? null : parent; 831591693c7b415e9869157c711fe11263c95d74eDavid Li } 841591693c7b415e9869157c711fe11263c95d74eDavid Li }); 851591693c7b415e9869157c711fe11263c95d74eDavid Li } 861591693c7b415e9869157c711fe11263c95d74eDavid Li 871591693c7b415e9869157c711fe11263c95d74eDavid Li String getSystemProperty(final String propName) { 881591693c7b415e9869157c711fe11263c95d74eDavid Li return (String) 891591693c7b415e9869157c711fe11263c95d74eDavid Li AccessController.doPrivileged(new PrivilegedAction() { 901591693c7b415e9869157c711fe11263c95d74eDavid Li public Object run() { 911591693c7b415e9869157c711fe11263c95d74eDavid Li return System.getProperty(propName); 921591693c7b415e9869157c711fe11263c95d74eDavid Li } 931591693c7b415e9869157c711fe11263c95d74eDavid Li }); 941591693c7b415e9869157c711fe11263c95d74eDavid Li } 951591693c7b415e9869157c711fe11263c95d74eDavid Li 961591693c7b415e9869157c711fe11263c95d74eDavid Li FileInputStream getFileInputStream(final File file) 971591693c7b415e9869157c711fe11263c95d74eDavid Li throws FileNotFoundException 981591693c7b415e9869157c711fe11263c95d74eDavid Li { 991591693c7b415e9869157c711fe11263c95d74eDavid Li try { 1001591693c7b415e9869157c711fe11263c95d74eDavid Li return (FileInputStream) 1011591693c7b415e9869157c711fe11263c95d74eDavid Li AccessController.doPrivileged(new PrivilegedExceptionAction() { 1021591693c7b415e9869157c711fe11263c95d74eDavid Li public Object run() throws FileNotFoundException { 1031591693c7b415e9869157c711fe11263c95d74eDavid Li return new FileInputStream(file); 1041591693c7b415e9869157c711fe11263c95d74eDavid Li } 1051591693c7b415e9869157c711fe11263c95d74eDavid Li }); 1061591693c7b415e9869157c711fe11263c95d74eDavid Li } catch (PrivilegedActionException e) { 1071591693c7b415e9869157c711fe11263c95d74eDavid Li throw (FileNotFoundException)e.getException(); 1081591693c7b415e9869157c711fe11263c95d74eDavid Li } 1091591693c7b415e9869157c711fe11263c95d74eDavid Li } 1101591693c7b415e9869157c711fe11263c95d74eDavid Li 1111591693c7b415e9869157c711fe11263c95d74eDavid Li InputStream getResourceAsStream(final ClassLoader cl, 1121591693c7b415e9869157c711fe11263c95d74eDavid Li final String name) 1131591693c7b415e9869157c711fe11263c95d74eDavid Li { 1141591693c7b415e9869157c711fe11263c95d74eDavid Li return (InputStream) 1151591693c7b415e9869157c711fe11263c95d74eDavid Li AccessController.doPrivileged(new PrivilegedAction() { 1161591693c7b415e9869157c711fe11263c95d74eDavid Li public Object run() { 1171591693c7b415e9869157c711fe11263c95d74eDavid Li InputStream ris; 1181591693c7b415e9869157c711fe11263c95d74eDavid Li if (cl == null) { 1191591693c7b415e9869157c711fe11263c95d74eDavid Li ris = ClassLoader.getSystemResourceAsStream(name); 1201591693c7b415e9869157c711fe11263c95d74eDavid Li } else { 1211591693c7b415e9869157c711fe11263c95d74eDavid Li ris = cl.getResourceAsStream(name); 1221591693c7b415e9869157c711fe11263c95d74eDavid Li } 1231591693c7b415e9869157c711fe11263c95d74eDavid Li return ris; 1241591693c7b415e9869157c711fe11263c95d74eDavid Li } 1251591693c7b415e9869157c711fe11263c95d74eDavid Li }); 1261591693c7b415e9869157c711fe11263c95d74eDavid Li } 1271591693c7b415e9869157c711fe11263c95d74eDavid Li 1281591693c7b415e9869157c711fe11263c95d74eDavid Li boolean getFileExists(final File f) { 1291591693c7b415e9869157c711fe11263c95d74eDavid Li return ((Boolean) 1301591693c7b415e9869157c711fe11263c95d74eDavid Li AccessController.doPrivileged(new PrivilegedAction() { 1311591693c7b415e9869157c711fe11263c95d74eDavid Li public Object run() { 1321591693c7b415e9869157c711fe11263c95d74eDavid Li return new Boolean(f.exists()); 1331591693c7b415e9869157c711fe11263c95d74eDavid Li } 1341591693c7b415e9869157c711fe11263c95d74eDavid Li })).booleanValue(); 1351591693c7b415e9869157c711fe11263c95d74eDavid Li } 1361591693c7b415e9869157c711fe11263c95d74eDavid Li 1371591693c7b415e9869157c711fe11263c95d74eDavid Li long getLastModified(final File f) { 1381591693c7b415e9869157c711fe11263c95d74eDavid Li return ((Long) 1391591693c7b415e9869157c711fe11263c95d74eDavid Li AccessController.doPrivileged(new PrivilegedAction() { 1401591693c7b415e9869157c711fe11263c95d74eDavid Li public Object run() { 1411591693c7b415e9869157c711fe11263c95d74eDavid Li return new Long(f.lastModified()); 1421591693c7b415e9869157c711fe11263c95d74eDavid Li } 1431591693c7b415e9869157c711fe11263c95d74eDavid Li })).longValue(); 1441591693c7b415e9869157c711fe11263c95d74eDavid Li } 1451591693c7b415e9869157c711fe11263c95d74eDavid Li 1461591693c7b415e9869157c711fe11263c95d74eDavid Li} 1471591693c7b415e9869157c711fe11263c95d74eDavid Li