001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package org.apache.html.dom;
019:
020: import java.io.File;
021: import java.io.FileInputStream;
022: import java.io.FileNotFoundException;
023: import java.io.InputStream;
024:
025: import java.security.AccessController;
026: import java.security.PrivilegedAction;
027: import java.security.PrivilegedActionException;
028: import java.security.PrivilegedExceptionAction;
029:
030: /**
031: * This class is duplicated for each subpackage so keep it in sync.
032: * It is package private and therefore is not exposed as part of any API.
033: *
034: * @xerces.internal
035: */
036: final class SecuritySupport {
037:
038: static ClassLoader getContextClassLoader() {
039: return (ClassLoader) AccessController
040: .doPrivileged(new PrivilegedAction() {
041: public Object run() {
042: ClassLoader cl = null;
043: try {
044: cl = Thread.currentThread()
045: .getContextClassLoader();
046: } catch (SecurityException ex) {
047: }
048: return cl;
049: }
050: });
051: }
052:
053: static ClassLoader getSystemClassLoader() {
054: return (ClassLoader) AccessController
055: .doPrivileged(new PrivilegedAction() {
056: public Object run() {
057: ClassLoader cl = null;
058: try {
059: cl = ClassLoader.getSystemClassLoader();
060: } catch (SecurityException ex) {
061: }
062: return cl;
063: }
064: });
065: }
066:
067: static ClassLoader getParentClassLoader(final ClassLoader cl) {
068: return (ClassLoader) AccessController
069: .doPrivileged(new PrivilegedAction() {
070: public Object run() {
071: ClassLoader parent = null;
072: try {
073: parent = cl.getParent();
074: } catch (SecurityException ex) {
075: }
076:
077: // eliminate loops in case of the boot
078: // ClassLoader returning itself as a parent
079: return (parent == cl) ? null : parent;
080: }
081: });
082: }
083:
084: static String getSystemProperty(final String propName) {
085: return (String) AccessController
086: .doPrivileged(new PrivilegedAction() {
087: public Object run() {
088: return System.getProperty(propName);
089: }
090: });
091: }
092:
093: static FileInputStream getFileInputStream(final File file)
094: throws FileNotFoundException {
095: try {
096: return (FileInputStream) AccessController
097: .doPrivileged(new PrivilegedExceptionAction() {
098: public Object run()
099: throws FileNotFoundException {
100: return new FileInputStream(file);
101: }
102: });
103: } catch (PrivilegedActionException e) {
104: throw (FileNotFoundException) e.getException();
105: }
106: }
107:
108: static InputStream getResourceAsStream(final ClassLoader cl,
109: final String name) {
110: return (InputStream) AccessController
111: .doPrivileged(new PrivilegedAction() {
112: public Object run() {
113: InputStream ris;
114: if (cl == null) {
115: ris = ClassLoader
116: .getSystemResourceAsStream(name);
117: } else {
118: ris = cl.getResourceAsStream(name);
119: }
120: return ris;
121: }
122: });
123: }
124:
125: static boolean getFileExists(final File f) {
126: return ((Boolean) AccessController
127: .doPrivileged(new PrivilegedAction() {
128: public Object run() {
129: return f.exists() ? Boolean.TRUE
130: : Boolean.FALSE;
131: }
132: })).booleanValue();
133: }
134:
135: static long getLastModified(final File f) {
136: return ((Long) AccessController
137: .doPrivileged(new PrivilegedAction() {
138: public Object run() {
139: return new Long(f.lastModified());
140: }
141: })).longValue();
142: }
143:
144: private SecuritySupport() {
145: }
146: }
|