summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2019-04-08 13:34:54 +0200
committerMichael Albinus <michael.albinus@gmx.de>2019-04-08 13:34:54 +0200
commita20845c160de2ba9f42b3af714d770df502d0577 (patch)
tree82a0c07f09d8259ccae2c6d6f93e6a5eaecf910f /lisp
parent0b8117ed1abfc17bb0bc1690a8997736f1e8f98c (diff)
downloademacs-a20845c160de2ba9f42b3af714d770df502d0577.tar.gz
emacs-a20845c160de2ba9f42b3af714d770df502d0577.tar.bz2
emacs-a20845c160de2ba9f42b3af714d770df502d0577.zip
Fix file-readable-p and file-executable-p in some Tramp backends
* lisp/net/tramp-archive.el (tramp-archive-handle-file-readable-p): Use tramp-gvfs. * lisp/net/tramp-gvfs.el (tramp-gvfs-handle-file-executable-p): Check that FILENAME exists. (tramp-gvfs-handle-file-readable-p): Check that FILENAME exists. Use heuristic in case it cannot be determined correctly.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/net/tramp-archive.el4
-rw-r--r--lisp/net/tramp-gvfs.el18
2 files changed, 17 insertions, 5 deletions
diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el
index 9e131b1a47d..ba4c26cdf2f 100644
--- a/lisp/net/tramp-archive.el
+++ b/lisp/net/tramp-archive.el
@@ -584,9 +584,7 @@ offered."
(defun tramp-archive-handle-file-readable-p (filename)
"Like `file-readable-p' for file archives."
- (with-parsed-tramp-file-name
- (tramp-archive-gvfs-file-name filename) nil
- (tramp-check-cached-permissions v ?r)))
+ (file-readable-p (tramp-archive-gvfs-file-name filename)))
(defun tramp-archive-handle-file-system-info (filename)
"Like `file-system-info' for file archives."
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 2d8f42004a8..8fea82d97c4 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -1136,7 +1136,8 @@ If FILE-SYSTEM is non-nil, return file system attributes."
"Like `file-executable-p' for Tramp files."
(with-parsed-tramp-file-name filename nil
(with-tramp-file-property v localname "file-executable-p"
- (tramp-check-cached-permissions v ?x))))
+ (and (file-exists-p filename)
+ (tramp-check-cached-permissions v ?x)))))
(defun tramp-gvfs-handle-file-name-all-completions (filename directory)
"Like `file-name-all-completions' for Tramp files."
@@ -1258,7 +1259,20 @@ file-notify events."
"Like `file-readable-p' for Tramp files."
(with-parsed-tramp-file-name filename nil
(with-tramp-file-property v localname "file-readable-p"
- (tramp-check-cached-permissions v ?r))))
+ (and (file-exists-p filename)
+ (or (tramp-check-cached-permissions v ?r)
+ ;; If the user is different from what we guess to be
+ ;; the user, we don't know. Let's check, whether
+ ;; access is restricted explicitly.
+ (and (/= (tramp-gvfs-get-remote-uid v 'integer)
+ (tramp-compat-file-attribute-user-id
+ (file-attributes filename 'integer)))
+ (not
+ (string-equal
+ "FALSE"
+ (cdr (assoc
+ "access::can-read"
+ (tramp-gvfs-get-file-attributes filename)))))))))))
(defun tramp-gvfs-handle-file-system-info (filename)
"Like `file-system-info' for Tramp files."