summaryrefslogtreecommitdiff
path: root/src/partest/scala/tools/partest/SecurityTest.scala
blob: 2d6f61d0b14ab6ae30d37f1ff5c0c45f58266add (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* NSC -- new Scala compiler
 * Copyright 2005-2013 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 }
  }
}