issue/32 fchmod() does not respect umask
diff --git a/libasn1compiler/asn1c_compat.c b/libasn1compiler/asn1c_compat.c
index 8cb78cd..be0f121 100644
--- a/libasn1compiler/asn1c_compat.c
+++ b/libasn1compiler/asn1c_compat.c
@@ -5,11 +5,21 @@
#define MAXPATHLEN 1024
#endif
+/* Normally file permissions are (DEFFILEMODE & ~umask(2)) */
#ifndef DEFFILEMODE /* Normally in <sys/stat.h> */
+
#ifdef _WIN32
#define DEFFILEMODE (S_IREAD|S_IWRITE)
+#define REASONABLE_FILE_MODE DEFFILEMODE
#else
#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
+#define REASONABLE_FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
+#endif
+#else /* !DEFFILEMODE */
+#ifdef _WIN32
+#define REASONABLE_FILE_MODE DEFFILEMODE
+#else
+#define REASONABLE_FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
#endif
#endif
@@ -56,7 +66,8 @@
*/
fd = mkstemp(fname);
#ifndef _WIN32
- (void)fchmod(fd, DEFFILEMODE);
+ /* fchmod() does not respect umask */
+ (void)fchmod(fd, REASONABLE_FILE_MODE);
#endif
} else {
/*