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$ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xml.utils; 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.util.Properties; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class is duplicated for each Xalan-Java subpackage so keep it in sync. 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * It is package private and therefore is not exposed as part of the Xalan-Java 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * API. 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Base class with security related methods that work on JDK 1.1. 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonclass SecuritySupport { 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Make this of type Object so that the verifier won't try to 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * prove its type, thus possibly trying to load the SecuritySupport12 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * class. 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private static final Object securitySupport; 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static { 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson SecuritySupport ss = null; 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Class c = Class.forName("java.security.AccessController"); 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // if that worked, we're on 1.2. 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // don't reference the class explicitly so it doesn't 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // get dragged in accidentally. 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson c = Class.forName("javax.mail.SecuritySupport12"); 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Constructor cons = c.getConstructor(new Class[] { }); 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ss = (SecuritySupport)cons.newInstance(new Object[] { }); 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unfortunately, we can't load the class using reflection 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * because the class is package private. And the class has 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to be package private so the APIs aren't exposed to other 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * code that could use them to circumvent security. Thus, 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * we accept the risk that the direct reference might fail 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * on some JDK 1.1 JVMs, even though we would never execute 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * this code in such a case. Sigh... 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ss = new SecuritySupport12(); 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (Exception ex) { 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // ignore it 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } finally { 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (ss == null) 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ss = new SecuritySupport(); 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson securitySupport = ss; 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return an appropriate instance of this class, depending on whether 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * we're on a JDK 1.1 or J2SE 1.2 (or later) system. 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static SecuritySupport getInstance() { 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return (SecuritySupport)securitySupport; 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader getContextClassLoader() { 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader getSystemClassLoader() { 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ClassLoader getParentClassLoader(ClassLoader cl) { 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String getSystemProperty(String propName) { 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return System.getProperty(propName); 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson FileInputStream getFileInputStream(File file) 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws FileNotFoundException 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new FileInputStream(file); 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson InputStream getResourceAsStream(ClassLoader cl, String name) { 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson InputStream ris; 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (cl == null) { 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ris = ClassLoader.getSystemResourceAsStream(name); 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ris = cl.getResourceAsStream(name); 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return ris; 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean getFileExists(File f) { 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return f.exists(); 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson long getLastModified(File f) { 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return f.lastModified(); 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 126