From fa0105f78c9204d72cb0cd68c20d5f390b2a044b Mon Sep 17 00:00:00 2001 From: Martijn Dekker Date: Mon, 26 Mar 2018 22:32:50 +0200 Subject: 42538: Temporarily set umask for here document. Done while signals are queued. --- ChangeLog | 6 ++++++ Src/utils.c | 4 ++++ Test/A04redirect.ztst | 9 +++++++++ 3 files changed, 19 insertions(+) diff --git a/ChangeLog b/ChangeLog index 4ac19f9d9..e36a0d49f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2018-03-27 Peter Stephenson + + * Martijn: 42538: Src/utils.c, Test/A04redirect.ztst: + temporarily set umask (with signals queued) while reading + here document. + 2018-03-25 Barton E. Schaefer * 42480: Src/utils.c: optimize $#var for single-byte character sets diff --git a/Src/utils.c b/Src/utils.c index 6517e15b8..466014263 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -2177,10 +2177,12 @@ gettempfile(const char *prefix, int use_heap, char **tempname) { char *fn; int fd; + mode_t old_umask; #if HAVE_MKSTEMP char *suffix = prefix ? ".XXXXXX" : "XXXXXX"; queue_signals(); + old_umask = umask(0177); if (!prefix && !(prefix = getsparam("TMPPREFIX"))) prefix = DEFAULT_TMPPREFIX; if (use_heap) @@ -2198,6 +2200,7 @@ gettempfile(const char *prefix, int use_heap, char **tempname) int failures = 0; queue_signals(); + old_umask = umask(0177); do { if (!(fn = gettempname(prefix, use_heap))) { fd = -1; @@ -2212,6 +2215,7 @@ gettempfile(const char *prefix, int use_heap, char **tempname) #endif *tempname = fn; + umask(old_umask); unqueue_signals(); return fd; } diff --git a/Test/A04redirect.ztst b/Test/A04redirect.ztst index ef7ddb25a..b5b65cf5d 100644 --- a/Test/A04redirect.ztst +++ b/Test/A04redirect.ztst @@ -667,3 +667,12 @@ 0:Redirect in the middle of assignments >b >d + + umask 0777 + cat <<' HERE' + look ma, no permissions + HERE + cat <<<"it's a miracle" +0:Here-{string,document}s succeed with restrictive umask +> look ma, no permissions +>it's a miracle -- cgit 1.4.1