re PR libgcj/28340 (gij ignores -Djava.security.manager)
2006-08-07 Gary Benson <gbenson@redhat.com> PR libgcj/28340: * java/lang/ClassLoader.java (clinit): Install a default security manager if java.security.manager is defined. (getParent, getSystemClassLoader): Use the correct stack frame during security checks. * java/net/URLClassLoader.java (findClass): Avoid calling this.toString() during VM initialization. (runtimeInitialized): New method. * java/net/natURLClassLoader.cc: New file. * Makefile.am (nat_source_files): Added the above. * Makefile.in: Rebuilt. From-SVN: r115999
This commit is contained in:
parent
da0f033486
commit
ded9dbb894
6 changed files with 95 additions and 3 deletions
|
@ -38,6 +38,7 @@ exception statement from your version. */
|
|||
|
||||
package java.lang;
|
||||
|
||||
import gnu.classpath.SystemProperties;
|
||||
import gnu.java.util.DoubleEnumeration;
|
||||
import gnu.java.util.EmptyEnumeration;
|
||||
|
||||
|
@ -156,6 +157,39 @@ public abstract class ClassLoader
|
|||
static final ClassLoader systemClassLoader =
|
||||
VMClassLoader.getSystemClassLoader();
|
||||
|
||||
static
|
||||
{
|
||||
// Find out if we have to install a default security manager. Note
|
||||
// that this is done here because we potentially need the system
|
||||
// class loader to load the security manager and note also that we
|
||||
// don't need the security manager until the system class loader
|
||||
// is created. If the runtime chooses to use a class loader that
|
||||
// doesn't have the system class loader as its parent, it is
|
||||
// responsible for setting up a security manager before doing so.
|
||||
String secman = SystemProperties.getProperty("java.security.manager");
|
||||
if (secman != null && SecurityManager.current == null)
|
||||
{
|
||||
if (secman.equals("") || secman.equals("default"))
|
||||
{
|
||||
SecurityManager.current = new SecurityManager();
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
Class cl = Class.forName(secman, false, systemClassLoader);
|
||||
SecurityManager.current = (SecurityManager) cl.newInstance();
|
||||
}
|
||||
catch (Exception x)
|
||||
{
|
||||
throw (InternalError)
|
||||
new InternalError("Unable to create SecurityManager")
|
||||
.initCause(x);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The default protection domain, used when defining a class with a null
|
||||
* paramter for the domain.
|
||||
|
@ -496,7 +530,7 @@ public abstract class ClassLoader
|
|||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null)
|
||||
{
|
||||
Class c = VMSecurityManager.getClassContext(ClassLoader.class)[1];
|
||||
Class c = VMSecurityManager.getClassContext(ClassLoader.class)[0];
|
||||
ClassLoader cl = c.getClassLoader();
|
||||
if (cl != null && ! cl.isAncestorOf(this))
|
||||
sm.checkPermission(new RuntimePermission("getClassLoader"));
|
||||
|
@ -739,7 +773,7 @@ public abstract class ClassLoader
|
|||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null)
|
||||
{
|
||||
Class c = VMSecurityManager.getClassContext(ClassLoader.class)[1];
|
||||
Class c = VMSecurityManager.getClassContext(ClassLoader.class)[0];
|
||||
ClassLoader cl = c.getClassLoader();
|
||||
if (cl != null && cl != systemClassLoader)
|
||||
sm.checkPermission(new RuntimePermission("getClassLoader"));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue