/**************************************************************************
* Copyright (c) 2001 by Punch Telematix. All rights reserved. *
* *
* Redistribution and use in source and binary forms, with or without *
* modification, are permitted provided that the following conditions *
* are met: *
* 1. Redistributions of source code must retain the above copyright *
* notice, this list of conditions and the following disclaimer. *
* 2. Redistributions in binary form must reproduce the above copyright *
* notice, this list of conditions and the following disclaimer in the *
* documentation and/or other materials provided with the distribution. *
* 3. Neither the name of Punch Telematix nor the names of *
* other contributors may be used to endorse or promote products *
* derived from this software without specific prior written permission.*
* *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED *
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. *
* IN NO EVENT SHALL PUNCH TELEMATIX OR OTHER CONTRIBUTORS BE LIABLE *
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF *
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR *
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, *
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE *
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN *
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
**************************************************************************/
package java.net;
import wonka.vm.SecurityConfiguration;
import java.security.AccessController;
/*
** Package-visible class used to get system properties with full privileges.
*/
class GetSystemProperty implements java.security.PrivilegedAction {
static final String IMPL_PREFIX;
static final String DATAGRAM_SOCKET_IMPL;
static final String PROTOCOL_HANDLER_PKGS;
private String key;
private String dflt;
private String value;
/**
** Our static initialiser fetches the system property which
** everybody in this package seems to need ...
*/
static {
GetSystemProperty gsp;
if (SecurityConfiguration.ENABLE_SECURITY_CHECKS) {
gsp = new GetSystemProperty("impl.prefix","Plain");
AccessController.doPrivileged(gsp);
IMPL_PREFIX = gsp.get();
gsp = new GetSystemProperty("java.protocol.handler.pkgs","");
AccessController.doPrivileged(gsp);
PROTOCOL_HANDLER_PKGS = gsp.get();
}
else {
IMPL_PREFIX = System.getProperty("impl.prefix", "Plain");
PROTOCOL_HANDLER_PKGS = System.getProperty("java.protocol.handler.pkgs", "");
}
DATAGRAM_SOCKET_IMPL = "java.net."+ IMPL_PREFIX + "DatagramSocketImpl";
}
/**
** Constructor which takes a key and a default value.
*/
public GetSystemProperty(String key, String dflt) {
this.key = key;
this.dflt = dflt;
}
/**
** Constructor which just takes a key.
*/
public GetSystemProperty(String key) {
this.key = key;
}
/**
** This gets called by doPrivileged().
*/
public Object run() {
if (dflt == null) {
value = System.getProperty(key);
}
else {
value = System.getProperty(key, dflt);
}
return null;
}
/**
** Return the value to the caller.
*/
public String get() {
return value;
}
}