diff options
3 files changed, 15 insertions, 1 deletions
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainer.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainer.java index 0725359a7..070a46f96 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainer.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainer.java @@ -14,11 +14,13 @@ import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; +import java.security.AccessController; import java.util.*; import org.eclipse.osgi.framework.eventmgr.EventManager; import org.eclipse.osgi.framework.eventmgr.ListenerQueue; import org.eclipse.osgi.framework.internal.core.Msg; import org.eclipse.osgi.framework.log.FrameworkLogEntry; +import org.eclipse.osgi.framework.util.SecureAction; import org.eclipse.osgi.internal.framework.legacy.PackageAdminImpl; import org.eclipse.osgi.internal.framework.legacy.StartLevelImpl; import org.eclipse.osgi.internal.hookregistry.HookRegistry; @@ -39,6 +41,7 @@ import org.osgi.util.tracker.ServiceTracker; public class EquinoxContainer { public static final String NAME = "org.eclipse.osgi"; //$NON-NLS-1$ private static final String CONFIG_FILE = "config.ini"; //$NON-NLS-1$ + static final SecureAction secureAction = AccessController.doPrivileged(SecureAction.createSecureAction()); private final EquinoxConfiguration equinoxConfig; private final EquinoxLocations equinoxLocations; diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/OSGiFrameworkHooks.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/OSGiFrameworkHooks.java index 22c3ce1f0..80e2d2698 100644 --- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/OSGiFrameworkHooks.java +++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/OSGiFrameworkHooks.java @@ -179,7 +179,7 @@ class OSGiFrameworkHooks { return new CoreResolverHook(Collections.<HookReference> emptyList()); } Module systemModule = container.getStorage().getModuleContainer().getModule(0); - BundleContextImpl context = (BundleContextImpl) systemModule.getBundle().getBundleContext(); + BundleContextImpl context = (BundleContextImpl) EquinoxContainer.secureAction.getContext(systemModule.getBundle()); ServiceReferenceImpl<ResolverHookFactory>[] refs = getHookReferences(registry, context); @SuppressWarnings("unchecked") diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/util/SecureAction.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/util/SecureAction.java index 2e654b16c..47287f549 100644 --- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/util/SecureAction.java +++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/util/SecureAction.java @@ -463,4 +463,15 @@ public class SecureAction { public void start(final Bundle bundle) throws BundleException { start(bundle, 0); } + + public BundleContext getContext(final Bundle bundle) { + if (System.getSecurityManager() == null) { + return bundle.getBundleContext(); + } + return AccessController.doPrivileged(new PrivilegedAction<BundleContext>() { + public BundleContext run() { + return bundle.getBundleContext(); + } + }, controlContext); + } } |