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