diff options
author | Paul Phillips <paulp@improving.org> | 2011-03-17 20:04:47 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-03-17 20:04:47 +0000 |
commit | 5647d7300922a357ab849e528fcc840afc92e33a (patch) | |
tree | 8fbca8bdfecf120f2c81fd9167c35276f6c9815b /src/partest | |
parent | cc672b023e872ccad0e6186d8159725dc4eb1281 (diff) | |
download | scala-5647d7300922a357ab849e528fcc840afc92e33a.tar.gz scala-5647d7300922a357ab849e528fcc840afc92e33a.tar.bz2 scala-5647d7300922a357ab849e528fcc840afc92e33a.zip |
Always forget that checking system properties c...
Always forget that checking system properties causes exceptions in
applets and such. Made the system property wrapper wrap its access
checks in some more wrapping. I spent a long time trying to write a
test for the security manager but it's hopeless without knowing all the
details of the test environment. Closes #4346, no review.
Diffstat (limited to 'src/partest')
-rw-r--r-- | src/partest/scala/tools/partest/SecurityTest.scala | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/partest/scala/tools/partest/SecurityTest.scala b/src/partest/scala/tools/partest/SecurityTest.scala new file mode 100644 index 0000000000..54aad5a625 --- /dev/null +++ b/src/partest/scala/tools/partest/SecurityTest.scala @@ -0,0 +1,32 @@ +/* NSC -- new Scala compiler + * Copyright 2005-2011 LAMP/EPFL + * @author Paul Phillips + */ + +package scala.tools.partest + +import java.security._ +import java.util._ + +abstract class SecurityTest extends App { + def throwIt(x: Any) = throw new AccessControlException("" + x) + + def readPerm(p: PropertyPermission) = p.getActions contains "read" + def writePerm(p: PropertyPermission) = p.getActions contains "write" + def propertyCheck(p: PropertyPermission): Unit = throwIt(p) + + def check(perm: Permission): Unit = perm match { + case p: PropertyPermission => propertyCheck(p) + case _ => () + } + + lazy val sm = new SecurityManager { + // these two are the choke points for all permissions checks + override def checkPermission(perm: Permission): Unit = check(perm) + override def checkPermission(perm: Permission, context: Object): Unit = check(perm) + } + def securityOn(): Boolean = { + try { System.setSecurityManager(sm) ; true } + catch { case _: SecurityException => false } + } +} |