[PATCH] Preserve the protection mode for the Git config files
From: Catalin Marinas <catalin.marinas@arm.com>
Date: 2016-06-15 22:47:04
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Catalin Marinas <catalin.marinas@arm.com>
Date: 2016-06-15 22:47:04
Subsystem:
the rest · Maintainer:
Linus Torvalds
Every time an option is set, the config file protection mode is changed to 0666 & ~umask even if it was different before. This patch is useful if people store passwords (SMTP server in the StGit case) and do not want others to read the .gitconfig file. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> --- lockfile.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/lockfile.c b/lockfile.c
index eb931ed..87ee233 100644
--- a/lockfile.c
+++ b/lockfile.c@@ -124,8 +124,12 @@ static char *resolve_symlink(char *p, size_t s) static int lock_file(struct lock_file *lk, const char *path, int flags) { + struct stat st; + if (strlen(path) >= sizeof(lk->filename)) return -1; + if (stat(path, &st) < 0) + st.st_mode = 0666; strcpy(lk->filename, path); /* * subtract 5 from size to make sure there's room for adding
@@ -134,7 +138,7 @@ static int lock_file(struct lock_file *lk, const char *path, int flags) if (!(flags & LOCK_NODEREF)) resolve_symlink(lk->filename, sizeof(lk->filename)-5); strcat(lk->filename, ".lock"); - lk->fd = open(lk->filename, O_RDWR | O_CREAT | O_EXCL, 0666); + lk->fd = open(lk->filename, O_RDWR | O_CREAT | O_EXCL, st.st_mode); if (0 <= lk->fd) { if (!lock_file_list) { sigchain_push_common(remove_lock_file_on_signal);