7169884: LogManager checks do not work correctly for sub-types
Reviewed-by: mchung, ahgross
This commit is contained in:
parent
1e5b3e3ded
commit
c6f43f3599
@ -220,7 +220,7 @@ public class FileHandler extends StreamHandler {
|
|||||||
* @exception NullPointerException if pattern property is an empty String.
|
* @exception NullPointerException if pattern property is an empty String.
|
||||||
*/
|
*/
|
||||||
public FileHandler() throws IOException, SecurityException {
|
public FileHandler() throws IOException, SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
configure();
|
configure();
|
||||||
openFiles();
|
openFiles();
|
||||||
}
|
}
|
||||||
@ -246,7 +246,7 @@ public class FileHandler extends StreamHandler {
|
|||||||
if (pattern.length() < 1 ) {
|
if (pattern.length() < 1 ) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
checkAccess();
|
checkPermission();
|
||||||
configure();
|
configure();
|
||||||
this.pattern = pattern;
|
this.pattern = pattern;
|
||||||
this.limit = 0;
|
this.limit = 0;
|
||||||
@ -278,7 +278,7 @@ public class FileHandler extends StreamHandler {
|
|||||||
if (pattern.length() < 1 ) {
|
if (pattern.length() < 1 ) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
checkAccess();
|
checkPermission();
|
||||||
configure();
|
configure();
|
||||||
this.pattern = pattern;
|
this.pattern = pattern;
|
||||||
this.limit = 0;
|
this.limit = 0;
|
||||||
@ -315,7 +315,7 @@ public class FileHandler extends StreamHandler {
|
|||||||
if (limit < 0 || count < 1 || pattern.length() < 1) {
|
if (limit < 0 || count < 1 || pattern.length() < 1) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
checkAccess();
|
checkPermission();
|
||||||
configure();
|
configure();
|
||||||
this.pattern = pattern;
|
this.pattern = pattern;
|
||||||
this.limit = limit;
|
this.limit = limit;
|
||||||
@ -354,7 +354,7 @@ public class FileHandler extends StreamHandler {
|
|||||||
if (limit < 0 || count < 1 || pattern.length() < 1) {
|
if (limit < 0 || count < 1 || pattern.length() < 1) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
checkAccess();
|
checkPermission();
|
||||||
configure();
|
configure();
|
||||||
this.pattern = pattern;
|
this.pattern = pattern;
|
||||||
this.limit = limit;
|
this.limit = limit;
|
||||||
@ -367,7 +367,7 @@ public class FileHandler extends StreamHandler {
|
|||||||
// configured instance variables.
|
// configured instance variables.
|
||||||
private void openFiles() throws IOException {
|
private void openFiles() throws IOException {
|
||||||
LogManager manager = LogManager.getLogManager();
|
LogManager manager = LogManager.getLogManager();
|
||||||
manager.checkAccess();
|
manager.checkPermission();
|
||||||
if (count < 1) {
|
if (count < 1) {
|
||||||
throw new IllegalArgumentException("file count = " + count);
|
throw new IllegalArgumentException("file count = " + count);
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ public abstract class Handler {
|
|||||||
* the caller does not have <tt>LoggingPermission("control")</tt>.
|
* the caller does not have <tt>LoggingPermission("control")</tt>.
|
||||||
*/
|
*/
|
||||||
public void setFormatter(Formatter newFormatter) throws SecurityException {
|
public void setFormatter(Formatter newFormatter) throws SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
// Check for a null pointer:
|
// Check for a null pointer:
|
||||||
newFormatter.getClass();
|
newFormatter.getClass();
|
||||||
formatter = newFormatter;
|
formatter = newFormatter;
|
||||||
@ -140,7 +140,7 @@ public abstract class Handler {
|
|||||||
*/
|
*/
|
||||||
public void setEncoding(String encoding)
|
public void setEncoding(String encoding)
|
||||||
throws SecurityException, java.io.UnsupportedEncodingException {
|
throws SecurityException, java.io.UnsupportedEncodingException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
if (encoding != null) {
|
if (encoding != null) {
|
||||||
try {
|
try {
|
||||||
if(!java.nio.charset.Charset.isSupported(encoding)) {
|
if(!java.nio.charset.Charset.isSupported(encoding)) {
|
||||||
@ -175,7 +175,7 @@ public abstract class Handler {
|
|||||||
* the caller does not have <tt>LoggingPermission("control")</tt>.
|
* the caller does not have <tt>LoggingPermission("control")</tt>.
|
||||||
*/
|
*/
|
||||||
public void setFilter(Filter newFilter) throws SecurityException {
|
public void setFilter(Filter newFilter) throws SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
filter = newFilter;
|
filter = newFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ public abstract class Handler {
|
|||||||
* the caller does not have <tt>LoggingPermission("control")</tt>.
|
* the caller does not have <tt>LoggingPermission("control")</tt>.
|
||||||
*/
|
*/
|
||||||
public void setErrorManager(ErrorManager em) {
|
public void setErrorManager(ErrorManager em) {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
if (em == null) {
|
if (em == null) {
|
||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
@ -213,7 +213,7 @@ public abstract class Handler {
|
|||||||
* the caller does not have <tt>LoggingPermission("control")</tt>.
|
* the caller does not have <tt>LoggingPermission("control")</tt>.
|
||||||
*/
|
*/
|
||||||
public ErrorManager getErrorManager() {
|
public ErrorManager getErrorManager() {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
return errorManager;
|
return errorManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,7 +253,7 @@ public abstract class Handler {
|
|||||||
if (newLevel == null) {
|
if (newLevel == null) {
|
||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
checkAccess();
|
checkPermission();
|
||||||
logLevel = newLevel;
|
logLevel = newLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,9 +296,9 @@ public abstract class Handler {
|
|||||||
// If "sealed" is true, we check that the caller has
|
// If "sealed" is true, we check that the caller has
|
||||||
// appropriate security privileges to update Handler
|
// appropriate security privileges to update Handler
|
||||||
// state and if not throw a SecurityException.
|
// state and if not throw a SecurityException.
|
||||||
void checkAccess() throws SecurityException {
|
void checkPermission() throws SecurityException {
|
||||||
if (sealed) {
|
if (sealed) {
|
||||||
manager.checkAccess();
|
manager.checkPermission();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -314,7 +314,7 @@ public class LogManager {
|
|||||||
*/
|
*/
|
||||||
public void addPropertyChangeListener(PropertyChangeListener l) throws SecurityException {
|
public void addPropertyChangeListener(PropertyChangeListener l) throws SecurityException {
|
||||||
PropertyChangeListener listener = Objects.requireNonNull(l);
|
PropertyChangeListener listener = Objects.requireNonNull(l);
|
||||||
checkAccess();
|
checkPermission();
|
||||||
synchronized (listenerMap) {
|
synchronized (listenerMap) {
|
||||||
// increment the registration count if already registered
|
// increment the registration count if already registered
|
||||||
Integer value = listenerMap.get(listener);
|
Integer value = listenerMap.get(listener);
|
||||||
@ -338,7 +338,7 @@ public class LogManager {
|
|||||||
* the caller does not have LoggingPermission("control").
|
* the caller does not have LoggingPermission("control").
|
||||||
*/
|
*/
|
||||||
public void removePropertyChangeListener(PropertyChangeListener l) throws SecurityException {
|
public void removePropertyChangeListener(PropertyChangeListener l) throws SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
if (l != null) {
|
if (l != null) {
|
||||||
PropertyChangeListener listener = l;
|
PropertyChangeListener listener = l;
|
||||||
synchronized (listenerMap) {
|
synchronized (listenerMap) {
|
||||||
@ -793,7 +793,7 @@ public class LogManager {
|
|||||||
* @exception IOException if there are IO problems reading the configuration.
|
* @exception IOException if there are IO problems reading the configuration.
|
||||||
*/
|
*/
|
||||||
public void readConfiguration() throws IOException, SecurityException {
|
public void readConfiguration() throws IOException, SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
|
|
||||||
// if a configuration class is specified, load it and use it.
|
// if a configuration class is specified, load it and use it.
|
||||||
String cname = System.getProperty("java.util.logging.config.class");
|
String cname = System.getProperty("java.util.logging.config.class");
|
||||||
@ -851,7 +851,7 @@ public class LogManager {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
public void reset() throws SecurityException {
|
public void reset() throws SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
props = new Properties();
|
props = new Properties();
|
||||||
// Since we are doing a reset we no longer want to initialize
|
// Since we are doing a reset we no longer want to initialize
|
||||||
@ -936,7 +936,7 @@ public class LogManager {
|
|||||||
* @exception IOException if there are problems reading from the stream.
|
* @exception IOException if there are problems reading from the stream.
|
||||||
*/
|
*/
|
||||||
public void readConfiguration(InputStream ins) throws IOException, SecurityException {
|
public void readConfiguration(InputStream ins) throws IOException, SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
reset();
|
reset();
|
||||||
|
|
||||||
// Load the properties
|
// Load the properties
|
||||||
@ -1113,8 +1113,13 @@ public class LogManager {
|
|||||||
loadLoggerHandlers(rootLogger, null, "handlers");
|
loadLoggerHandlers(rootLogger, null, "handlers");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final Permission controlPermission = new LoggingPermission("control", null);
|
||||||
|
|
||||||
private Permission ourPermission = new LoggingPermission("control", null);
|
void checkPermission() {
|
||||||
|
SecurityManager sm = System.getSecurityManager();
|
||||||
|
if (sm != null)
|
||||||
|
sm.checkPermission(controlPermission);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that the current context is trusted to modify the logging
|
* Check that the current context is trusted to modify the logging
|
||||||
@ -1127,11 +1132,7 @@ public class LogManager {
|
|||||||
* the caller does not have LoggingPermission("control").
|
* the caller does not have LoggingPermission("control").
|
||||||
*/
|
*/
|
||||||
public void checkAccess() throws SecurityException {
|
public void checkAccess() throws SecurityException {
|
||||||
SecurityManager sm = System.getSecurityManager();
|
checkPermission();
|
||||||
if (sm == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
sm.checkPermission(ourPermission);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nested class to represent a node in our tree of named loggers.
|
// Nested class to represent a node in our tree of named loggers.
|
||||||
|
@ -276,13 +276,13 @@ public class Logger {
|
|||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkAccess() throws SecurityException {
|
private void checkPermission() throws SecurityException {
|
||||||
if (!anonymous) {
|
if (!anonymous) {
|
||||||
if (manager == null) {
|
if (manager == null) {
|
||||||
// Complete initialization of the global Logger.
|
// Complete initialization of the global Logger.
|
||||||
manager = LogManager.getLogManager();
|
manager = LogManager.getLogManager();
|
||||||
}
|
}
|
||||||
manager.checkAccess();
|
manager.checkPermission();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -482,7 +482,7 @@ public class Logger {
|
|||||||
* the caller does not have LoggingPermission("control").
|
* the caller does not have LoggingPermission("control").
|
||||||
*/
|
*/
|
||||||
public void setFilter(Filter newFilter) throws SecurityException {
|
public void setFilter(Filter newFilter) throws SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
filter = newFilter;
|
filter = newFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1168,7 +1168,7 @@ public class Logger {
|
|||||||
* the caller does not have LoggingPermission("control").
|
* the caller does not have LoggingPermission("control").
|
||||||
*/
|
*/
|
||||||
public void setLevel(Level newLevel) throws SecurityException {
|
public void setLevel(Level newLevel) throws SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
synchronized (treeLock) {
|
synchronized (treeLock) {
|
||||||
levelObject = newLevel;
|
levelObject = newLevel;
|
||||||
updateEffectiveLevel();
|
updateEffectiveLevel();
|
||||||
@ -1223,7 +1223,7 @@ public class Logger {
|
|||||||
public void addHandler(Handler handler) throws SecurityException {
|
public void addHandler(Handler handler) throws SecurityException {
|
||||||
// Check for null handler
|
// Check for null handler
|
||||||
handler.getClass();
|
handler.getClass();
|
||||||
checkAccess();
|
checkPermission();
|
||||||
handlers.add(handler);
|
handlers.add(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1237,7 +1237,7 @@ public class Logger {
|
|||||||
* the caller does not have LoggingPermission("control").
|
* the caller does not have LoggingPermission("control").
|
||||||
*/
|
*/
|
||||||
public void removeHandler(Handler handler) throws SecurityException {
|
public void removeHandler(Handler handler) throws SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
if (handler == null) {
|
if (handler == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1265,7 +1265,7 @@ public class Logger {
|
|||||||
* the caller does not have LoggingPermission("control").
|
* the caller does not have LoggingPermission("control").
|
||||||
*/
|
*/
|
||||||
public void setUseParentHandlers(boolean useParentHandlers) {
|
public void setUseParentHandlers(boolean useParentHandlers) {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
this.useParentHandlers = useParentHandlers;
|
this.useParentHandlers = useParentHandlers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1420,7 +1420,7 @@ public class Logger {
|
|||||||
if (parent == null) {
|
if (parent == null) {
|
||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
manager.checkAccess();
|
manager.checkPermission();
|
||||||
doSetParent(parent);
|
doSetParent(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ public class MemoryHandler extends Handler {
|
|||||||
throw new NullPointerException();
|
throw new NullPointerException();
|
||||||
}
|
}
|
||||||
LogManager manager = LogManager.getLogManager();
|
LogManager manager = LogManager.getLogManager();
|
||||||
checkAccess();
|
checkPermission();
|
||||||
pushLevel = newLevel;
|
pushLevel = newLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +249,7 @@ public class StreamHandler extends Handler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void flushAndClose() throws SecurityException {
|
private synchronized void flushAndClose() throws SecurityException {
|
||||||
checkAccess();
|
checkPermission();
|
||||||
if (writer != null) {
|
if (writer != null) {
|
||||||
try {
|
try {
|
||||||
if (!doneHeader) {
|
if (!doneHeader) {
|
||||||
|
Loading…
Reference in New Issue
Block a user