git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 4/2] config: exit on error accessing any config file

From
Jonathan Nieder <jrnieder@gmail.com>
Date
Oct 14, 2012, 08:46 UTC
Message-ID
<20121014084600.GC7190@elie.Belkin>
In-Reply-To
<20121014084244.GA7190@elie.Belkin>

There is convenience in warning and moving on when somebody has a bogus permissions on /etc/gitconfig and cannot do anything about it. But the cost in predictability and security is too high --- when unreadable config files are skipped, it means an I/O error or permissions problem causes important configuration to be bypassed.

For example, servers may depend on /etc/gitconfig to enforce security policy (setting transfer.fsckObjects or receive.deny*). Best to always error out when encountering trouble accessing a config file.

This may add inconvenience in some cases:
  1. You are inspecting somebody else's repo, and you do not have
     access to their .git/config file.  Git typically dies in this
     case already since we cannot read core.repositoryFormatVersion,
     so the change should not be too noticeable.
  2. You have used "sudo -u" or a similar tool to switch uid, and your
     environment still points Git at your original user's global
     config, which is not readable.  In this case people really would
     be inconvenienced (they would rather see the harmless warning and
     continue the operation) but they can work around it by setting
     HOME appropriately after switching uids.
  3. You do not have access to /etc/gitconfig due to a broken setup.
     In this case, erroring out is a good way to put pressure on the
     sysadmin to fix the setup.  While they wait for a reply, users
     can set GIT_CONFIG_NOSYSTEM to true to keep Git working without
     complaint.

After this patch, errors accessing the repository-local and systemwide config files and files requested in include directives cause Git to exit, just like errors accessing ~/.gitconfig.

Explained-by: Jeff King <peff@peff.net>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 config.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/config.c b/config.c
index e8875b8a..a4d153f6 100644
--- a/config.c
+++ b/config.c
@@ -60,7 +60,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc
 		path = buf.buf;
 	}
 
-	if (!access_or_warn(path, R_OK)) {
+	if (!access_or_die(path, R_OK)) {
 		if (++inc->depth > MAX_INCLUDE_DEPTH)
 			die(include_depth_advice, MAX_INCLUDE_DEPTH, path,
 			    cf && cf->name ? cf->name : "the command line");
@@ -939,7 +939,7 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config)
 
 	home_config_paths(&user_config, &xdg_config, "config");
 
-	if (git_config_system() && !access_or_warn(git_etc_gitconfig(), R_OK)) {
+	if (git_config_system() && !access_or_die(git_etc_gitconfig(), R_OK)) {
 		ret += git_config_from_file(fn, git_etc_gitconfig(),
 					    data);
 		found += 1;
@@ -955,7 +955,7 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config)
 		found += 1;
 	}
 
-	if (repo_config && !access_or_warn(repo_config, R_OK)) {
+	if (repo_config && !access_or_die(repo_config, R_OK)) {
 		ret += git_config_from_file(fn, repo_config, data);
 		found += 1;
 	}
-- 
1.8.0.rc2
Previous: Jonathan NiederNext: Jeff King
Message 8 of 13 in “Re: [PATCH] config: warn on inaccessible files”
  1. 0/2 Re: [PATCH] config: warn on inaccessible filesJonathan Nieder, Oct 14, 2012
  2. 1/2 config, gitignore: failure to access with ENOTDIR is okJonathan Nieder, Oct 14, 2012
  3. 2/2 config: treat user and xdg config permission problems as errorsJonathan Nieder, Oct 14, 2012
  4. Jeff KingOct 14, 2012
  5. Jonathan NiederOct 14, 2012
  6. 3/2 config doc: advertise GIT_CONFIG_NOSYSTEMJonathan Nieder, Oct 14, 2012
  7. 3/2 doc: advertise GIT_CONFIG_NOSYSTEMJonathan Nieder, Oct 14, 2012
  8. 4/2 config: exit on error accessing any config fileJonathan Nieder, Oct 14, 2012
  9. Jeff KingOct 14, 2012
  10. Junio C HamanoOct 14, 2012
  11. Jeff KingOct 14, 2012
  12. Jonathan NiederOct 14, 2012
  13. Jeff KingOct 14, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.