src/share/classes/java/util/logging/MemoryHandler.java

Print this page

        

@@ -23,10 +23,13 @@
  * questions.
  */
 
 package java.util.logging;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
 /**
  * <tt>Handler</tt> that buffers requests in a circular buffer in memory.
  * <p>
  * Normally this <tt>Handler</tt> simply stores incoming <tt>LogRecords</tt>
  * into its memory buffer and discards earlier records.  This buffering

@@ -92,36 +95,38 @@
     private int size;
     private Handler target;
     private LogRecord buffer[];
     int start, count;
 
-    // Private method to configure a MemoryHandler from LogManager
+    // Private PrivilegedAction to configure a MemoryHandler from LogManager
     // properties and/or default values as specified in the class
     // javadoc.
-    private void configure() {
+    private class ConfigureAction implements PrivilegedAction<Void> {
+        @Override
+        public Void run() {
         LogManager manager = LogManager.getLogManager();
-        String cname = getClass().getName();
+            String cname = MemoryHandler.this.getClass().getName();
 
         pushLevel = manager.getLevelProperty(cname +".push", Level.SEVERE);
         size = manager.getIntProperty(cname + ".size", DEFAULT_SIZE);
         if (size <= 0) {
             size = DEFAULT_SIZE;
         }
         setLevel(manager.getLevelProperty(cname +".level", Level.ALL));
         setFilter(manager.getFilterProperty(cname +".filter", null));
         setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter()));
+            return null;
+        }
     }
 
     /**
      * Create a <tt>MemoryHandler</tt> and configure it based on
      * <tt>LogManager</tt> configuration properties.
      */
     public MemoryHandler() {
-        sealed = false;
-        configure();
-        sealed = true;
-
+        AccessController.doPrivileged(new ConfigureAction(),
+                                      null, LogManager.controlPermission);
         LogManager manager = LogManager.getLogManager();
         String handlerName = getClass().getName();
         String targetName = manager.getProperty(handlerName+".target");
         if (targetName == null) {
             throw new RuntimeException("The handler " + handlerName

@@ -162,13 +167,12 @@
             throw new NullPointerException();
         }
         if (size <= 0) {
             throw new IllegalArgumentException();
         }
-        sealed = false;
-        configure();
-        sealed = true;
+        AccessController.doPrivileged(new ConfigureAction(),
+                                      null, LogManager.controlPermission);
         this.target = target;
         this.pushLevel = pushLevel;
         this.size = size;
         init();
     }