-
-
Notifications
You must be signed in to change notification settings - Fork 10.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
brew.sh: Don't allow system tmp dirs as prefixes #4397
Changes from 3 commits
35138dd
949c0cc
42bd544
b6a0b04
c552e65
696a1d1
d7cdc9b
8e4aab9
72bc6b1
a8bcb5d
039a4ee
bde7c6b
68d3dc1
fd01415
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -144,6 +144,7 @@ export HOMEBREW_BREW_FILE | |
export HOMEBREW_PREFIX | ||
export HOMEBREW_REPOSITORY | ||
export HOMEBREW_LIBRARY | ||
export HOMEBREW_TEMP | ||
|
||
# Declared in brew.sh | ||
export HOMEBREW_VERSION | ||
|
@@ -295,7 +296,7 @@ EOS | |
check-run-command-as-root | ||
|
||
check-prefix-is-not-tmpdir() { | ||
if [[ $(realpath "${HOMEBREW_PREFIX}") = /private/tmp/* ]] | ||
if [[ "${HOMEBREW_PREFIX}" = "${HOMEBREW_TEMP}"* ]] | ||
then | ||
odie <<EOS | ||
Your HOMEBREW_PREFIX is in the system temporary directory, which Homebrew | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe worth just saying e.g. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I thought that the connection between The relocation code at fault isn't used on Linux, so Linuxbrew users might not encounter this problem at all. I'll confirm that in a bit with some local testing. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
We should ensure that the wording makes that clear and the logic is as minimal as possible to the actual problems we've seen people experience. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The issue is when the prefix is in the |
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -39,7 +39,7 @@ | |
HOMEBREW_LOGS = Pathname.new(ENV["HOMEBREW_LOGS"] || "~/Library/Logs/Homebrew/").expand_path | ||
|
||
# Must use /tmp instead of $TMPDIR because long paths break Unix domain sockets | ||
HOMEBREW_TEMP = Pathname.new(ENV.fetch("HOMEBREW_TEMP", "/tmp")) | ||
HOMEBREW_TEMP = Pathname.new(ENV.fetch("HOMEBREW_TEMP", "/tmp")).realpath | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This will never be unset/set to |
||
|
||
unless defined? HOMEBREW_LIBRARY_PATH | ||
# Root of the Homebrew code base | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,6 +21,7 @@ symlink_target_directory() { | |
BREW_FILE_DIRECTORY="$(quiet_cd "${0%/*}/" && pwd -P)" | ||
HOMEBREW_BREW_FILE="${BREW_FILE_DIRECTORY%/}/${0##*/}" | ||
HOMEBREW_PREFIX="${HOMEBREW_BREW_FILE%/*/*}" | ||
HOMEBREW_TEMP="${HOMEBREW_TEMP:-/private/tmp}" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Will this upset Linux? Worth setting in There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, |
||
|
||
# Default to / prefix if unset or the bin/brew file. | ||
if [[ -z "$HOMEBREW_PREFIX" || "$HOMEBREW_PREFIX" = "$HOMEBREW_BREW_FILE" ]] | ||
|
@@ -72,7 +73,7 @@ then | |
|
||
FILTERED_ENV=() | ||
# Filter all but the specific variables. | ||
for VAR in HOME SHELL PATH TERM COLUMNS LOGNAME USER CI TRAVIS SSH_AUTH_SOCK SUDO_ASKPASS \ | ||
for VAR in HOME SHELL PATH TEMP TERM COLUMNS LOGNAME USER CI TRAVIS SSH_AUTH_SOCK SUDO_ASKPASS \ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why do we want to add this? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh, I misread this code. I thought this was explicitly whitelisting |
||
http_proxy https_proxy ftp_proxy no_proxy all_proxy HTTPS_PROXY FTP_PROXY ALL_PROXY \ | ||
"${!HOMEBREW_@}" "${!TRAVIS_@}" | ||
do | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This wants guarded to macOS only, check against the system temp rather than just
HOMEBREW_TEMP
(maybe aHOMEBREW_SYSTEM_TEMP
var?) and use that directory in the output, too.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
HOMEBREW_SYSTEM_TEMP
could be potentially used whereverprivate/tmp
is hardcoded, too.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I might be misunderstanding, but: won't this leave open the case where they set both their prefix and their temp to something weird, e.g.,
$HOME
? We want to stop all situations where Homebrew is both installing to and using the same prefix as a temporary directory, not just/private/tmp
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@woodruffw Ok so is it fine to e.g. have the prefix in
/tmp
ifHOMEBREW_TEMP
is set elsewhere?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, exactly.