21
									
								
								Documentation/RelNotes/2.30.4.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								Documentation/RelNotes/2.30.4.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | Git v2.30.4 Release Notes | ||||||
|  | ========================= | ||||||
|  |  | ||||||
|  | This release contains minor fix-ups for the changes that went into | ||||||
|  | Git 2.30.3, which was made to address CVE-2022-24765. | ||||||
|  |  | ||||||
|  |  * The code that was meant to parse the new `safe.directory` | ||||||
|  |    configuration variable was not checking what configuration | ||||||
|  |    variable was being fed to it, which has been corrected. | ||||||
|  |  | ||||||
|  |  * '*' can be used as the value for the `safe.directory` variable to | ||||||
|  |    signal that the user considers that any directory is safe. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Derrick Stolee (2): | ||||||
|  |       t0033: add tests for safe.directory | ||||||
|  |       setup: opt-out of check with safe.directory=* | ||||||
|  |  | ||||||
|  | Matheus Valadares (1): | ||||||
|  |       setup: fix safe.directory key not being checked | ||||||
							
								
								
									
										4
									
								
								Documentation/RelNotes/2.31.3.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Documentation/RelNotes/2.31.3.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | Git Documentation/RelNotes/2.31.3.txt Release Notes | ||||||
|  | ========================= | ||||||
|  |  | ||||||
|  | This release merges up the fixes that appear in v2.31.3. | ||||||
							
								
								
									
										4
									
								
								Documentation/RelNotes/2.32.2.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Documentation/RelNotes/2.32.2.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | Git Documentation/RelNotes/2.32.2.txt Release Notes | ||||||
|  | ========================= | ||||||
|  |  | ||||||
|  | This release merges up the fixes that appear in v2.32.2. | ||||||
| @ -19,3 +19,10 @@ line option `-c safe.directory=<path>`. | |||||||
| The value of this setting is interpolated, i.e. `~/<path>` expands to a | The value of this setting is interpolated, i.e. `~/<path>` expands to a | ||||||
| path relative to the home directory and `%(prefix)/<path>` expands to a | path relative to the home directory and `%(prefix)/<path>` expands to a | ||||||
| path relative to Git's (runtime) prefix. | path relative to Git's (runtime) prefix. | ||||||
|  | + | ||||||
|  | To completely opt-out of this security check, set `safe.directory` to the | ||||||
|  | string `*`. This will allow all repositories to be treated as if their | ||||||
|  | directory was listed in the `safe.directory` list. If `safe.directory=*` | ||||||
|  | is set in system config and you want to re-enable this protection, then | ||||||
|  | initialize your list with an empty value before listing the repositories | ||||||
|  | that you deem safe. | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
|  |  | ||||||
| GVF=GIT-VERSION-FILE | GVF=GIT-VERSION-FILE | ||||||
| DEF_VER=v2.32.1 | DEF_VER=v2.32.2 | ||||||
|  |  | ||||||
| LF=' | LF=' | ||||||
| ' | ' | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								setup.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								setup.c
									
									
									
									
									
								
							| @ -1034,9 +1034,14 @@ static int safe_directory_cb(const char *key, const char *value, void *d) | |||||||
| { | { | ||||||
| 	struct safe_directory_data *data = d; | 	struct safe_directory_data *data = d; | ||||||
|  |  | ||||||
| 	if (!value || !*value) | 	if (strcmp(key, "safe.directory")) | ||||||
|  | 		return 0; | ||||||
|  |  | ||||||
|  | 	if (!value || !*value) { | ||||||
| 		data->is_safe = 0; | 		data->is_safe = 0; | ||||||
| 	else { | 	} else if (!strcmp(value, "*")) { | ||||||
|  | 		data->is_safe = 1; | ||||||
|  | 	} else { | ||||||
| 		const char *interpolated = NULL; | 		const char *interpolated = NULL; | ||||||
|  |  | ||||||
| 		if (!git_config_pathname(&interpolated, key, value) && | 		if (!git_config_pathname(&interpolated, key, value) && | ||||||
| @ -1053,7 +1058,8 @@ static int ensure_valid_ownership(const char *path) | |||||||
| { | { | ||||||
| 	struct safe_directory_data data = { .path = path }; | 	struct safe_directory_data data = { .path = path }; | ||||||
|  |  | ||||||
| 	if (is_path_owned_by_current_user(path)) | 	if (!git_env_bool("GIT_TEST_ASSUME_DIFFERENT_OWNER", 0) && | ||||||
|  | 	    is_path_owned_by_current_user(path)) | ||||||
| 		return 1; | 		return 1; | ||||||
|  |  | ||||||
| 	read_very_early_config(safe_directory_cb, &data); | 	read_very_early_config(safe_directory_cb, &data); | ||||||
|  | |||||||
							
								
								
									
										49
									
								
								t/t0033-safe-directory.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										49
									
								
								t/t0033-safe-directory.sh
									
									
									
									
									
										Executable file
									
								
							| @ -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 | ||||||
		Reference in New Issue
	
	Block a user
	 Junio C Hamano
					Junio C Hamano