11591693c7b415e9869157c711fe11263c95d74eDavid Li/*
21591693c7b415e9869157c711fe11263c95d74eDavid Li * Licensed to the Apache Software Foundation (ASF) under one
31591693c7b415e9869157c711fe11263c95d74eDavid Li * or more contributor license agreements. See the NOTICE file
41591693c7b415e9869157c711fe11263c95d74eDavid Li * distributed with this work for additional information
51591693c7b415e9869157c711fe11263c95d74eDavid Li * regarding copyright ownership. The ASF licenses this file
61591693c7b415e9869157c711fe11263c95d74eDavid Li * to you under the Apache License, Version 2.0 (the  "License");
71591693c7b415e9869157c711fe11263c95d74eDavid Li * you may not use this file except in compliance with the License.
81591693c7b415e9869157c711fe11263c95d74eDavid Li * You may obtain a copy of the License at
91591693c7b415e9869157c711fe11263c95d74eDavid Li *
101591693c7b415e9869157c711fe11263c95d74eDavid Li *     http://www.apache.org/licenses/LICENSE-2.0
111591693c7b415e9869157c711fe11263c95d74eDavid Li *
121591693c7b415e9869157c711fe11263c95d74eDavid Li * Unless required by applicable law or agreed to in writing, software
131591693c7b415e9869157c711fe11263c95d74eDavid Li * distributed under the License is distributed on an "AS IS" BASIS,
141591693c7b415e9869157c711fe11263c95d74eDavid Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
151591693c7b415e9869157c711fe11263c95d74eDavid Li * See the License for the specific language governing permissions and
161591693c7b415e9869157c711fe11263c95d74eDavid Li * limitations under the License.
171591693c7b415e9869157c711fe11263c95d74eDavid Li */
181591693c7b415e9869157c711fe11263c95d74eDavid Li/*
191591693c7b415e9869157c711fe11263c95d74eDavid Li * $Id$
201591693c7b415e9869157c711fe11263c95d74eDavid Li */
211591693c7b415e9869157c711fe11263c95d74eDavid Li
221591693c7b415e9869157c711fe11263c95d74eDavid Lipackage org.apache.xml.utils;
231591693c7b415e9869157c711fe11263c95d74eDavid Li
241591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.io.File;
251591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.io.FileInputStream;
261591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.io.FileNotFoundException;
271591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.io.InputStream;
281591693c7b415e9869157c711fe11263c95d74eDavid Li
291591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.security.AccessController;
301591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.security.PrivilegedAction;
311591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.security.PrivilegedActionException;
321591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.security.PrivilegedExceptionAction;
331591693c7b415e9869157c711fe11263c95d74eDavid Li
341591693c7b415e9869157c711fe11263c95d74eDavid Liimport java.util.Properties;
351591693c7b415e9869157c711fe11263c95d74eDavid Li
361591693c7b415e9869157c711fe11263c95d74eDavid Li/**
371591693c7b415e9869157c711fe11263c95d74eDavid Li * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
381591693c7b415e9869157c711fe11263c95d74eDavid Li * It is package private and therefore is not exposed as part of the Xalan-Java
391591693c7b415e9869157c711fe11263c95d74eDavid Li * API.
401591693c7b415e9869157c711fe11263c95d74eDavid Li *
411591693c7b415e9869157c711fe11263c95d74eDavid Li * Security related methods that only work on J2SE 1.2 and newer.
421591693c7b415e9869157c711fe11263c95d74eDavid Li */
431591693c7b415e9869157c711fe11263c95d74eDavid Liclass SecuritySupport12 extends SecuritySupport {
441591693c7b415e9869157c711fe11263c95d74eDavid Li
451591693c7b415e9869157c711fe11263c95d74eDavid Li    ClassLoader getContextClassLoader() {
461591693c7b415e9869157c711fe11263c95d74eDavid Li        return (ClassLoader)
471591693c7b415e9869157c711fe11263c95d74eDavid Li                AccessController.doPrivileged(new PrivilegedAction() {
481591693c7b415e9869157c711fe11263c95d74eDavid Li            public Object run() {
491591693c7b415e9869157c711fe11263c95d74eDavid Li                ClassLoader cl = null;
501591693c7b415e9869157c711fe11263c95d74eDavid Li                try {
511591693c7b415e9869157c711fe11263c95d74eDavid Li                    cl = Thread.currentThread().getContextClassLoader();
52d50d9a90a0df4d706421850e17c0fbd85bf710eeDavid Li                } catch (SecurityException ex) { }
531591693c7b415e9869157c711fe11263c95d74eDavid Li                return cl;
541591693c7b415e9869157c711fe11263c95d74eDavid Li            }
551591693c7b415e9869157c711fe11263c95d74eDavid Li        });
561591693c7b415e9869157c711fe11263c95d74eDavid Li    }
57d50d9a90a0df4d706421850e17c0fbd85bf710eeDavid Li
581591693c7b415e9869157c711fe11263c95d74eDavid Li    ClassLoader getSystemClassLoader() {
591591693c7b415e9869157c711fe11263c95d74eDavid Li        return (ClassLoader)
601591693c7b415e9869157c711fe11263c95d74eDavid Li            AccessController.doPrivileged(new PrivilegedAction() {
611591693c7b415e9869157c711fe11263c95d74eDavid Li                public Object run() {
621591693c7b415e9869157c711fe11263c95d74eDavid Li                    ClassLoader cl = null;
631591693c7b415e9869157c711fe11263c95d74eDavid Li                    try {
641591693c7b415e9869157c711fe11263c95d74eDavid Li                        cl = ClassLoader.getSystemClassLoader();
651591693c7b415e9869157c711fe11263c95d74eDavid Li                    } catch (SecurityException ex) {}
661591693c7b415e9869157c711fe11263c95d74eDavid Li                    return cl;
671591693c7b415e9869157c711fe11263c95d74eDavid Li                }
681591693c7b415e9869157c711fe11263c95d74eDavid Li            });
691591693c7b415e9869157c711fe11263c95d74eDavid Li    }
701591693c7b415e9869157c711fe11263c95d74eDavid Li
711591693c7b415e9869157c711fe11263c95d74eDavid Li    ClassLoader getParentClassLoader(final ClassLoader cl) {
721591693c7b415e9869157c711fe11263c95d74eDavid Li        return (ClassLoader)
731591693c7b415e9869157c711fe11263c95d74eDavid Li            AccessController.doPrivileged(new PrivilegedAction() {
741591693c7b415e9869157c711fe11263c95d74eDavid Li                public Object run() {
751591693c7b415e9869157c711fe11263c95d74eDavid Li                    ClassLoader parent = null;
761591693c7b415e9869157c711fe11263c95d74eDavid Li                    try {
771591693c7b415e9869157c711fe11263c95d74eDavid Li                        parent = cl.getParent();
781591693c7b415e9869157c711fe11263c95d74eDavid Li                    } catch (SecurityException ex) {}
791591693c7b415e9869157c711fe11263c95d74eDavid Li
801591693c7b415e9869157c711fe11263c95d74eDavid Li                    // eliminate loops in case of the boot
811591693c7b415e9869157c711fe11263c95d74eDavid Li                    // ClassLoader returning itself as a parent
821591693c7b415e9869157c711fe11263c95d74eDavid Li                    return (parent == cl) ? null : parent;
831591693c7b415e9869157c711fe11263c95d74eDavid Li                }
841591693c7b415e9869157c711fe11263c95d74eDavid Li            });
851591693c7b415e9869157c711fe11263c95d74eDavid Li    }
861591693c7b415e9869157c711fe11263c95d74eDavid Li
871591693c7b415e9869157c711fe11263c95d74eDavid Li    String getSystemProperty(final String propName) {
881591693c7b415e9869157c711fe11263c95d74eDavid Li        return (String)
891591693c7b415e9869157c711fe11263c95d74eDavid Li            AccessController.doPrivileged(new PrivilegedAction() {
901591693c7b415e9869157c711fe11263c95d74eDavid Li                public Object run() {
911591693c7b415e9869157c711fe11263c95d74eDavid Li                    return System.getProperty(propName);
921591693c7b415e9869157c711fe11263c95d74eDavid Li                }
931591693c7b415e9869157c711fe11263c95d74eDavid Li            });
941591693c7b415e9869157c711fe11263c95d74eDavid Li    }
951591693c7b415e9869157c711fe11263c95d74eDavid Li
961591693c7b415e9869157c711fe11263c95d74eDavid Li    FileInputStream getFileInputStream(final File file)
971591693c7b415e9869157c711fe11263c95d74eDavid Li        throws FileNotFoundException
981591693c7b415e9869157c711fe11263c95d74eDavid Li    {
991591693c7b415e9869157c711fe11263c95d74eDavid Li        try {
1001591693c7b415e9869157c711fe11263c95d74eDavid Li            return (FileInputStream)
1011591693c7b415e9869157c711fe11263c95d74eDavid Li                AccessController.doPrivileged(new PrivilegedExceptionAction() {
1021591693c7b415e9869157c711fe11263c95d74eDavid Li                    public Object run() throws FileNotFoundException {
1031591693c7b415e9869157c711fe11263c95d74eDavid Li                        return new FileInputStream(file);
1041591693c7b415e9869157c711fe11263c95d74eDavid Li                    }
1051591693c7b415e9869157c711fe11263c95d74eDavid Li                });
1061591693c7b415e9869157c711fe11263c95d74eDavid Li        } catch (PrivilegedActionException e) {
1071591693c7b415e9869157c711fe11263c95d74eDavid Li            throw (FileNotFoundException)e.getException();
1081591693c7b415e9869157c711fe11263c95d74eDavid Li        }
1091591693c7b415e9869157c711fe11263c95d74eDavid Li    }
1101591693c7b415e9869157c711fe11263c95d74eDavid Li
1111591693c7b415e9869157c711fe11263c95d74eDavid Li    InputStream getResourceAsStream(final ClassLoader cl,
1121591693c7b415e9869157c711fe11263c95d74eDavid Li                                           final String name)
1131591693c7b415e9869157c711fe11263c95d74eDavid Li    {
1141591693c7b415e9869157c711fe11263c95d74eDavid Li        return (InputStream)
1151591693c7b415e9869157c711fe11263c95d74eDavid Li            AccessController.doPrivileged(new PrivilegedAction() {
1161591693c7b415e9869157c711fe11263c95d74eDavid Li                public Object run() {
1171591693c7b415e9869157c711fe11263c95d74eDavid Li                    InputStream ris;
1181591693c7b415e9869157c711fe11263c95d74eDavid Li                    if (cl == null) {
1191591693c7b415e9869157c711fe11263c95d74eDavid Li                        ris = ClassLoader.getSystemResourceAsStream(name);
1201591693c7b415e9869157c711fe11263c95d74eDavid Li                    } else {
1211591693c7b415e9869157c711fe11263c95d74eDavid Li                        ris = cl.getResourceAsStream(name);
1221591693c7b415e9869157c711fe11263c95d74eDavid Li                    }
1231591693c7b415e9869157c711fe11263c95d74eDavid Li                    return ris;
1241591693c7b415e9869157c711fe11263c95d74eDavid Li                }
1251591693c7b415e9869157c711fe11263c95d74eDavid Li            });
1261591693c7b415e9869157c711fe11263c95d74eDavid Li    }
1271591693c7b415e9869157c711fe11263c95d74eDavid Li
1281591693c7b415e9869157c711fe11263c95d74eDavid Li    boolean getFileExists(final File f) {
1291591693c7b415e9869157c711fe11263c95d74eDavid Li    return ((Boolean)
1301591693c7b415e9869157c711fe11263c95d74eDavid Li            AccessController.doPrivileged(new PrivilegedAction() {
1311591693c7b415e9869157c711fe11263c95d74eDavid Li                public Object run() {
1321591693c7b415e9869157c711fe11263c95d74eDavid Li                    return new Boolean(f.exists());
1331591693c7b415e9869157c711fe11263c95d74eDavid Li                }
1341591693c7b415e9869157c711fe11263c95d74eDavid Li            })).booleanValue();
1351591693c7b415e9869157c711fe11263c95d74eDavid Li    }
1361591693c7b415e9869157c711fe11263c95d74eDavid Li
1371591693c7b415e9869157c711fe11263c95d74eDavid Li    long getLastModified(final File f) {
1381591693c7b415e9869157c711fe11263c95d74eDavid Li    return ((Long)
1391591693c7b415e9869157c711fe11263c95d74eDavid Li            AccessController.doPrivileged(new PrivilegedAction() {
1401591693c7b415e9869157c711fe11263c95d74eDavid Li                public Object run() {
1411591693c7b415e9869157c711fe11263c95d74eDavid Li                    return new Long(f.lastModified());
1421591693c7b415e9869157c711fe11263c95d74eDavid Li                }
1431591693c7b415e9869157c711fe11263c95d74eDavid Li            })).longValue();
1441591693c7b415e9869157c711fe11263c95d74eDavid Li    }
1451591693c7b415e9869157c711fe11263c95d74eDavid Li
1461591693c7b415e9869157c711fe11263c95d74eDavid Li}
1471591693c7b415e9869157c711fe11263c95d74eDavid Li