-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Various fixes around safe.directory
#3791
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
Changes from all commits
1bdb9e3
5d60f3c
93310f0
e64daf2
109ae35
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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -1100,9 +1100,14 @@ static int safe_directory_cb(const char *key, const char *value, void *d) | |||||||||||||
{ | ||||||||||||||
struct safe_directory_data *data = d; | ||||||||||||||
|
||||||||||||||
if (!value || !*value) | ||||||||||||||
if (strcmp(key, "safe.directory")) | ||||||||||||||
return 0; | ||||||||||||||
|
||||||||||||||
if (!value || !*value) { | ||||||||||||||
data->is_safe = 0; | ||||||||||||||
else { | ||||||||||||||
} else if (!strcmp(value, "*")) { | ||||||||||||||
data->is_safe = 1; | ||||||||||||||
} else { | ||||||||||||||
const char *interpolated = NULL; | ||||||||||||||
|
||||||||||||||
if (!git_config_pathname(&interpolated, key, value) && | ||||||||||||||
|
@@ -1119,7 +1124,8 @@ static int ensure_valid_ownership(const char *path) | |||||||||||||
{ | ||||||||||||||
struct safe_directory_data data = { .path = path }; | ||||||||||||||
|
||||||||||||||
if (is_path_owned_by_current_user(path)) | ||||||||||||||
if (is_path_owned_by_current_user(path) && | ||||||||||||||
!git_env_bool("GIT_TEST_ASSUME_DIFFERENT_OWNER", 0)) | ||||||||||||||
return 1; | ||||||||||||||
|
||||||||||||||
read_very_early_config(safe_directory_cb, &data); | ||||||||||||||
|
@@ -1368,9 +1374,17 @@ const char *setup_git_directory_gently(int *nongit_ok) | |||||||||||||
break; | ||||||||||||||
case GIT_DIR_INVALID_OWNERSHIP: | ||||||||||||||
if (!nongit_ok) { | ||||||||||||||
struct strbuf prequoted = STRBUF_INIT; | ||||||||||||||
struct strbuf quoted = STRBUF_INIT; | ||||||||||||||
|
||||||||||||||
sq_quote_buf_pretty("ed, dir.buf); | ||||||||||||||
#ifdef __MINGW32__ | ||||||||||||||
if (dir.buf[0] == '/') | ||||||||||||||
strbuf_addstr(&prequoted, "%(prefix)/"); | ||||||||||||||
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. If this turns out to be the necessary solution we need to prepend 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 do need to add the
Then, we do add this to the quoted output because 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. Should we be more stringent and require two slashes before doing 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. I was using this hunk as a precedent for a single slash: Lines 742 to 747 in 3f8d163
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.
Right, I'm sorry, I'm not being terribly clear, it's late. What I meant was that with this change (if I'm reading it correctly) the output from the warning for a WSL path will be something like
I.e the first path within the first line parenthesis will not have I'm suggesting we swap out 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. Ah, I get what you're saying now, @niik. I'm not sure that adding |
||||||||||||||
#endif | ||||||||||||||
|
||||||||||||||
strbuf_add(&prequoted, dir.buf, dir.len); | ||||||||||||||
sq_quote_buf_pretty("ed, prequoted.buf); | ||||||||||||||
|
||||||||||||||
die(_("unsafe repository ('%s' is owned by someone else)\n" | ||||||||||||||
"To add an exception for this directory, call:\n" | ||||||||||||||
"\n" | ||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#!/bin/sh | ||
|
||
test_description='verify safe.directory checks' | ||
|
||
. ./test-lib.sh | ||
|
||
GIT_TEST_ASSUME_DIFFERENT_OWNER=1 | ||
export GIT_TEST_ASSUME_DIFFERENT_OWNER | ||
|
||
expect_rejected_dir () { | ||
test_must_fail git status 2>err && | ||
grep "safe.directory" err | ||
} | ||
|
||
test_expect_success 'safe.directory is not set' ' | ||
expect_rejected_dir | ||
' | ||
|
||
test_expect_success 'safe.directory does not match' ' | ||
git config --global safe.directory bogus && | ||
expect_rejected_dir | ||
' | ||
|
||
test_expect_success 'path exist as different key' ' | ||
git config --global foo.bar "$(pwd)" && | ||
expect_rejected_dir | ||
' | ||
|
||
test_expect_success 'safe.directory matches' ' | ||
git config --global --add safe.directory "$(pwd)" && | ||
git status | ||
' | ||
|
||
test_expect_success 'safe.directory matches, but is reset' ' | ||
git config --global --add safe.directory "" && | ||
expect_rejected_dir | ||
' | ||
|
||
test_expect_success 'safe.directory=*' ' | ||
git config --global --add safe.directory "*" && | ||
git status | ||
' | ||
|
||
test_expect_success 'safe.directory=*, but is reset' ' | ||
git config --global --add safe.directory "" && | ||
expect_rejected_dir | ||
' | ||
|
||
test_done |
Uh oh!
There was an error while loading. Please reload this page.