All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.elasticsearch.bootstrap.BootstrapInfo Maven / Gradle / Ivy

There is a newer version: 8.15.1
Show newest version
/*
 * Licensed to Elasticsearch under one or more contributor
 * license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright
 * ownership. Elasticsearch 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.
 */

package org.elasticsearch.bootstrap;

import org.elasticsearch.common.SuppressForbidden;

import java.util.Dictionary;
import java.util.Enumeration;

/**
 * Exposes system startup information
 */
@SuppressForbidden(reason = "exposes read-only view of system properties")
public final class BootstrapInfo {

    /** no instantiation */
    private BootstrapInfo() {}

    /**
     * Returns true if we successfully loaded native libraries.
     * 

* If this returns false, then native operations such as locking * memory did not work. */ public static boolean isNativesAvailable() { return Natives.JNA_AVAILABLE; } /** * Returns true if we were able to lock the process's address space. */ public static boolean isMemoryLocked() { return Natives.isMemoryLocked(); } /** * Returns true if system call filter is installed (supported systems only) */ public static boolean isSystemCallFilterInstalled() { return Natives.isSystemCallFilterInstalled(); } /** * codebase location for untrusted scripts (provide some additional safety) *

* This is not a full URL, just a path. */ public static final String UNTRUSTED_CODEBASE = "/untrusted"; // create a view of sysprops map that does not allow modifications // this must be done this way (e.g. versus an actual typed map), because // some test methods still change properties, so whitelisted changes must // be reflected in this view. private static final Dictionary SYSTEM_PROPERTIES; static { final Dictionary sysprops = System.getProperties(); SYSTEM_PROPERTIES = new Dictionary() { @Override public int size() { return sysprops.size(); } @Override public boolean isEmpty() { return sysprops.isEmpty(); } @Override public Enumeration keys() { return sysprops.keys(); } @Override public Enumeration elements() { return sysprops.elements(); } @Override public Object get(Object key) { return sysprops.get(key); } @Override public Object put(Object key, Object value) { throw new UnsupportedOperationException("treat system properties as immutable"); } @Override public Object remove(Object key) { throw new UnsupportedOperationException("treat system properties as immutable"); } }; } /** * Returns a read-only view of all system properties */ public static Dictionary getSystemProperties() { SecurityManager sm = System.getSecurityManager(); if (sm != null) { sm.checkPropertyAccess("*"); } return SYSTEM_PROPERTIES; } public static void init() { } }