summaryrefslogtreecommitdiff
path: root/src/partest
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-03-17 20:04:47 +0000
committerPaul Phillips <paulp@improving.org>2011-03-17 20:04:47 +0000
commit5647d7300922a357ab849e528fcc840afc92e33a (patch)
tree8fbca8bdfecf120f2c81fd9167c35276f6c9815b /src/partest
parentcc672b023e872ccad0e6186d8159725dc4eb1281 (diff)
downloadscala-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.scala32
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 }
+ }
+}