[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#10403: epg--make-temp-file permissions race condition fixes
From: |
Chong Yidong |
Subject: |
bug#10403: epg--make-temp-file permissions race condition fixes |
Date: |
Sat, 07 Jan 2012 15:12:25 +0800 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.0.92 (gnu/linux) |
Could you review the patch posted by Paul? Thanks.
Paul Eggert <eggert@cs.ucla.edu> writes:
> === modified file 'lisp/ChangeLog'
> --- lisp/ChangeLog 2011-12-29 21:55:33 +0000
> +++ lisp/ChangeLog 2011-12-29 22:08:29 +0000
> @@ -1,5 +1,8 @@
> 2011-12-29 Paul Eggert <eggert@cs.ucla.edu>
>
> + * epg.el (epg--make-temp-file): Avoid permission race conditions
> + when creating temporary directories and files on older Emacs.
> +
> * files.el (move-file-to-trash): Preserve default file modes on error.
> (Bug#10401)
>
>
> === modified file 'lisp/epg.el'
> --- lisp/epg.el 2011-11-23 07:03:56 +0000
> +++ lisp/epg.el 2011-12-29 22:08:29 +0000
> @@ -1951,14 +1951,16 @@
> of PREFIX, and expanding against `temporary-file-directory' if necessary),
> is guaranteed to point to a newly created empty file.
> You can then use `write-region' to write new data into the file."
> - (let (tempdir tempfile)
> + (let (tempdir tempfile orig-modes)
> (setq prefix (expand-file-name prefix
> (if (featurep 'xemacs)
> (temp-directory)
> temporary-file-directory)))
> + (setq orig-modes (default-file-modes))
> (unwind-protect
> (let (file)
> ;; First, create a temporary directory.
> + (set-default-file-modes #o700)
> (while (condition-case ()
> (progn
> (setq tempdir (make-temp-name
> @@ -1969,14 +1971,12 @@
> (make-directory tempdir))
> ;; let's try again.
> (file-already-exists t)))
> - (set-file-modes tempdir 448)
> ;; Second, create a temporary file in the tempdir.
> ;; There *is* a race condition between `make-temp-name'
> ;; and `write-region', but we don't care it since we are
> ;; in a private directory now.
> (setq tempfile (make-temp-name (concat tempdir "/EMU")))
> (write-region "" nil tempfile nil 'silent)
> - (set-file-modes tempfile 384)
> ;; Finally, make a hard-link from the tempfile.
> (while (condition-case ()
> (progn
> @@ -1986,6 +1986,7 @@
> ;; let's try again.
> (file-already-exists t)))
> file)
> + (set-default-file-modes orig-modes)
> ;; Cleanup the tempfile.
> (and tempfile
> (file-exists-p tempfile)
- bug#10403: epg--make-temp-file permissions race condition fixes,
Chong Yidong <=