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 468654 2006-10-28 07:09:23Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xml.serializer; 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.File; 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.FileInputStream; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.FileNotFoundException; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.InputStream; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.security.AccessController; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.security.PrivilegedAction; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.security.PrivilegedActionException; 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.security.PrivilegedExceptionAction; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class is duplicated for each Xalan-Java subpackage so keep it in sync. 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * It is package private and therefore is not exposed as part of the Xalan-Java 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * API. 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Security related methods that only work on J2SE 1.2 and newer. 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonclass SecuritySupport12 extends SecuritySupport { 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader getContextClassLoader() { 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (ClassLoader) 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader cl = null; 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson cl = Thread.currentThread().getContextClassLoader(); 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (SecurityException ex) { } 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return cl; 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader getSystemClassLoader() { 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (ClassLoader) 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader cl = null; 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson cl = ClassLoader.getSystemClassLoader(); 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (SecurityException ex) {} 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return cl; 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader getParentClassLoader(final ClassLoader cl) { 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (ClassLoader) 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader parent = null; 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson parent = cl.getParent(); 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (SecurityException ex) {} 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // eliminate loops in case of the boot 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // ClassLoader returning itself as a parent 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (parent == cl) ? null : parent; 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String getSystemProperty(final String propName) { 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (String) 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return System.getProperty(propName); 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson FileInputStream getFileInputStream(final File file) 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws FileNotFoundException 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (FileInputStream) 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedExceptionAction() { 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() throws FileNotFoundException { 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new FileInputStream(file); 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (PrivilegedActionException e) { 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw (FileNotFoundException)e.getException(); 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson InputStream getResourceAsStream(final ClassLoader cl, 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String name) 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (InputStream) 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson InputStream ris; 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (cl == null) { 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ris = ClassLoader.getSystemResourceAsStream(name); 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ris = cl.getResourceAsStream(name); 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return ris; 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean getFileExists(final File f) { 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return ((Boolean) 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new Boolean(f.exists()); 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson })).booleanValue(); 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson long getLastModified(final File f) { 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return ((Long) 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AccessController.doPrivileged(new PrivilegedAction() { 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object run() { 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new Long(f.lastModified()); 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson })).longValue(); 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 144