]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve handling of `tramp-set-file-uid-gid'
authorMichael Albinus <michael.albinus@gmx.de>
Wed, 11 May 2022 16:02:13 +0000 (18:02 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Wed, 11 May 2022 16:02:13 +0000 (18:02 +0200)
* lisp/net/tramp.el (tramp-skeleton-write-region):
Call `tramp-set-file-uid-gid' properly.
(tramp-set-file-uid-gid): Handle also `tramp-crypt-file-name-handler'.

* test/lisp/net/tramp-tests.el (tramp-test27-load): Adapt test.

lisp/net/tramp-sh.el
lisp/net/tramp.el
test/lisp/net/tramp-tests.el

index 74155d1722e1f4f31e912530bf7b1e4ec3ec59ff..1851047ccf58f1d1150bcf9ff88b5633a86322a8 100644 (file)
@@ -6133,4 +6133,5 @@ function cell is returned to be applied on a buffer."
 ;; * Support hostname canonicalization in ~/.ssh/config.
 ;;   <https://stackoverflow.com/questions/70205232/>
 
+
 ;;; tramp-sh.el ends here
index 9413f7954f405c79d824cae4a20f9bf145c1c852..b26346443dae26d15ee017be72f43db919fc61db 100644 (file)
@@ -3435,7 +3435,7 @@ BODY is the backend specific code."
 
           ;; We must protect `last-coding-system-used', now we have
           ;; set it to its correct value.
-          (let (last-coding-system-used)
+          (let (last-coding-system-used (need-chown t))
             ;; Set file modification time.
             (when (or (eq ,visit t) (stringp ,visit))
               (when-let ((file-attr (file-attributes filename 'integer)))
@@ -3445,10 +3445,13 @@ BODY is the backend specific code."
                  ;; `file-precious-flag' is set.
                  (or (file-attribute-modification-time file-attr)
                      (current-time)))
-                ;; Set the ownership.
                 (unless (and (= (file-attribute-user-id file-attr) uid)
                              (= (file-attribute-group-id file-attr) gid))
-                  (tramp-set-file-uid-gid filename uid gid)))))
+                  (setq need-chown nil))))
+
+            ;; Set the ownership.
+             (when need-chown
+               (tramp-set-file-uid-gid filename uid gid)))
 
           ;; Unlock file.
           (when file-locked
@@ -5627,7 +5630,9 @@ If FILENAME is remote, a file name handler is called."
       (setq gid (file-attribute-group-id (file-attributes dir)))))
 
   (if (tramp-tramp-file-p filename)
-      (tramp-file-name-handler #'tramp-set-file-uid-gid filename uid gid)
+      (funcall (if (tramp-crypt-file-name-p filename)
+                  #'tramp-crypt-file-name-handler #'tramp-file-name-handler)
+              #'tramp-set-file-uid-gid filename uid gid)
     ;; On W32 systems, "chown" does not work.
     (unless (memq system-type '(ms-dos windows-nt))
       (let ((uid (or (and (natnump uid) uid) (tramp-get-local-uid 'integer)))
index 643e19c1d2d926604a45361d695c4943f848146e..fa5a614fbf421ca9487725d8d405afe0a4a92723 100644 (file)
@@ -4474,7 +4474,9 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
     (let ((tmp-name (tramp--test-make-temp-name nil quoted)))
       (unwind-protect
          (progn
-           (load tmp-name 'noerror 'nomessage)
+           ;; Ange-FTP does not tolerate a missing file, even with `noerror'.
+           (unless (tramp--test-ange-ftp-p)
+             (load tmp-name 'noerror 'nomessage))
            (should-not (featurep 'tramp-test-load))
            (write-region "(provide 'tramp-test-load)" nil tmp-name)
            ;; `load' in lread.c does not pass `must-suffix'.  Why?