summaryrefslogtreecommitdiff
path: root/config.c
diff options
context:
space:
mode:
authorJonathan Nieder <jrnieder@gmail.com>2012-10-14 00:04:02 (GMT)
committerJunio C Hamano <gitster@pobox.com>2012-10-14 04:59:16 (GMT)
commit96b9e0e313604f77456906ce58db8f366e47f2ab (patch)
tree67632a6ba4f7918ae40b58519dfa3ea3f794af4f /config.c
parente5c52c9898de5f829317729afc0416825531b0d5 (diff)
downloadgit-96b9e0e313604f77456906ce58db8f366e47f2ab.zip
git-96b9e0e313604f77456906ce58db8f366e47f2ab.tar.gz
git-96b9e0e313604f77456906ce58db8f366e47f2ab.tar.bz2
config: treat user and xdg config permission problems as errors
Git reads multiple configuration files: settings come first from the system config file (typically /etc/gitconfig), then the xdg config file (typically ~/.config/git/config), then the user's dotfile (~/.gitconfig), then the repository configuration (.git/config). Git has always used access(2) to decide whether to use each file; as an unfortunate side effect, that means that if one of these files is unreadable (e.g., EPERM or EIO), git skips it. So if I use ~/.gitconfig to override some settings but make a mistake and give it the wrong permissions then I am subject to the settings the sysadmin chose for /etc/gitconfig. Better to error out and ask the user to correct the problem. This only affects the user and xdg config files, since the user presumably has enough access to fix their permissions. If the system config file is unreadable, the best we can do is to warn about it so the user knows to notify someone and get on with work in the meantime. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'config.c')
-rw-r--r--config.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/config.c b/config.c
index 08e47e2..e8875b8 100644
--- a/config.c
+++ b/config.c
@@ -945,12 +945,12 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config)
found += 1;
}
- if (xdg_config && !access_or_warn(xdg_config, R_OK)) {
+ if (xdg_config && !access_or_die(xdg_config, R_OK)) {
ret += git_config_from_file(fn, xdg_config, data);
found += 1;
}
- if (user_config && !access_or_warn(user_config, R_OK)) {
+ if (user_config && !access_or_die(user_config, R_OK)) {
ret += git_config_from_file(fn, user_config, data);
found += 1;
}