emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/net/tramp.el,v [EMACS_22_BASE]


From: Michael Albinus
Subject: [Emacs-diffs] Changes to emacs/lisp/net/tramp.el,v [EMACS_22_BASE]
Date: Wed, 11 Jun 2008 17:29:36 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Branch:         EMACS_22_BASE
Changes by:     Michael Albinus <albinus>       08/06/11 17:29:36

Index: tramp.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/net/tramp.el,v
retrieving revision 1.124.2.13
retrieving revision 1.124.2.14
diff -u -b -r1.124.2.13 -r1.124.2.14
--- tramp.el    28 Apr 2008 19:30:50 -0000      1.124.2.13
+++ tramp.el    11 Jun 2008 17:29:35 -0000      1.124.2.14
@@ -3779,12 +3779,42 @@
 
 ;; File Editing.
 
+;; `make-temp-file' exists in Emacs only.  The third parameter SUFFIX
+;; has been introduced with Emacs 22.  We try it, if it fails, we fall
+;; back to `make-temp-name', creating the temporary file immediately
+;; in order to avoid a security hole.
 (defsubst tramp-make-temp-file (filename)
-  (concat
-   (funcall (if (fboundp 'make-temp-file) 'make-temp-file 'make-temp-name)
-           (expand-file-name tramp-temp-name-prefix
+  "Create a temporary file (compat function).
+Add the extension of FILENAME, if existing."
+  (let* (file-name-handler-alist
+        (prefix (expand-file-name
+                 (symbol-value 'tramp-temp-name-prefix)
                              (tramp-temporary-file-directory)))
-   (file-name-extension filename t)))
+        (extension (file-name-extension filename t))
+        result)
+    (condition-case nil
+       (setq result
+             (funcall (symbol-function 'make-temp-file) prefix nil extension))
+      (error
+       ;; We use our own implementation, taken from files.el.
+       (while
+          (condition-case ()
+              (progn
+                (setq result (concat (make-temp-name prefix) extension))
+                (write-region
+                 "" nil result nil 'silent nil
+                 ;; 7th parameter is MUSTBENEW in Emacs, and
+                 ;; CODING-SYSTEM in XEmacs.  It is not a security
+                 ;; hole in XEmacs if we cannot use this parameter,
+                 ;; because XEmacs uses a user-specific subdirectory
+                 ;; with 0700 permissions.
+                 (when (not (featurep 'xemacs)) 'excl))
+                nil)
+            (file-already-exists t))
+        ;; The file was somehow created by someone else between
+        ;; `make-temp-name' and `write-region', let's try again.
+        nil)))
+    result))
 
 (defun tramp-handle-file-local-copy (filename)
   "Like `file-local-copy' for tramp files."




reply via email to

[Prev in Thread] Current Thread [Next in Thread]