14c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/* 24c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 34c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * or more contributor license agreements. See the NOTICE file 44c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed with this work for additional information 54c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * regarding copyright ownership. The ASF licenses this file 64c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 74c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * you may not use this file except in compliance with the License. 84c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * You may obtain a copy of the License at 94c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Unless required by applicable law or agreed to in writing, software 134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * See the License for the specific language governing permissions and 164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * limitations under the License. 174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/* 194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * $Id: SecuritySupport12.java 468655 2006-10-28 07:12:06Z minchau $ 204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpackage org.apache.xpath.functions; 234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport java.io.File; 254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport java.io.FileInputStream; 264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport java.io.FileNotFoundException; 274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport java.io.InputStream; 284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport java.security.AccessController; 304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport java.security.PrivilegedAction; 314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport java.security.PrivilegedActionException; 324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport java.security.PrivilegedExceptionAction; 334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonimport java.util.Properties; 354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * This class is duplicated for each Xalan-Java subpackage so keep it in sync. 384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * It is package private and therefore is not exposed as part of the Xalan-Java 394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * API. 404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Security related methods that only work on J2SE 1.2 and newer. 424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonclass SecuritySupport12 extends SecuritySupport { 444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson ClassLoader getContextClassLoader() { 464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (ClassLoader) 474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public Object run() { 494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson ClassLoader cl = null; 504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson try { 514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson cl = Thread.currentThread().getContextClassLoader(); 524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } catch (SecurityException ex) { } 534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return cl; 544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson }); 564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson ClassLoader getSystemClassLoader() { 594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (ClassLoader) 604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public Object run() { 624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson ClassLoader cl = null; 634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson try { 644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson cl = ClassLoader.getSystemClassLoader(); 654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } catch (SecurityException ex) {} 664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return cl; 674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson }); 694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson ClassLoader getParentClassLoader(final ClassLoader cl) { 724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (ClassLoader) 734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public Object run() { 754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson ClassLoader parent = null; 764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson try { 774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson parent = cl.getParent(); 784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } catch (SecurityException ex) {} 794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // eliminate loops in case of the boot 814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson // ClassLoader returning itself as a parent 824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (parent == cl) ? null : parent; 834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson }); 854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson String getSystemProperty(final String propName) { 884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (String) 894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public Object run() { 914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return System.getProperty(propName); 924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson }); 944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson FileInputStream getFileInputStream(final File file) 974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson throws FileNotFoundException 984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson try { 1004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (FileInputStream) 1014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson AccessController.doPrivileged(new PrivilegedExceptionAction() { 1024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public Object run() throws FileNotFoundException { 1034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return new FileInputStream(file); 1044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson }); 1064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } catch (PrivilegedActionException e) { 1074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson throw (FileNotFoundException)e.getException(); 1084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson InputStream getResourceAsStream(final ClassLoader cl, 1124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson final String name) 1134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson { 1144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return (InputStream) 1154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 1164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public Object run() { 1174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson InputStream ris; 1184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson if (cl == null) { 1194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson ris = ClassLoader.getSystemResourceAsStream(name); 1204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } else { 1214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson ris = cl.getResourceAsStream(name); 1224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return ris; 1244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson }); 1264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson boolean getFileExists(final File f) { 1294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return ((Boolean) 1304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 1314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public Object run() { 1324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return new Boolean(f.exists()); 1334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson })).booleanValue(); 1354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson long getLastModified(final File f) { 1384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return ((Long) 1394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 1404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public Object run() { 1414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson return new Long(f.lastModified()); 1424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson })).longValue(); 1444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson } 1454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 147