From 15e3a074a6ebdcefd828a1ba14a5a12ff9921034 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 18 Jul 2011 14:01:36 -0700 Subject: [PATCH] * fileio.c (Fcopy_file) [!MSDOS]: Tighten created file's mask. This fixes some race conditions on the permissions of any newly created file. --- src/ChangeLog | 4 ++++ src/fileio.c | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index ca42b696f9c..484a4420363 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2011-07-18 Paul Eggert + * fileio.c (Fcopy_file) [!MSDOS]: Tighten created file's mask. + This fixes some race conditions on the permissions of any newly + created file. + * alloc.c (valid_pointer_p): Use pipe, not open. This fixes some permissions issues when debugging. diff --git a/src/fileio.c b/src/fileio.c index fb2c081ae5c..3e1aa54462f 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -1937,10 +1937,19 @@ on the system, we copy the SELinux context of FILE to NEWNAME. */) | (NILP (ok_if_already_exists) ? O_EXCL : 0), S_IREAD | S_IWRITE); #else /* not MSDOS */ - ofd = emacs_open (SSDATA (encoded_newname), - O_WRONLY | O_TRUNC | O_CREAT - | (NILP (ok_if_already_exists) ? O_EXCL : 0), - 0666); + { + int new_mask = 0666; + if (input_file_statable_p) + { + if (!NILP (preserve_uid_gid)) + new_mask = 0600; + new_mask &= st.st_mode; + } + ofd = emacs_open (SSDATA (encoded_newname), + (O_WRONLY | O_TRUNC | O_CREAT + | (NILP (ok_if_already_exists) ? O_EXCL : 0)), + new_mask); + } #endif /* not MSDOS */ if (ofd < 0) report_file_error ("Opening output file", Fcons (newname, Qnil)); -- 2.39.2