You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by fm...@apache.org on 2011/10/27 08:12:38 UTC

svn commit: r1189621 - in /felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl: ConfigurationAdapter.java ConfigurationAdminImpl.java ConfigurationManager.java

Author: fmeschbe
Date: Thu Oct 27 06:12:37 2011
New Revision: 1189621

URL: http://svn.apache.org/viewvc?rev=1189621&view=rev
Log:
FELIX-3176 Implement Config Admin 1.4 Changes
  - Implicit permission for bundles to read, manage, and receive their own config and un-owned config
  - A lot of DEBUG logging statements

Modified:
    felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdapter.java
    felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdminImpl.java
    felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java

Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdapter.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdapter.java?rev=1189621&r1=1189620&r2=1189621&view=diff
==============================================================================
--- felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdapter.java (original)
+++ felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdapter.java Thu Oct 27 06:12:37 2011
@@ -85,7 +85,7 @@ public class ConfigurationAdapter implem
     {
         // CM 1.4 / 104.13.2.4
         configurationAdmin.checkPermission( delegatee.getBundleLocation() );
-        configurationAdmin.checkPermission( bundleLocation );
+        configurationAdmin.checkPermission( ( bundleLocation == null ) ? "*" : bundleLocation );
         checkDeleted();
         delegatee.setStaticBundleLocation( bundleLocation );
     }

Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdminImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdminImpl.java?rev=1189621&r1=1189620&r2=1189621&view=diff
==============================================================================
--- felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdminImpl.java (original)
+++ felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationAdminImpl.java Thu Oct 27 06:12:37 2011
@@ -25,6 +25,7 @@ import org.osgi.framework.InvalidSyntaxE
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.cm.ConfigurationPermission;
+import org.osgi.service.log.LogService;
 
 
 /**
@@ -95,6 +96,10 @@ public class ConfigurationAdminImpl impl
 
         if ( config.getBundleLocation() == null )
         {
+            configurationManager.log( LogService.LOG_DEBUG, "Binding configuration {0} (isNew: {1}) to bundle {2}",
+                new Object[]
+                    { config.getPid(), Boolean.valueOf( config.isNew() ), getBundle().getLocation() } );
+
             config.setStaticBundleLocation( this.getBundle().getLocation() );
         }
         else if ( !config.getBundleLocation().equals( this.getBundle().getLocation() ) )
@@ -178,11 +183,9 @@ public class ConfigurationAdminImpl impl
      * the given permission for the given bundle location and throws a
      * <code>SecurityException</code> if this is not the case.
      *
-     * @param name The bundle location to check for permission. If
-     *   <code>null</code> assumes <code>*</code>.
-     * @param permission The actual permission to check. This must be one
-     *    of the constants defined in the
-     *    <code>ConfigurationPermission</code> class.
+     * @param name The bundle location to check for permission. If this
+     *      is <code>null</code> or exactly matches the using bundle's
+     *      location, permission is always granted.
      *
      * @throws SecurityException if the access control context does not
      *      have the appropriate permission
@@ -193,11 +196,34 @@ public class ConfigurationAdminImpl impl
         final SecurityManager sm = System.getSecurityManager();
         if ( sm != null )
         {
-            if (name == null) {
-                name = "*";
+            // CM 1.4 / 104.11.1 Implicit permission
+            if ( name != null && !name.equals( getBundle().getLocation() ) )
+            {
+                sm.checkPermission( new ConfigurationPermission( name, ConfigurationPermission.CONFIGURE ) );
+
+                if ( configurationManager.isLogEnabled( LogService.LOG_DEBUG ) )
+                {
+                    configurationManager.log( LogService.LOG_DEBUG,
+                        "Explicit Permission; grant CONFIGURE permission on configuration bound to {0} to bundle {1}",
+                        new Object[]
+                            { name, getBundle().getLocation() } );
+                }
             }
+            else if ( configurationManager.isLogEnabled( LogService.LOG_DEBUG ) )
+            {
+                configurationManager.log( LogService.LOG_DEBUG,
+                    "Implicit Permission; grant CONFIGURE permission on configuration bound to {0} to bundle {1}",
+                    new Object[]
+                        { name, getBundle().getLocation() } );
 
-            sm.checkPermission( new ConfigurationPermission( name, ConfigurationPermission.CONFIGURE ) );
+            }
+        }
+        else if ( configurationManager.isLogEnabled( LogService.LOG_DEBUG ) )
+        {
+            configurationManager.log( LogService.LOG_DEBUG,
+                "No SecurityManager installed; grant CONFIGURE permission on configuration bound to {0} to bundle {1}",
+                new Object[]
+                    { name, getBundle().getLocation() } );
         }
     }
 

Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java?rev=1189621&r1=1189620&r2=1189621&view=diff
==============================================================================
--- felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java (original)
+++ felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/ConfigurationManager.java Thu Oct 27 06:12:37 2011
@@ -434,6 +434,8 @@ public class ConfigurationManager implem
         ConfigurationImpl config = getCachedConfiguration( pid );
         if ( config != null )
         {
+            log( LogService.LOG_DEBUG, "Found cached configuration {0} bound to {1}", new Object[]
+                { pid, config.getBundleLocation() } );
             return config;
         }
 
@@ -444,6 +446,8 @@ public class ConfigurationManager implem
             {
                 Dictionary props = pmList[i].load( pid );
                 config = new ConfigurationImpl( this, pmList[i], props );
+                log( LogService.LOG_DEBUG, "Found existing configuration {0} bound to {1}", new Object[]
+                    { pid, config.getBundleLocation() } );
                 return cacheConfiguration( config );
             }
         }
@@ -504,7 +508,7 @@ public class ConfigurationManager implem
                 {
                     log(
                         LogService.LOG_DEBUG,
-                        "Omitting configuration {0}: No permission for {1} on {2}",
+                        "Omitting configuration {0}: No permission for bundle {1} on configuration bound to {2}",
                         new Object[]
                             { config.get( Constants.SERVICE_PID ), configurationAdmin.getBundle().getLocation(),
                                 config.get( ConfigurationAdmin.SERVICE_BUNDLELOCATION ) } );