Mega Code Archive

 
Categories / Java / Security
 

Security Support

/*  * Licensed to the Apache Software Foundation (ASF) under one  * or more contributor license agreements. See the NOTICE file  * distributed with this work for additional information  * regarding copyright ownership. The ASF licenses this file  * to you under the Apache License, Version 2.0 (the  "License");  * you may not use this file except in compliance with the License.  * You may obtain a copy of the License at  *  *     http://www.apache.org/licenses/LICENSE-2.0  *  * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  */ /*  * $Id$  */ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.security.AccessController; import java.security.PrivilegedAction; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; /**  * This class is duplicated for each Xalan-Java subpackage so keep it in sync.  * It is package private and therefore is not exposed as part of the Xalan-Java  * API.  *  * Base class with security related methods that work on JDK 1.1.  */ class SecuritySupport {     /*      * Make this of type Object so that the verifier won't try to      * prove its type, thus possibly trying to load the SecuritySupport12      * class.      */     private static final Object securitySupport;     static {   SecuritySupport ss = null;   try {       Class c = Class.forName("java.security.AccessController");       // if that worked, we're on 1.2.       /*       // don't reference the class explicitly so it doesn't       // get dragged in accidentally.       c = Class.forName("javax.mail.SecuritySupport12");       Constructor cons = c.getConstructor(new Class[] { });       ss = (SecuritySupport)cons.newInstance(new Object[] { });       */       /*        * Unfortunately, we can't load the class using reflection        * because the class is package private.  And the class has        * to be package private so the APIs aren't exposed to other        * code that could use them to circumvent security.  Thus,        * we accept the risk that the direct reference might fail        * on some JDK 1.1 JVMs, even though we would never execute        * this code in such a case.  Sigh...        */       ss = new SecuritySupport12();   } catch (Exception ex) {       // ignore it   } finally {       if (ss == null)     ss = new SecuritySupport();       securitySupport = ss;   }     }     /**      * Return an appropriate instance of this class, depending on whether      * we're on a JDK 1.1 or J2SE 1.2 (or later) system.      */     static SecuritySupport getInstance() {   return (SecuritySupport)securitySupport;     }     ClassLoader getContextClassLoader() {   return null;     }     ClassLoader getSystemClassLoader() {         return null;     }     ClassLoader getParentClassLoader(ClassLoader cl) {         return null;     }     String getSystemProperty(String propName) {         return System.getProperty(propName);     }     FileInputStream getFileInputStream(File file)         throws FileNotFoundException     {         return new FileInputStream(file);     }     InputStream getResourceAsStream(ClassLoader cl, String name) {         InputStream ris;         if (cl == null) {             ris = ClassLoader.getSystemResourceAsStream(name);         } else {             ris = cl.getResourceAsStream(name);         }         return ris;     }          boolean getFileExists(File f) {         return f.exists();     }          long getLastModified(File f) {         return f.lastModified();     }     } /*  * Licensed to the Apache Software Foundation (ASF) under one  * or more contributor license agreements. See the NOTICE file  * distributed with this work for additional information  * regarding copyright ownership. The ASF licenses this file  * to you under the Apache License, Version 2.0 (the  "License");  * you may not use this file except in compliance with the License.  * You may obtain a copy of the License at  *  *     http://www.apache.org/licenses/LICENSE-2.0  *  * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  */ /*  * $Id$  */ /**  * This class is duplicated for each Xalan-Java subpackage so keep it in sync.  * It is package private and therefore is not exposed as part of the Xalan-Java  * API.  *  * Security related methods that only work on J2SE 1.2 and newer.  */ class SecuritySupport12 extends SecuritySupport {     ClassLoader getContextClassLoader() {         return (ClassLoader)                 AccessController.doPrivileged(new PrivilegedAction() {             public Object run() {                 ClassLoader cl = null;                 try {                     cl = Thread.currentThread().getContextClassLoader();                 } catch (SecurityException ex) { }                 return cl;             }         });     }     ClassLoader getSystemClassLoader() {         return (ClassLoader)             AccessController.doPrivileged(new PrivilegedAction() {                 public Object run() {                     ClassLoader cl = null;                     try {                         cl = ClassLoader.getSystemClassLoader();                     } catch (SecurityException ex) {}                     return cl;                 }             });     }     ClassLoader getParentClassLoader(final ClassLoader cl) {         return (ClassLoader)             AccessController.doPrivileged(new PrivilegedAction() {                 public Object run() {                     ClassLoader parent = null;                     try {                         parent = cl.getParent();                     } catch (SecurityException ex) {}                     // eliminate loops in case of the boot                     // ClassLoader returning itself as a parent                     return (parent == cl) ? null : parent;                 }             });     }     String getSystemProperty(final String propName) {         return (String)             AccessController.doPrivileged(new PrivilegedAction() {                 public Object run() {                     return System.getProperty(propName);                 }             });     }     FileInputStream getFileInputStream(final File file)         throws FileNotFoundException     {         try {             return (FileInputStream)                 AccessController.doPrivileged(new PrivilegedExceptionAction() {                     public Object run() throws FileNotFoundException {                         return new FileInputStream(file);                     }                 });         } catch (PrivilegedActionException e) {             throw (FileNotFoundException)e.getException();         }     }     InputStream getResourceAsStream(final ClassLoader cl,                                            final String name)     {         return (InputStream)             AccessController.doPrivileged(new PrivilegedAction() {                 public Object run() {                     InputStream ris;                     if (cl == null) {                         ris = ClassLoader.getSystemResourceAsStream(name);                     } else {                         ris = cl.getResourceAsStream(name);                     }                     return ris;                 }             });     }          boolean getFileExists(final File f) {     return ((Boolean)             AccessController.doPrivileged(new PrivilegedAction() {                 public Object run() {                     return new Boolean(f.exists());                 }             })).booleanValue();     }          long getLastModified(final File f) {     return ((Long)             AccessController.doPrivileged(new PrivilegedAction() {                 public Object run() {                     return new Long(f.lastModified());                 }             })).longValue();     }          }