jaxp/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/SecuritySupport.java
author joehw
Mon, 10 Jul 2017 10:22:36 -0700
changeset 45853 bfa06be36a17
parent 44797 8b3b3b911b8a
permissions -rw-r--r--
8181154: Fix lint warnings in JAXP repo: deprecation Reviewed-by: lancea, dfuchs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16953
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
     1
/*
45853
bfa06be36a17 8181154: Fix lint warnings in JAXP repo: deprecation
joehw
parents: 44797
diff changeset
     2
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
16953
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
     3
 */
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
     4
/*
44797
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 31284
diff changeset
     5
 * Licensed to the Apache Software Foundation (ASF) under one or more
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 31284
diff changeset
     6
 * contributor license agreements.  See the NOTICE file distributed with
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 31284
diff changeset
     7
 * this work for additional information regarding copyright ownership.
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 31284
diff changeset
     8
 * The ASF licenses this file to You under the Apache License, Version 2.0
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 31284
diff changeset
     9
 * (the "License"); you may not use this file except in compliance with
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 31284
diff changeset
    10
 * the License.  You may obtain a copy of the License at
16953
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    11
 *
44797
8b3b3b911b8a 8162572: Update License Header for all JAXP sources
joehw
parents: 31284
diff changeset
    12
 *      http://www.apache.org/licenses/LICENSE-2.0
16953
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    13
 *
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    14
 * Unless required by applicable law or agreed to in writing, software
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    15
 * distributed under the License is distributed on an "AS IS" BASIS,
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    17
 * See the License for the specific language governing permissions and
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    18
 * limitations under the License.
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    19
 */
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    20
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    21
package com.sun.org.apache.bcel.internal.util;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    22
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    23
import java.io.File;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    24
import java.io.FileInputStream;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    25
import java.io.FileNotFoundException;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    26
import java.io.FilenameFilter;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    27
import java.lang.ClassLoader;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    28
import java.security.AccessController;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    29
import java.security.PrivilegedAction;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    30
import java.security.PrivilegedActionException;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    31
import java.security.PrivilegedExceptionAction;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    32
import java.util.ListResourceBundle;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    33
import java.util.Locale;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    34
import java.util.MissingResourceException;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    35
import java.util.ResourceBundle;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    36
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    37
/**
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    38
 * This class is duplicated for each subpackage so keep it in sync. It is
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    39
 * package private and therefore is not exposed as part of any API.
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    40
 *
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    41
 * @xerces.internal
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    42
 */
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    43
public final class SecuritySupport {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    44
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    45
    private static final SecuritySupport securitySupport = new SecuritySupport();
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    46
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    47
    /**
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    48
     * Return an instance of this class.
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    49
     */
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    50
    public static SecuritySupport getInstance() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    51
        return securitySupport;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    52
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    53
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    54
    static ClassLoader getContextClassLoader() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    55
        return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    56
            public Object run() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    57
                ClassLoader cl = null;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    58
                try {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    59
                    cl = Thread.currentThread().getContextClassLoader();
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    60
                } catch (SecurityException ex) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    61
                }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    62
                return cl;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    63
            }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    64
        });
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    65
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    66
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    67
    static ClassLoader getSystemClassLoader() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    68
        return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    69
            public Object run() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    70
                ClassLoader cl = null;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    71
                try {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    72
                    cl = ClassLoader.getSystemClassLoader();
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    73
                } catch (SecurityException ex) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    74
                }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    75
                return cl;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    76
            }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    77
        });
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    78
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    79
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    80
    static ClassLoader getParentClassLoader(final ClassLoader cl) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    81
        return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    82
            public Object run() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    83
                ClassLoader parent = null;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    84
                try {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    85
                    parent = cl.getParent();
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    86
                } catch (SecurityException ex) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    87
                }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    88
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    89
                // eliminate loops in case of the boot
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    90
                // ClassLoader returning itself as a parent
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    91
                return (parent == cl) ? null : parent;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    92
            }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    93
        });
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    94
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    95
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    96
    public static String getSystemProperty(final String propName) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    97
        return (String) AccessController.doPrivileged(new PrivilegedAction() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    98
            public Object run() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
    99
                return System.getProperty(propName);
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   100
            }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   101
        });
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   102
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   103
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   104
    static FileInputStream getFileInputStream(final File file)
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   105
            throws FileNotFoundException {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   106
        try {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   107
            return (FileInputStream) AccessController.doPrivileged(new PrivilegedExceptionAction() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   108
                public Object run() throws FileNotFoundException {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   109
                    return new FileInputStream(file);
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   110
                }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   111
            });
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   112
        } catch (PrivilegedActionException e) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   113
            throw (FileNotFoundException) e.getException();
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   114
        }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   115
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   116
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   117
    /**
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   118
     * Gets a resource bundle using the specified base name, the default locale,
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   119
     * and the caller's class loader.
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   120
     *
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   121
     * @param bundle the base name of the resource bundle, a fully qualified
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   122
     * class name
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   123
     * @return a resource bundle for the given base name and the default locale
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   124
     */
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   125
    public static ListResourceBundle getResourceBundle(String bundle) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   126
        return getResourceBundle(bundle, Locale.getDefault());
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   127
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   128
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   129
    /**
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   130
     * Gets a resource bundle using the specified base name and locale, and the
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   131
     * caller's class loader.
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   132
     *
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   133
     * @param bundle the base name of the resource bundle, a fully qualified
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   134
     * class name
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   135
     * @param locale the locale for which a resource bundle is desired
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   136
     * @return a resource bundle for the given base name and locale
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   137
     */
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   138
    public static ListResourceBundle getResourceBundle(final String bundle, final Locale locale) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   139
        return AccessController.doPrivileged(new PrivilegedAction<ListResourceBundle>() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   140
            public ListResourceBundle run() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   141
                try {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   142
                    return (ListResourceBundle) ResourceBundle.getBundle(bundle, locale);
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   143
                } catch (MissingResourceException e) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   144
                    try {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   145
                        return (ListResourceBundle) ResourceBundle.getBundle(bundle, new Locale("en", "US"));
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   146
                    } catch (MissingResourceException e2) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   147
                        throw new MissingResourceException(
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   148
                                "Could not load any resource bundle by " + bundle, bundle, "");
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   149
                    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   150
                }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   151
            }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   152
        });
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   153
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   154
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   155
    public static String[] getFileList(final File f, final FilenameFilter filter) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   156
        return ((String[]) AccessController.doPrivileged(new PrivilegedAction() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   157
            public Object run() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   158
                return f.list(filter);
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   159
            }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   160
        }));
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   161
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   162
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   163
    public static boolean getFileExists(final File f) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   164
        return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   165
            public Object run() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   166
                return f.exists() ? Boolean.TRUE : Boolean.FALSE;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   167
            }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   168
        })).booleanValue();
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   169
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   170
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   171
    static long getLastModified(final File f) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   172
        return ((Long) AccessController.doPrivileged(new PrivilegedAction() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   173
            public Object run() {
45853
bfa06be36a17 8181154: Fix lint warnings in JAXP repo: deprecation
joehw
parents: 44797
diff changeset
   174
                return f.lastModified();
16953
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   175
            }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   176
        })).longValue();
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   177
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   178
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   179
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   180
    /**
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   181
     * Figure out which ClassLoader to use.
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   182
     */
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   183
    public static ClassLoader findClassLoader()
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   184
    {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   185
        if (System.getSecurityManager()!=null) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   186
            //this will ensure bootclassloader is used
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   187
            return null;
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   188
        } else {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   189
            return SecuritySupport.class.getClassLoader();
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   190
        }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   191
    } // findClassLoader():ClassLoader
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   192
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   193
    private SecuritySupport() {
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   194
    }
a44e04deb948 6657673: Issues with JAXP
joehw
parents:
diff changeset
   195
}