ONOS-1858 Modifying Felix framework security to support Security-Mode ONOS
Change-Id: Iaaa07102d55407818dd208a9a874fd532dc778bd
diff --git a/framework.security/src/main/java/org/apache/felix/framework/SecurityActivator.java b/framework.security/src/main/java/org/apache/felix/framework/SecurityActivator.java
index 1106423..8282c05 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/SecurityActivator.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/SecurityActivator.java
@@ -202,7 +202,7 @@
}
SecurityProvider provider = new SecurityProviderImpl(crlList,
- typeList, passwdList, storeList, pai, cpai, action, ((Felix) context.getBundle(0)).getLogger());
+ typeList, passwdList, storeList, pai, cpai, action, ((Felix) context.getBundle(0)).getLogger(), context);
((Felix) context.getBundle(0)).setSecurityProvider(provider);
}
diff --git a/framework.security/src/main/java/org/apache/felix/framework/SecurityProviderImpl.java b/framework.security/src/main/java/org/apache/felix/framework/SecurityProviderImpl.java
index 405f909..f2fde79 100644
--- a/framework.security/src/main/java/org/apache/felix/framework/SecurityProviderImpl.java
+++ b/framework.security/src/main/java/org/apache/felix/framework/SecurityProviderImpl.java
@@ -18,6 +18,7 @@
*/
package org.apache.felix.framework;
+import java.security.AccessControlException;
import java.security.Permission;
import java.security.ProtectionDomain;
@@ -29,8 +30,11 @@
import org.apache.felix.framework.security.verifier.BundleDNParser;
import org.apache.felix.framework.util.SecureAction;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkEvent;
import org.osgi.framework.wiring.BundleRevision;
+
/**
* This class is the entry point to the security. It is used to determine
* whether a given bundle is signed correctely and has permissions based on
@@ -42,16 +46,18 @@
private final PermissionAdminImpl m_pai;
private final ConditionalPermissionAdminImpl m_cpai;
private final SecureAction m_action;
+ private final BundleContext m_context;
SecurityProviderImpl(String crlList, String typeList, String passwdList,
String storeList, PermissionAdminImpl pai,
- ConditionalPermissionAdminImpl cpai, SecureAction action, Logger logger)
+ ConditionalPermissionAdminImpl cpai, SecureAction action, Logger logger, BundleContext context)
{
m_pai = pai;
m_cpai = cpai;
m_action = action;
m_parser = new BundleDNParser(new TrustManager(crlList, typeList,
passwdList, storeList, m_action), logger);
+ m_context = context;
}
/**
@@ -103,6 +109,10 @@
if (result != null)
{
+ if (!result.booleanValue()) {
+ ((Felix)m_context.getBundle(0)).fireFrameworkEvent(FrameworkEvent.ERROR, bundle,
+ new AccessControlException("SM-ONOS", permission));
+ }
if ((m_cpai != null) && !direct)
{
boolean allow = result.booleanValue();