stagit

My fork of stagit

git clone git://git.shimmy1996.com/stagit.git
commit 26bd89f681b631ce3596148c9320c3208e16f8e9
parent 1bab6952c6dcac50e66418f117032bb0f627d559
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Fri, 10 Nov 2017 20:55:20 +0100

fix file permissions for cachefile and respect umask(2)

Diffstat:
Mstagit.c | 12++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/stagit.c b/stagit.c
@@ -1,4 +1,5 @@
 #include <sys/stat.h>
+#include <sys/types.h>
 
 #include <err.h>
 #include <errno.h>
@@ -995,6 +996,7 @@ main(int argc, char *argv[])
 	git_object *obj = NULL;
 	const git_oid *head = NULL;
 	const git_error *e = NULL;
+	mode_t mask;
 	FILE *fp, *fpread;
 	char path[PATH_MAX], repodirabs[PATH_MAX + 1], *p;
 	char tmppath[64] = "cache.XXXXXXXXXXXX", buf[BUFSIZ];
@@ -1165,8 +1167,14 @@ main(int argc, char *argv[])
 	fclose(fp);
 
 	/* rename new cache file on success */
-	if (cachefile && rename(tmppath, cachefile))
-		err(1, "rename: '%s' to '%s'", tmppath, cachefile);
+	if (cachefile) {
+		if (rename(tmppath, cachefile))
+			err(1, "rename: '%s' to '%s'", tmppath, cachefile);
+		umask((mask = umask(0)));
+		if (chmod(cachefile,
+		    (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) & ~mask))
+			err(1, "chmod: '%s'", cachefile);
+	}
 
 	/* cleanup */
 	git_repository_free(repo);