diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2011-07-18 14:01:36 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2011-07-18 14:01:36 -0700 |
commit | 15e3a074a6ebdcefd828a1ba14a5a12ff9921034 (patch) | |
tree | c8bfe3d2fc0cede440a408876040910563de678e | |
parent | 41bed37d157e1a7bdc519bfc3668d59be5b05402 (diff) | |
download | emacs-15e3a074a6ebdcefd828a1ba14a5a12ff9921034.tar.gz emacs-15e3a074a6ebdcefd828a1ba14a5a12ff9921034.tar.bz2 emacs-15e3a074a6ebdcefd828a1ba14a5a12ff9921034.zip |
* fileio.c (Fcopy_file) [!MSDOS]: Tighten created file's mask.
This fixes some race conditions on the permissions of any newly
created file.
-rw-r--r-- | src/ChangeLog | 4 | ||||
-rw-r--r-- | 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 <eggert@cs.ucla.edu> + * 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)); |