aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMike McQuaid2016-08-17 08:30:16 +0100
committerGitHub2016-08-17 08:30:16 +0100
commit2ab5c77d0ca82581658370ac899a8464a70ec159 (patch)
tree6798ab00d65be0dc8706bf0e2b3afb56999ecc9a /Library
parent823505a0584f5b114ebb29b3d66c5a1ca5ed399b (diff)
parentc6151951d6b685936adb8819db3957b12c95f5c9 (diff)
downloadbrew-2ab5c77d0ca82581658370ac899a8464a70ec159.tar.bz2
Merge pull request #713 from MikeMcQuaid/ship-sandbox
Enable sandbox by default for homebrew/core
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/cmd/postinstall.rb6
-rw-r--r--Library/Homebrew/cmd/test.rb6
-rw-r--r--Library/Homebrew/formula_installer.rb6
-rw-r--r--Library/Homebrew/sandbox.rb13
-rw-r--r--Library/Homebrew/test/test_sandbox.rb22
5 files changed, 41 insertions, 12 deletions
diff --git a/Library/Homebrew/cmd/postinstall.rb b/Library/Homebrew/cmd/postinstall.rb
index 95bd3f8ef..798907339 100644
--- a/Library/Homebrew/cmd/postinstall.rb
+++ b/Library/Homebrew/cmd/postinstall.rb
@@ -21,12 +21,10 @@ module Homebrew
args << "--devel"
end
- if Sandbox.available? && ARGV.sandbox?
- Sandbox.print_sandbox_message
- end
+ Sandbox.print_sandbox_message if Sandbox.formula?(formula)
Utils.safe_fork do
- if Sandbox.available? && ARGV.sandbox?
+ if Sandbox.formula?(formula)
sandbox = Sandbox.new
formula.logs.mkpath
sandbox.record_log(formula.logs/"sandbox.postinstall.log")
diff --git a/Library/Homebrew/cmd/test.rb b/Library/Homebrew/cmd/test.rb
index 0218e1c80..495ea8ec8 100644
--- a/Library/Homebrew/cmd/test.rb
+++ b/Library/Homebrew/cmd/test.rb
@@ -57,12 +57,10 @@ module Homebrew
args << "--devel"
end
- if Sandbox.available? && !ARGV.no_sandbox?
- Sandbox.print_sandbox_message
- end
+ Sandbox.print_sandbox_message if Sandbox.test?
Utils.safe_fork do
- if Sandbox.available? && !ARGV.no_sandbox?
+ if Sandbox.test?
sandbox = Sandbox.new
f.logs.mkpath
sandbox.record_log(f.logs/"sandbox.test.log")
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb
index 54581b232..03c9f8314 100644
--- a/Library/Homebrew/formula_installer.rb
+++ b/Library/Homebrew/formula_installer.rb
@@ -588,15 +588,13 @@ class FormulaInstaller
#{formula.path}
].concat(build_argv)
- if Sandbox.available? && ARGV.sandbox?
- Sandbox.print_sandbox_message
- end
+ Sandbox.print_sandbox_message if Sandbox.formula?(formula)
Utils.safe_fork do
# Invalidate the current sudo timestamp in case a build script calls sudo
system "/usr/bin/sudo", "-k"
- if Sandbox.available? && ARGV.sandbox?
+ if Sandbox.formula?(formula)
sandbox = Sandbox.new
formula.logs.mkpath
sandbox.record_log(formula.logs/"sandbox.build.log")
diff --git a/Library/Homebrew/sandbox.rb b/Library/Homebrew/sandbox.rb
index 4823baf7f..133bdb83c 100644
--- a/Library/Homebrew/sandbox.rb
+++ b/Library/Homebrew/sandbox.rb
@@ -3,11 +3,24 @@ 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?
+ end
+
def self.print_sandbox_message
unless @printed_sandbox_message
ohai "Using the sandbox"
diff --git a/Library/Homebrew/test/test_sandbox.rb b/Library/Homebrew/test/test_sandbox.rb
index dc907d428..cb33c3ffa 100644
--- a/Library/Homebrew/test/test_sandbox.rb
+++ b/Library/Homebrew/test/test_sandbox.rb
@@ -13,6 +13,28 @@ 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?,
+ "Tests should be sandboxed unless --no-sandbox was passed."
+ end
+
def test_allow_write
@sandbox.allow_write @file
@sandbox.exec "touch", @file