diff options
| author | Mike McQuaid | 2016-08-14 17:34:54 +0100 |
|---|---|---|
| committer | Mike McQuaid | 2016-08-15 08:33:58 +0100 |
| commit | 6e887fbf5ac5bc1fb551a3e4222ad1804b490def (patch) | |
| tree | dcf544089081597bc66812cb18d6be90a1b81390 /Library | |
| parent | ca3e4fcc1de70be7d540142b186b312968e22a1a (diff) | |
| download | brew-6e887fbf5ac5bc1fb551a3e4222ad1804b490def.tar.bz2 | |
sandbox: add formula? method and sandbox core.
Add a new `Sandbox.formula?` method to see if a given formula should be
sandboxed. Use the formula to check its tap against a list of
pre-approved taps where we know every formula builds under the sandbox
(currently just homebrew/core).
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/sandbox.rb | 8 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_sandbox.rb | 16 |
2 files changed, 24 insertions, 0 deletions
diff --git a/Library/Homebrew/sandbox.rb b/Library/Homebrew/sandbox.rb index c299d2f45..133bdb83c 100644 --- a/Library/Homebrew/sandbox.rb +++ b/Library/Homebrew/sandbox.rb @@ -3,11 +3,19 @@ require "tempfile" class Sandbox SANDBOX_EXEC = "/usr/bin/sandbox-exec".freeze + SANDBOXED_TAPS = [ + "homebrew/core", + ].freeze def self.available? OS.mac? && File.executable?(SANDBOX_EXEC) end + def self.formula?(formula) + return false unless available? + ARGV.sandbox? || SANDBOXED_TAPS.include?(formula.tap.to_s) + end + def self.test? return false unless available? !ARGV.no_sandbox? diff --git a/Library/Homebrew/test/test_sandbox.rb b/Library/Homebrew/test/test_sandbox.rb index de60551d1..cb33c3ffa 100644 --- a/Library/Homebrew/test/test_sandbox.rb +++ b/Library/Homebrew/test/test_sandbox.rb @@ -13,6 +13,22 @@ class SandboxTest < Homebrew::TestCase @dir.rmtree end + def test_formula? + f = formula { url "foo-1.0" } + f2 = formula { url "bar-1.0" } + f2.stubs(:tap).returns(Tap.fetch("test/tap")) + + ARGV.stubs(:sandbox?).returns true + assert Sandbox.formula?(f), + "Formulae should be sandboxed if --sandbox was passed." + + ARGV.stubs(:sandbox?).returns false + assert Sandbox.formula?(f), + "Formulae should be sandboxed if in a sandboxed tap." + refute Sandbox.formula?(f2), + "Formulae should not be sandboxed if not in a sandboxed tap." + end + def test_test? ARGV.stubs(:no_sandbox?).returns false assert Sandbox.test?, |
