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

[PATCH 3/6] git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode argument.

From
Matthieu Moy <matthieu.moy@imag.fr>
Date
Feb 22, 2010, 22:32 UTC
Message-ID
<1266877936-13537-4-git-send-email-Matthieu.Moy@imag.fr>
In-Reply-To
<1266597207-32036-1-git-send-email-Matthieu.Moy@imag.fr>

gitmkstemps emulates the behavior of mkstemps, which is usually used to create files in a shared directory like /tmp/, hence, it creates files with permission 0600.

Add git_mkstemps_mode() that allows us to specify the desired mode, and make git_mkstemps() a wrapper that always uses 0600 to call it. Later we will use git_mkstemps_mode() when creating pack files.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
---
 cache.h   |    4 ++++
 path.c    |   16 ++++++++++++++--
 wrapper.c |   10 ++++++++++
 3 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/cache.h b/cache.h
index d478eff..0319637 100644
--- a/cache.h
+++ b/cache.h
@@ -641,6 +641,10 @@ int git_mkstemp(char *path, size_t n, const char *template);
 
 int git_mkstemps(char *path, size_t n, const char *template, int suffix_len);
 
+/* set default permissions by passing mode arguments to open(2) */
+int git_mkstemps_mode(char *pattern, int suffix_len, int mode);
+int git_mkstemp_mode(char *pattern, int mode);
+
 /*
  * NOTE NOTE NOTE!!
  *
diff --git a/path.c b/path.c
index ab2e368..925039a 100644
--- a/path.c
+++ b/path.c
@@ -162,7 +162,7 @@ int git_mkstemps(char *path, size_t len, const char *template, int suffix_len)
 #undef TMP_MAX
 #define TMP_MAX 16384
 
-int gitmkstemps(char *pattern, int suffix_len)
+int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
 {
 	static const char letters[] =
 		"abcdefghijklmnopqrstuvwxyz"
@@ -204,7 +204,7 @@ int gitmkstemps(char *pattern, int suffix_len)
 		template[4] = letters[v % num_letters]; v /= num_letters;
 		template[5] = letters[v % num_letters]; v /= num_letters;
 
-		fd = open(pattern, O_CREAT | O_EXCL | O_RDWR, 0600);
+		fd = open(pattern, O_CREAT | O_EXCL | O_RDWR, mode);
 		if (fd > 0)
 			return fd;
 		/*
@@ -226,6 +226,17 @@ int gitmkstemps(char *pattern, int suffix_len)
 	return -1;
 }
 
+int git_mkstemp_mode(char *pattern, int mode)
+{
+	/* mkstemp is just mkstemps with no suffix */
+	return git_mkstemps_mode(pattern, 0, mode);
+}
+
+int gitmkstemps(char *pattern, int suffix_len)
+{
+	return git_mkstemps_mode(pattern, suffix_len, 0600);
+}
+
 int validate_headref(const char *path)
 {
 	struct stat st;
@@ -718,3 +729,4 @@ int daemon_avoid_alias(const char *p)
 		}
 	}
 }
+
diff --git a/wrapper.c b/wrapper.c
index 0e3e20a..673762f 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -204,6 +204,16 @@ int xmkstemp(char *template)
 	return fd;
 }
 
+int xmkstemp_mode(char *template, int mode)
+{
+	int fd;
+
+	fd = git_mkstemp_mode(template, mode);
+	if (fd < 0)
+		die_errno("Unable to create temporary file");
+	return fd;
+}
+
 /*
  * zlib wrappers to make sure we don't silently miss errors
  * at init time.
-- 
1.7.0.54.gb6a04.dirty
Previous: Matthieu MoyNext: Matthieu Moy
Message 15 of 18 in “Allow Git repositories to be shared using POSIX ACLs”
  1. 0/4 Allow Git repositories to be shared using POSIX ACLsMatthieu Moy, Feb 19, 2010
  2. 1/4 Add a testcase for ACL with restrictive umask.Matthieu Moy, Feb 19, 2010
  3. 2/4 Move gitmkstemps to path.cMatthieu Moy, Feb 19, 2010
  4. 3/4 git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode argument.Matthieu Moy, Feb 19, 2010
  5. 4/4 Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp, not chmod later.Matthieu Moy, Feb 19, 2010
  6. Junio C HamanoFeb 20, 2010
  7. Matthieu MoyFeb 22, 2010
  8. Junio C HamanoFeb 22, 2010
  9. Junio C HamanoFeb 22, 2010
  10. Matthieu MoyFeb 22, 2010
  11. Junio C HamanoFeb 19, 2010
  12. 0/6 Allow Git repositories to be shared using POSIX ACLsMatthieu Moy, Feb 22, 2010
  13. 1/6 Add a testcase for ACL with restrictive umask.Matthieu Moy, Feb 22, 2010
  14. 2/6 Move gitmkstemps to path.cMatthieu Moy, Feb 22, 2010
  15. 3/6 git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode argument.Matthieu Moy, Feb 22, 2010
  16. 4/6 Use git_mkstemp_mode and xmkstemp_mode in odb_mkstemp, not chmod later.Matthieu Moy, Feb 22, 2010
  17. 5/6 git_mkstemps_mode: don't set errno to EINVAL on exit.Matthieu Moy, Feb 22, 2010
  18. 6/6 Use git_mkstemp_mode instead of plain mkstemp to create object filesMatthieu Moy, Feb 22, 2010

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.