19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file 49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information 59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file 69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License. 89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at 99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software 139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and 169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License. 179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: SecuritySupport12.java 468655 2006-10-28 07:12:06Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xpath.functions; 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.File; 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.FileInputStream; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.FileNotFoundException; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.InputStream; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.security.AccessController; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.security.PrivilegedAction; 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.security.PrivilegedActionException; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.security.PrivilegedExceptionAction; 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Properties; 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class is duplicated for each Xalan-Java subpackage so keep it in sync. 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * It is package private and therefore is not exposed as part of the Xalan-Java 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * API. 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Security related methods that only work on J2SE 1.2 and newer. 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonclass SecuritySupport12 extends SecuritySupport { 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader getContextClassLoader() { 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (ClassLoader) 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader cl = null; 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson cl = Thread.currentThread().getContextClassLoader(); 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (SecurityException ex) { } 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return cl; 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader getSystemClassLoader() { 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (ClassLoader) 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader cl = null; 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson cl = ClassLoader.getSystemClassLoader(); 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (SecurityException ex) {} 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return cl; 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader getParentClassLoader(final ClassLoader cl) { 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (ClassLoader) 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader parent = null; 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson parent = cl.getParent(); 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (SecurityException ex) {} 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // eliminate loops in case of the boot 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // ClassLoader returning itself as a parent 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (parent == cl) ? null : parent; 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String getSystemProperty(final String propName) { 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (String) 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return System.getProperty(propName); 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson FileInputStream getFileInputStream(final File file) 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws FileNotFoundException 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (FileInputStream) 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedExceptionAction() { 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() throws FileNotFoundException { 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new FileInputStream(file); 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (PrivilegedActionException e) { 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw (FileNotFoundException)e.getException(); 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson InputStream getResourceAsStream(final ClassLoader cl, 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String name) 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (InputStream) 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson InputStream ris; 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (cl == null) { 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ris = ClassLoader.getSystemResourceAsStream(name); 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ris = cl.getResourceAsStream(name); 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return ris; 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean getFileExists(final File f) { 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return ((Boolean) 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new Boolean(f.exists()); 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson })).booleanValue(); 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson long getLastModified(final File f) { 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return ((Long) 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new Long(f.lastModified()); 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson })).longValue(); 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 147