config: set TMPDIR, TEMP and TMP to HOMEBREW_TEMP

TMPDIR, TEMP and TMP (when set) are not whitelisted for writing in
sandbox.rb, which could result in sandbox violations when programs
attempt to write to these locations.

Setting TMPDIR, TEMP and TMP to HOMEBREW_TEMP (which defaults to /tmp
when not set) works around the aforementioned problem and also improves
uniformity in the locations of tempfiles created during Homebrew
operations.

Caveat: Non-matching HOMEBREW_TEMP and TMPDIR could lead to undesirable
side effects in certain cases, e.g., emacsclient not being able to find
an existing server (whose socket lives in $TMPDIR/emacs$UID/) when
launched through brew edit.
This commit is contained in:
Zhiming Wang 2016-08-24 12:59:57 +08:00
parent 31052a924f
commit 9f072a92d5
No known key found for this signature in database
GPG Key ID: BBD31D4D110044B8

View File

@ -35,6 +35,11 @@ HOMEBREW_LOGS = Pathname.new(ENV["HOMEBREW_LOGS"] || "~/Library/Logs/Homebrew/")
# Must use /tmp instead of $TMPDIR because long paths break Unix domain sockets
HOMEBREW_TEMP = Pathname.new(ENV.fetch("HOMEBREW_TEMP", "/tmp"))
# Set common tmpdir environment variables to HOMEBREW_TEMP
ENV["TMPDIR"] = HOMEBREW_TEMP
ENV["TEMP"] = HOMEBREW_TEMP
ENV["TMP"] = HOMEBREW_TEMP
unless defined? HOMEBREW_LIBRARY_PATH
# Root of the Homebrew code base
HOMEBREW_LIBRARY_PATH = Pathname.new(__FILE__).realpath.parent