You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by da...@apache.org on 2018/07/12 19:25:50 UTC

[sling-whiteboard] branch master updated: Handle a number of extra cases in the resolver hook implementation

This is an automated email from the ASF dual-hosted git repository.

davidb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new b58bb24  Handle a number of extra cases in the resolver hook implementation
b58bb24 is described below

commit b58bb24b4945451d5dde81b68aadf41d55df3860
Author: David Bosschaert <da...@gmail.com>
AuthorDate: Thu Jul 12 10:51:33 2018 +0200

    Handle a number of extra cases in the resolver hook implementation
---
 .../sling/feature/whitelist/impl/ResolverHookImpl.java | 18 ++++++++++++++++--
 .../feature/whitelist/impl/WhitelistServiceImpl.java   |  3 +++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/featuremodel/feature-whitelist/src/main/java/org/apache/sling/feature/whitelist/impl/ResolverHookImpl.java b/featuremodel/feature-whitelist/src/main/java/org/apache/sling/feature/whitelist/impl/ResolverHookImpl.java
index eff6353..0637ec1 100644
--- a/featuremodel/feature-whitelist/src/main/java/org/apache/sling/feature/whitelist/impl/ResolverHookImpl.java
+++ b/featuremodel/feature-whitelist/src/main/java/org/apache/sling/feature/whitelist/impl/ResolverHookImpl.java
@@ -30,6 +30,7 @@ import org.osgi.framework.wiring.BundleRevision;
 import org.osgi.util.tracker.ServiceTracker;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.Set;
 
@@ -61,6 +62,7 @@ class ResolverHookImpl implements ResolverHook {
         if (!PackageNamespace.PACKAGE_NAMESPACE.equals(requirement.getNamespace()))
             return;
 
+        System.out.println("*** Filter Matches: " + requirement);
         Bundle reqBundle = requirement.getRevision().getBundle();
         long reqBundleID = reqBundle.getBundleId();
         String reqBundleName = reqBundle.getSymbolicName();
@@ -77,6 +79,8 @@ class ResolverHookImpl implements ResolverHook {
 
             String reqFeat = fs.getFeatureForBundle(reqBundleName, reqBundleVersion);
             Set<String> regions = whitelistService.listRegions(reqFeat);
+            if (regions == null)
+                regions = Collections.emptySet();
 
             nextCapability:
             for (Iterator<BundleCapability> it = candidates.iterator(); it.hasNext(); ) {
@@ -87,16 +91,25 @@ class ResolverHookImpl implements ResolverHook {
                 // A bundle is allowed to wire to itself
                 Bundle capBundle = rev.getBundle();
                 long capBundleID = capBundle.getBundleId();
+                if (capBundleID == 0)
+                    continue nextCapability; // always allow capability from the system bundle
+
                 if (capBundleID == reqBundleID)
-                    continue nextCapability;
+                    continue nextCapability; // always allow capability from same bundle
 
                 String capBundleName = capBundle.getSymbolicName();
                 Version capBundleVersion = capBundle.getVersion();
 
                 String capFeat = fs.getFeatureForBundle(capBundleName, capBundleVersion);
+                if (capFeat == null)
+                    continue nextCapability; // always allow capability not coming from a feature
 
                 // Within a single feature everything can wire to everything else
-                if (reqFeat.equals(capFeat))
+                if (reqFeat != null && reqFeat.equals(capFeat))
+                    continue nextCapability;
+
+                // If the feature hosting the capability has no regions defined, everyone can access
+                if (whitelistService.listRegions(capFeat) == null)
                     continue nextCapability;
 
                 Object pkg = bc.getAttributes().get(PackageNamespace.PACKAGE_NAMESPACE);
@@ -119,6 +132,7 @@ class ResolverHookImpl implements ResolverHook {
                     // The capability package is not visible by the requirer
                     // remove from the candidates.
                     it.remove();
+                    System.out.println("***** Removed: " + bc);
                 }
             }
         } catch (InterruptedException e) {
diff --git a/featuremodel/feature-whitelist/src/main/java/org/apache/sling/feature/whitelist/impl/WhitelistServiceImpl.java b/featuremodel/feature-whitelist/src/main/java/org/apache/sling/feature/whitelist/impl/WhitelistServiceImpl.java
index 9877c0e..e2ca510 100644
--- a/featuremodel/feature-whitelist/src/main/java/org/apache/sling/feature/whitelist/impl/WhitelistServiceImpl.java
+++ b/featuremodel/feature-whitelist/src/main/java/org/apache/sling/feature/whitelist/impl/WhitelistServiceImpl.java
@@ -60,6 +60,9 @@ class WhitelistServiceImpl implements WhitelistService {
 
     @Override
     public Set<String> listRegions(String featureID) {
+        if (featureID == null)
+            return null;
+
         return featureRegionMapping.get(featureID);
     }