From 8cebb64eec8e887b35d53fa3003c87dc1ed5eda1 Mon Sep 17 00:00:00 2001 From: Xu Cheng Date: Tue, 21 Jul 2015 14:47:37 +0800 Subject: [PATCH] auto disable sandbox for interactive shell Closes Homebrew/homebrew#38792. Signed-off-by: Xu Cheng --- Library/Homebrew/cmd/postinstall.rb | 6 +++++- Library/Homebrew/cmd/test.rb | 6 +++++- Library/Homebrew/formula_installer.rb | 6 +++++- Library/Homebrew/sandbox.rb | 12 ++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/cmd/postinstall.rb b/Library/Homebrew/cmd/postinstall.rb index 1936f25ea3..337fc62be8 100644 --- a/Library/Homebrew/cmd/postinstall.rb +++ b/Library/Homebrew/cmd/postinstall.rb @@ -15,8 +15,12 @@ module Homebrew #{formula.path} ].concat(ARGV.options_only) + if Sandbox.available? && ARGV.sandbox? && Sandbox.auto_disable? + Sandbox.print_autodisable_warning + end + Utils.safe_fork do - if Sandbox.available? && ARGV.sandbox? + if Sandbox.available? && ARGV.sandbox? && !Sandbox.auto_disable? 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 2bc0107cbd..d298452fff 100644 --- a/Library/Homebrew/cmd/test.rb +++ b/Library/Homebrew/cmd/test.rb @@ -35,8 +35,12 @@ module Homebrew #{f.path} ].concat(ARGV.options_only) + if Sandbox.available? && ARGV.sandbox? && Sandbox.auto_disable? + Sandbox.print_autodisable_warning + end + Utils.safe_fork do - if Sandbox.available? && ARGV.sandbox? + if Sandbox.available? && ARGV.sandbox? && !Sandbox.auto_disable? 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 a6264ee62e..92023028eb 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -486,8 +486,12 @@ class FormulaInstaller #{formula.path} ].concat(build_argv) + if Sandbox.available? && ARGV.sandbox? && Sandbox.auto_disable? + Sandbox.print_autodisable_warning + end + Utils.safe_fork do - if Sandbox.available? && ARGV.sandbox? + if Sandbox.available? && ARGV.sandbox? && !Sandbox.auto_disable? 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 ab9f5f16fc..3affa4f954 100644 --- a/Library/Homebrew/sandbox.rb +++ b/Library/Homebrew/sandbox.rb @@ -8,6 +8,18 @@ class Sandbox OS.mac? && File.executable?(SANDBOX_EXEC) end + # there are times the sandbox cannot be used. + def self.auto_disable? + @auto_disable ||= ARGV.interactive? || ARGV.debug? + end + + def self.print_autodisable_warning + unless @print_autodisable_warning + opoo "The sandbox cannot be used in debug or interactive mode." + @print_autodisable_warning = true + end + end + def initialize @profile = SandboxProfile.new end