changeset 105907:9abdd578d117

* net/tramp.el (tramp-advice-make-auto-save-file-name) (tramp-advice-file-expand-wildcards): Unload via `ad-remove-advice'. * net/tramp.el (tramp-advice-file-expand-wildcards): Don't rely on `ad-do-it'. * net/tramp.el (tramp-handle-write-region): Copy but rename temp file, in order to keep context in SELinux.
author Michael Albinus <michael.albinus@gmx.de>
date Sun, 08 Nov 2009 10:44:22 +0000
parents a061342b5097
children 0cbe044d923b
files lisp/net/tramp.el
diffstat 1 files changed, 35 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/net/tramp.el	Sun Nov 08 09:29:54 2009 +0000
+++ b/lisp/net/tramp.el	Sun Nov 08 10:44:22 2009 +0000
@@ -4927,22 +4927,25 @@
 	   ((or (tramp-local-host-p v)
 		(tramp-method-out-of-band-p
 		 v (- (or end (point-max)) (or start (point-min)))))
-	    (condition-case err
-		(if (and (= (or end (point-max)) (point-max))
-			 (= (or start (point-min)) (point-min))
-			 (tramp-get-method-parameter
-			  method 'tramp-copy-keep-tmpfile))
-		    (progn
+	    (if (and (= (or end (point-max)) (point-max))
+		     (= (or start (point-min)) (point-min))
+		     (tramp-get-method-parameter
+		      method 'tramp-copy-keep-tmpfile))
+		(progn
+		  (setq tramp-temp-buffer-file-name tmpfile)
+		  (condition-case err
 		      ;; We keep the local file for performance
 		      ;; reasons, useful for "rsync".
-		      (setq tramp-temp-buffer-file-name tmpfile)
-		      (copy-file tmpfile filename t))
-		  (setq tramp-temp-buffer-file-name nil)
-		  (rename-file tmpfile filename t))
-	      ((error quit)
-	       (setq tramp-temp-buffer-file-name nil)
-	       (delete-file tmpfile)
-	       (signal (car err) (cdr err)))))
+		      (copy-file tmpfile filename t)
+		    ((error quit)
+		     (setq tramp-temp-buffer-file-name nil)
+		     (delete-file tmpfile)
+		     (signal (car err) (cdr err)))))
+	      (setq tramp-temp-buffer-file-name nil)
+	      ;; Don't rename, in order to keep context in SELinux.
+	      (unwind-protect
+		  (copy-file tmpfile filename t)
+		(delete-file tmpfile))))
 
 	   ;; Use inline file transfer.
 	   (rem-dec
@@ -8123,8 +8126,12 @@
 	(setq ad-return-value
 	      (tramp-file-name-handler 'make-auto-save-file-name))
       ad-do-it))
-  (add-hook 'tramp-unload-hook
-	    (lambda () (ad-unadvise 'make-auto-save-file-name))))
+  (add-hook
+   'tramp-unload-hook
+   (lambda ()
+     (ad-remove-advice
+      'make-auto-save-file-name
+      'around 'tramp-advice-make-auto-save-file-name))))
 
 ;; In Emacs < 22 and XEmacs < 21.5 autosaved remote files have
 ;; permission 0666 minus umask. This is a security threat.
@@ -8356,12 +8363,20 @@
 	  (if (string-match
 	       "[[*?]"
 	       (tramp-file-name-localname (tramp-dissect-file-name name)))
-	      (setq ad-return-value (or ad-do-it (list name)))
+	      (progn
+		ad-do-it
+		(unless ad-return-value
+		  (setq ad-return-value (list name))))
 	    (setq ad-return-value (list name)))
 	;; If it is not a Tramp file, just run the original function.
-	(setq ad-return-value (or ad-do-it (list name))))))
-  (add-hook 'tramp-unload-hook
-	    (lambda () (ad-unadvise 'file-expand-wildcards))))
+	ad-do-it
+	(unless ad-return-value
+	  (setq ad-return-value (list name))))))
+  (add-hook
+   'tramp-unload-hook
+   (lambda ()
+     (ad-remove-advice
+      'file-expand-wildcards 'around 'tramp-advice-file-expand-wildcards))))
 
 ;; Checklist for `tramp-unload-hook'
 ;; - Unload all `tramp-*' packages