From aca3d51dfa45794fa68a2ffb6269e34fcee2ec6c Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Wed, 2 Jan 2013 11:15:31 +0100 Subject: * net/tramp-sh.el (tramp-sh-handle-set-file-acl): Add argument to `error' call. (tramp-do-copy-or-rename-file): Ignore errors when calling `set-file-extended-attributes'. * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Add handler for `file-acl'. (tramp-smb-handle-file-acl): New defun. --- lisp/ChangeLog | 11 +++++++++++ lisp/net/tramp-sh.el | 8 +++++--- lisp/net/tramp-smb.el | 19 +++++++++++++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index f3a84967aa..72e8959d8e 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2013-01-02 Michael Albinus + + * net/tramp-sh.el (tramp-sh-handle-set-file-acl): Add argument to + `error' call. + (tramp-do-copy-or-rename-file): Ignore errors when calling + `set-file-extended-attributes'. + + * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Add + handler for `file-acl'. + (tramp-smb-handle-file-acl): New defun. + 2013-01-02 Jay Belanger * calc/README: Mention ISO 8601 week-numbering dates. diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index e46b32c85a..c359bab083 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -1570,7 +1570,7 @@ and gid of the corresponding user is taken. Both parameters must be integers." v (format "setfacl -m %s %s" line (tramp-shell-quote-argument localname))) - (error)))) + (error nil)))) ;; In case of errors, we return `nil'. (error (tramp-set-file-property v localname "file-acl" 'undef) @@ -2097,9 +2097,11 @@ file names." ;; One of them must be a Tramp file. (error "Tramp implementation says this cannot happen"))) - ;; Handle `preserve-extended-attributes'. + ;; Handle `preserve-extended-attributes'. We ignore possible + ;; errors, because ACL strings could be incompatible. (when attributes - (apply 'set-file-extended-attributes (list newname attributes))) + (ignore-errors + (apply 'set-file-extended-attributes (list newname attributes)))) ;; In case of `rename', we must flush the cache of the source file. (when (and t1 (eq op 'rename)) diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index af1e36350f..dbb711e959 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -195,7 +195,7 @@ See `tramp-actions-before-shell' for more info.") (dired-uncache . tramp-handle-dired-uncache) (expand-file-name . tramp-smb-handle-expand-file-name) (file-accessible-directory-p . tramp-smb-handle-file-directory-p) - (file-acl . ignore) + (file-acl . tramp-smb-handle-file-acl) (file-attributes . tramp-smb-handle-file-attributes) (file-directory-p . tramp-smb-handle-file-directory-p) (file-executable-p . tramp-handle-file-exists-p) @@ -641,6 +641,22 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." method user host (tramp-run-real-handler 'expand-file-name (list localname)))))) +(defun tramp-smb-handle-file-acl (filename) + "Like `file-acl' for Tramp files." + (with-parsed-tramp-file-name filename nil + (with-tramp-file-property v localname "file-acl" + (when (tramp-smb-send-command + v (format "getfacl \"%s\"" (tramp-smb-get-localname v))) + (with-current-buffer (tramp-get-connection-buffer v) + (goto-char (point-min)) + (while (looking-at-p "^#") + (forward-line) + (delete-region (point-min) (point))) + (goto-char (point-max)) + (delete-blank-lines) + (when (> (point-max) (point-min)) + (substring-no-properties (buffer-string)))))))) + (defun tramp-smb-handle-file-attributes (filename &optional id-format) "Like `file-attributes' for Tramp files." (unless id-format (setq id-format 'integer)) @@ -1815,6 +1831,5 @@ Returns nil if an error message has appeared." ;; * Try to remove the inclusion of dummy "" directory. Seems to be at ;; several places, especially in `tramp-smb-handle-insert-directory'. ;; * Ignore case in file names. -;; * Implement `tramp-smb-handle-file-acl' for proper Samba versions. ;;; tramp-smb.el ends here -- cgit v1.2.3