diff options
| author | Michael Albinus | 2012-12-17 15:38:07 +0100 |
|---|---|---|
| committer | Michael Albinus | 2012-12-17 15:38:07 +0100 |
| commit | 53b6a8b11383585ae8a175bf53964e35e889d338 (patch) | |
| tree | 0c97fe76816949f9477b7a9ad45de1120614aab9 | |
| parent | 4cc63c814237feaed9590585f1bbdf2aca214c0b (diff) | |
| download | emacs-53b6a8b11383585ae8a175bf53964e35e889d338.tar.gz emacs-53b6a8b11383585ae8a175bf53964e35e889d338.zip | |
Add support for preserving ACL entries of files.
* net/tramp.el (tramp-file-name-for-operation): Add `file-acl' and
`set-file-acl' handlers.
* net/tramp-adb.el (tramp-adb-handle-copy-file): Handle
PRESERVE-EXTENDED-ATTRIBUTES.
* net/tramp-compat.el (tramp-compat-copy-file): Handle
PRESERVE-EXTENDED-ATTRIBUTES.
* net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): Add
`file-acl' and `set-file-acl' handlers.
(tramp-gvfs-handle-copy-file): Handle
PRESERVE-EXTENDED-ATTRIBUTES.
(tramp-gvfs-handle-file-acl, tramp-gvfs-handle-set-file-acl): New
defuns.
* net/tramp-sh.el (tramp-sh-file-name-handler-alist): Add
`file-acl' and `set-file-acl' handlers.
(tramp-remote-acl-p, tramp-sh-handle-file-acl)
(tramp-sh-handle-set-file-acl): New defuns.
(tramp-sh-handle-copy-file, tramp-do-copy-or-rename-file): Handle
PRESERVE-EXTENDED-ATTRIBUTES.
* net/tramp-smb.el (tramp-smb-file-name-handler-alist): Add
`file-acl' and `set-file-acl' handlers.
(tramp-smb-handle-copy-file): Handle PRESERVE-EXTENDED-ATTRIBUTES.
| -rw-r--r-- | lisp/ChangeLog | 31 | ||||
| -rw-r--r-- | lisp/net/tramp-adb.el | 4 | ||||
| -rw-r--r-- | lisp/net/tramp-compat.el | 9 | ||||
| -rw-r--r-- | lisp/net/tramp-gvfs.el | 17 | ||||
| -rw-r--r-- | lisp/net/tramp-sh.el | 56 | ||||
| -rw-r--r-- | lisp/net/tramp-smb.el | 7 | ||||
| -rw-r--r-- | lisp/net/tramp.el | 3 |
7 files changed, 105 insertions, 22 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 21564f5daa5..26570fc7e90 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,34 @@ | |||
| 1 | 2012-12-17 Michael Albinus <michael.albinus@gmx.de> | ||
| 2 | |||
| 3 | Add support for preserving ACL entries of files. | ||
| 4 | |||
| 5 | * net/tramp.el (tramp-file-name-for-operation): Add `file-acl' and | ||
| 6 | `set-file-acl' handlers. | ||
| 7 | |||
| 8 | * net/tramp-adb.el (tramp-adb-handle-copy-file): Handle | ||
| 9 | PRESERVE-EXTENDED-ATTRIBUTES. | ||
| 10 | |||
| 11 | * net/tramp-compat.el (tramp-compat-copy-file): Handle | ||
| 12 | PRESERVE-EXTENDED-ATTRIBUTES. | ||
| 13 | |||
| 14 | * net/tramp-gvfs.el (tramp-gvfs-file-name-handler-alist): Add | ||
| 15 | `file-acl' and `set-file-acl' handlers. | ||
| 16 | (tramp-gvfs-handle-copy-file): Handle | ||
| 17 | PRESERVE-EXTENDED-ATTRIBUTES. | ||
| 18 | (tramp-gvfs-handle-file-acl, tramp-gvfs-handle-set-file-acl): New | ||
| 19 | defuns. | ||
| 20 | |||
| 21 | * net/tramp-sh.el (tramp-sh-file-name-handler-alist): Add | ||
| 22 | `file-acl' and `set-file-acl' handlers. | ||
| 23 | (tramp-remote-acl-p, tramp-sh-handle-file-acl) | ||
| 24 | (tramp-sh-handle-set-file-acl): New defuns. | ||
| 25 | (tramp-sh-handle-copy-file, tramp-do-copy-or-rename-file): Handle | ||
| 26 | PRESERVE-EXTENDED-ATTRIBUTES. | ||
| 27 | |||
| 28 | * net/tramp-smb.el (tramp-smb-file-name-handler-alist): Add | ||
| 29 | `file-acl' and `set-file-acl' handlers. | ||
| 30 | (tramp-smb-handle-copy-file): Handle PRESERVE-EXTENDED-ATTRIBUTES. | ||
| 31 | |||
| 1 | 2012-12-17 Kelly Dean <kellydeanch@yahoo.com> (tiny change) | 32 | 2012-12-17 Kelly Dean <kellydeanch@yahoo.com> (tiny change) |
| 2 | 33 | ||
| 3 | * help-macro.el (make-help-screen): Instead of switch-to-buffer | 34 | * help-macro.el (make-help-screen): Instead of switch-to-buffer |
diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index d34980fe22e..261c65ffdae 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el | |||
| @@ -526,9 +526,9 @@ But handle the case, if the \"test\" command is not available." | |||
| 526 | 526 | ||
| 527 | (defun tramp-adb-handle-copy-file | 527 | (defun tramp-adb-handle-copy-file |
| 528 | (filename newname &optional ok-if-already-exists keep-date | 528 | (filename newname &optional ok-if-already-exists keep-date |
| 529 | preserve-uid-gid preserve-selinux-context) | 529 | preserve-uid-gid preserve-extended-attributes) |
| 530 | "Like `copy-file' for Tramp files. | 530 | "Like `copy-file' for Tramp files. |
| 531 | PRESERVE-UID-GID and PRESERVE-SELINUX-CONTEXT are completely ignored." | 531 | PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." |
| 532 | (setq filename (expand-file-name filename) | 532 | (setq filename (expand-file-name filename) |
| 533 | newname (expand-file-name newname)) | 533 | newname (expand-file-name newname)) |
| 534 | 534 | ||
diff --git a/lisp/net/tramp-compat.el b/lisp/net/tramp-compat.el index 3d37a0cfc39..5a322866693 100644 --- a/lisp/net/tramp-compat.el +++ b/lisp/net/tramp-compat.el | |||
| @@ -304,16 +304,17 @@ Not actually used. Use `(format \"%o\" i)' instead?" | |||
| 304 | (wrong-number-of-arguments (file-attributes filename)))))) | 304 | (wrong-number-of-arguments (file-attributes filename)))))) |
| 305 | 305 | ||
| 306 | ;; PRESERVE-UID-GID does not exist in XEmacs. | 306 | ;; PRESERVE-UID-GID does not exist in XEmacs. |
| 307 | ;; PRESERVE-SELINUX-CONTEXT has been introduced with Emacs 24.1. | 307 | ;; PRESERVE-EXTENDED-ATTRIBUTES has been introduced with Emacs 24.1 |
| 308 | ;; (as PRESERVE-SELINUX-CONTEXT), and renamed in Emacs 24.3. | ||
| 308 | (defun tramp-compat-copy-file | 309 | (defun tramp-compat-copy-file |
| 309 | (filename newname &optional ok-if-already-exists keep-date | 310 | (filename newname &optional ok-if-already-exists keep-date |
| 310 | preserve-uid-gid preserve-selinux-context) | 311 | preserve-uid-gid preserve-extended-attributes) |
| 311 | "Like `copy-file' for Tramp files (compat function)." | 312 | "Like `copy-file' for Tramp files (compat function)." |
| 312 | (cond | 313 | (cond |
| 313 | (preserve-selinux-context | 314 | (preserve-extended-attributes |
| 314 | (tramp-compat-funcall | 315 | (tramp-compat-funcall |
| 315 | 'copy-file filename newname ok-if-already-exists keep-date | 316 | 'copy-file filename newname ok-if-already-exists keep-date |
| 316 | preserve-uid-gid preserve-selinux-context)) | 317 | preserve-uid-gid preserve-extended-attributes)) |
| 317 | (preserve-uid-gid | 318 | (preserve-uid-gid |
| 318 | (tramp-compat-funcall | 319 | (tramp-compat-funcall |
| 319 | 'copy-file filename newname ok-if-already-exists keep-date | 320 | 'copy-file filename newname ok-if-already-exists keep-date |
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el index 1467aede2c3..be83e56d699 100644 --- a/lisp/net/tramp-gvfs.el +++ b/lisp/net/tramp-gvfs.el | |||
| @@ -385,6 +385,7 @@ Every entry is a list (NAME ADDRESS).") | |||
| 385 | ;; `executable-find' is not official yet. performed by default handler. | 385 | ;; `executable-find' is not official yet. performed by default handler. |
| 386 | (expand-file-name . tramp-gvfs-handle-expand-file-name) | 386 | (expand-file-name . tramp-gvfs-handle-expand-file-name) |
| 387 | ;; `file-accessible-directory-p' performed by default handler. | 387 | ;; `file-accessible-directory-p' performed by default handler. |
| 388 | (file-acl . tramp-gvfs-handle-file-acl) | ||
| 388 | (file-attributes . tramp-gvfs-handle-file-attributes) | 389 | (file-attributes . tramp-gvfs-handle-file-attributes) |
| 389 | (file-directory-p . tramp-gvfs-handle-file-directory-p) | 390 | (file-directory-p . tramp-gvfs-handle-file-directory-p) |
| 390 | (file-executable-p . tramp-gvfs-handle-file-executable-p) | 391 | (file-executable-p . tramp-gvfs-handle-file-executable-p) |
| @@ -417,6 +418,7 @@ Every entry is a list (NAME ADDRESS).") | |||
| 417 | (make-symbolic-link . ignore) | 418 | (make-symbolic-link . ignore) |
| 418 | (process-file . tramp-gvfs-handle-process-file) | 419 | (process-file . tramp-gvfs-handle-process-file) |
| 419 | (rename-file . tramp-gvfs-handle-rename-file) | 420 | (rename-file . tramp-gvfs-handle-rename-file) |
| 421 | (set-file-acl . tramp-gvfs-handle-set-file-acl) | ||
| 420 | (set-file-modes . tramp-gvfs-handle-set-file-modes) | 422 | (set-file-modes . tramp-gvfs-handle-set-file-modes) |
| 421 | (set-file-selinux-context . tramp-gvfs-handle-set-file-selinux-context) | 423 | (set-file-selinux-context . tramp-gvfs-handle-set-file-selinux-context) |
| 422 | (set-visited-file-modtime . tramp-gvfs-handle-set-visited-file-modtime) | 424 | (set-visited-file-modtime . tramp-gvfs-handle-set-visited-file-modtime) |
| @@ -539,7 +541,7 @@ is no information where to trace the message.") | |||
| 539 | 541 | ||
| 540 | (defun tramp-gvfs-handle-copy-file | 542 | (defun tramp-gvfs-handle-copy-file |
| 541 | (filename newname &optional ok-if-already-exists keep-date | 543 | (filename newname &optional ok-if-already-exists keep-date |
| 542 | preserve-uid-gid preserve-selinux-context) | 544 | preserve-uid-gid preserve-extended-attributes) |
| 543 | "Like `copy-file' for Tramp files." | 545 | "Like `copy-file' for Tramp files." |
| 544 | (with-parsed-tramp-file-name | 546 | (with-parsed-tramp-file-name |
| 545 | (if (tramp-tramp-file-p filename) filename newname) nil | 547 | (if (tramp-tramp-file-p filename) filename newname) nil |
| @@ -555,8 +557,8 @@ is no information where to trace the message.") | |||
| 555 | (tramp-gvfs-fuse-file-name newname) | 557 | (tramp-gvfs-fuse-file-name newname) |
| 556 | newname) | 558 | newname) |
| 557 | ok-if-already-exists keep-date preserve-uid-gid))) | 559 | ok-if-already-exists keep-date preserve-uid-gid))) |
| 558 | (when preserve-selinux-context | 560 | (when preserve-extended-attributes |
| 559 | (setq args (append args (list preserve-selinux-context)))) | 561 | (setq args (append args (list preserve-extended-attributes)))) |
| 560 | (apply 'copy-file args)) | 562 | (apply 'copy-file args)) |
| 561 | 563 | ||
| 562 | ;; Error case. Let's try it with the GVFS utilities. | 564 | ;; Error case. Let's try it with the GVFS utilities. |
| @@ -655,6 +657,10 @@ is no information where to trace the message.") | |||
| 655 | (tramp-run-real-handler | 657 | (tramp-run-real-handler |
| 656 | 'expand-file-name (list localname)))))) | 658 | 'expand-file-name (list localname)))))) |
| 657 | 659 | ||
| 660 | (defun tramp-gvfs-handle-file-acl (filename) | ||
| 661 | "Like `file-acl' for Tramp files." | ||
| 662 | (tramp-compat-funcall 'file-acl (tramp-gvfs-fuse-file-name filename))) | ||
| 663 | |||
| 658 | (defun tramp-gvfs-handle-file-attributes (filename &optional id-format) | 664 | (defun tramp-gvfs-handle-file-attributes (filename &optional id-format) |
| 659 | "Like `file-attributes' for Tramp files." | 665 | "Like `file-attributes' for Tramp files." |
| 660 | (file-attributes (tramp-gvfs-fuse-file-name filename) id-format)) | 666 | (file-attributes (tramp-gvfs-fuse-file-name filename) id-format)) |
| @@ -781,6 +787,11 @@ is no information where to trace the message.") | |||
| 781 | (tramp-flush-file-property v (file-name-directory localname)) | 787 | (tramp-flush-file-property v (file-name-directory localname)) |
| 782 | (tramp-flush-file-property v localname)))) | 788 | (tramp-flush-file-property v localname)))) |
| 783 | 789 | ||
| 790 | (defun tramp-gvfs-handle-set-file-acl (filename acl-string) | ||
| 791 | "Like `set-file-acl' for Tramp files." | ||
| 792 | (with-tramp-gvfs-error-message filename 'set-file-acl | ||
| 793 | (tramp-gvfs-fuse-file-name filename) acl-string)) | ||
| 794 | |||
| 784 | (defun tramp-gvfs-handle-set-file-modes (filename mode) | 795 | (defun tramp-gvfs-handle-set-file-modes (filename mode) |
| 785 | "Like `set-file-modes' for Tramp files." | 796 | "Like `set-file-modes' for Tramp files." |
| 786 | (with-tramp-gvfs-error-message filename 'set-file-modes | 797 | (with-tramp-gvfs-error-message filename 'set-file-modes |
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index 3008601d9ca..788246bffd5 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el | |||
| @@ -985,6 +985,8 @@ This is used to map a mode number to a permission string.") | |||
| 985 | (verify-visited-file-modtime . tramp-sh-handle-verify-visited-file-modtime) | 985 | (verify-visited-file-modtime . tramp-sh-handle-verify-visited-file-modtime) |
| 986 | (file-selinux-context . tramp-sh-handle-file-selinux-context) | 986 | (file-selinux-context . tramp-sh-handle-file-selinux-context) |
| 987 | (set-file-selinux-context . tramp-sh-handle-set-file-selinux-context) | 987 | (set-file-selinux-context . tramp-sh-handle-set-file-selinux-context) |
| 988 | (file-acl . tramp-sh-handle-file-acl) | ||
| 989 | (set-file-acl . tramp-sh-handle-set-file-acl) | ||
| 988 | (vc-registered . tramp-sh-handle-vc-registered)) | 990 | (vc-registered . tramp-sh-handle-vc-registered)) |
| 989 | "Alist of handler functions. | 991 | "Alist of handler functions. |
| 990 | Operations not mentioned here will be handled by the normal Emacs functions.") | 992 | Operations not mentioned here will be handled by the normal Emacs functions.") |
| @@ -1532,6 +1534,39 @@ and gid of the corresponding user is taken. Both parameters must be integers." | |||
| 1532 | ;; We always return nil. | 1534 | ;; We always return nil. |
| 1533 | nil) | 1535 | nil) |
| 1534 | 1536 | ||
| 1537 | (defun tramp-remote-acl-p (vec) | ||
| 1538 | "Check, whether ACL is enabled on the remote host." | ||
| 1539 | (with-tramp-connection-property (tramp-get-connection-process vec) "acl-p" | ||
| 1540 | (tramp-send-command-and-check vec "getfacl /"))) | ||
| 1541 | |||
| 1542 | (defun tramp-sh-handle-file-acl (filename) | ||
| 1543 | "Like `file-acl' for Tramp files." | ||
| 1544 | (with-parsed-tramp-file-name filename nil | ||
| 1545 | (with-tramp-file-property v localname "file-acl" | ||
| 1546 | (when (and (tramp-remote-acl-p v) | ||
| 1547 | (tramp-send-command-and-check | ||
| 1548 | v (format | ||
| 1549 | "getfacl -ac %s 2>/dev/null" | ||
| 1550 | (tramp-shell-quote-argument localname)))) | ||
| 1551 | (with-current-buffer (tramp-get-connection-buffer v) | ||
| 1552 | (buffer-string)))))) | ||
| 1553 | |||
| 1554 | (defun tramp-sh-handle-set-file-acl (filename acl-string) | ||
| 1555 | "Like `set-file-acl' for Tramp files." | ||
| 1556 | (with-parsed-tramp-file-name filename nil | ||
| 1557 | (if (and (stringp acl-string) | ||
| 1558 | (tramp-remote-acl-p v) | ||
| 1559 | (tramp-send-command-and-check | ||
| 1560 | v | ||
| 1561 | (format "setfacl --set-file=- %s <<'EOF'\n%s\nEOF\n" | ||
| 1562 | (tramp-shell-quote-argument localname) | ||
| 1563 | acl-string) | ||
| 1564 | t)) | ||
| 1565 | (tramp-set-file-property v localname "file-acl" acl-string) | ||
| 1566 | (tramp-set-file-property v localname "file-acl-string" 'undef))) | ||
| 1567 | ;; We always return nil. | ||
| 1568 | nil) | ||
| 1569 | |||
| 1535 | ;; Simple functions using the `test' command. | 1570 | ;; Simple functions using the `test' command. |
| 1536 | 1571 | ||
| 1537 | (defun tramp-sh-handle-file-executable-p (filename) | 1572 | (defun tramp-sh-handle-file-executable-p (filename) |
| @@ -1883,7 +1918,7 @@ tramp-sh-handle-file-name-all-completions: internal error accessing `%s': `%s'" | |||
| 1883 | 1918 | ||
| 1884 | (defun tramp-sh-handle-copy-file | 1919 | (defun tramp-sh-handle-copy-file |
| 1885 | (filename newname &optional ok-if-already-exists keep-date | 1920 | (filename newname &optional ok-if-already-exists keep-date |
| 1886 | preserve-uid-gid preserve-selinux-context) | 1921 | preserve-uid-gid preserve-extended-attributes) |
| 1887 | "Like `copy-file' for Tramp files." | 1922 | "Like `copy-file' for Tramp files." |
| 1888 | (setq filename (expand-file-name filename)) | 1923 | (setq filename (expand-file-name filename)) |
| 1889 | (setq newname (expand-file-name newname)) | 1924 | (setq newname (expand-file-name newname)) |
| @@ -1893,13 +1928,13 @@ tramp-sh-handle-file-name-all-completions: internal error accessing `%s': `%s'" | |||
| 1893 | (tramp-tramp-file-p newname)) | 1928 | (tramp-tramp-file-p newname)) |
| 1894 | (tramp-do-copy-or-rename-file | 1929 | (tramp-do-copy-or-rename-file |
| 1895 | 'copy filename newname ok-if-already-exists keep-date | 1930 | 'copy filename newname ok-if-already-exists keep-date |
| 1896 | preserve-uid-gid preserve-selinux-context)) | 1931 | preserve-uid-gid preserve-extended-attributes)) |
| 1897 | ;; Compat section. | 1932 | ;; Compat section. |
| 1898 | (preserve-selinux-context | 1933 | (preserve-extended-attributes |
| 1899 | (tramp-run-real-handler | 1934 | (tramp-run-real-handler |
| 1900 | 'copy-file | 1935 | 'copy-file |
| 1901 | (list filename newname ok-if-already-exists keep-date | 1936 | (list filename newname ok-if-already-exists keep-date |
| 1902 | preserve-uid-gid preserve-selinux-context))) | 1937 | preserve-uid-gid preserve-extended-attributes))) |
| 1903 | (preserve-uid-gid | 1938 | (preserve-uid-gid |
| 1904 | (tramp-run-real-handler | 1939 | (tramp-run-real-handler |
| 1905 | 'copy-file | 1940 | 'copy-file |
| @@ -1962,7 +1997,7 @@ tramp-sh-handle-file-name-all-completions: internal error accessing `%s': `%s'" | |||
| 1962 | 1997 | ||
| 1963 | (defun tramp-do-copy-or-rename-file | 1998 | (defun tramp-do-copy-or-rename-file |
| 1964 | (op filename newname &optional ok-if-already-exists keep-date | 1999 | (op filename newname &optional ok-if-already-exists keep-date |
| 1965 | preserve-uid-gid preserve-selinux-context) | 2000 | preserve-uid-gid preserve-extended-attributes) |
| 1966 | "Copy or rename a remote file. | 2001 | "Copy or rename a remote file. |
| 1967 | OP must be `copy' or `rename' and indicates the operation to perform. | 2002 | OP must be `copy' or `rename' and indicates the operation to perform. |
| 1968 | FILENAME specifies the file to copy or rename, NEWNAME is the name of | 2003 | FILENAME specifies the file to copy or rename, NEWNAME is the name of |
| @@ -1971,7 +2006,7 @@ OK-IF-ALREADY-EXISTS means don't barf if NEWNAME exists already. | |||
| 1971 | KEEP-DATE means to make sure that NEWNAME has the same timestamp | 2006 | KEEP-DATE means to make sure that NEWNAME has the same timestamp |
| 1972 | as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep | 2007 | as FILENAME. PRESERVE-UID-GID, when non-nil, instructs to keep |
| 1973 | the uid and gid if both files are on the same host. | 2008 | the uid and gid if both files are on the same host. |
| 1974 | PRESERVE-SELINUX-CONTEXT activates selinux commands. | 2009 | PRESERVE-EXTENDED-ATTRIBUTES activates selinux and acl commands. |
| 1975 | 2010 | ||
| 1976 | This function is invoked by `tramp-sh-handle-copy-file' and | 2011 | This function is invoked by `tramp-sh-handle-copy-file' and |
| 1977 | `tramp-sh-handle-rename-file'. It is an error if OP is neither | 2012 | `tramp-sh-handle-rename-file'. It is an error if OP is neither |
| @@ -1982,8 +2017,8 @@ file names." | |||
| 1982 | (let ((t1 (tramp-tramp-file-p filename)) | 2017 | (let ((t1 (tramp-tramp-file-p filename)) |
| 1983 | (t2 (tramp-tramp-file-p newname)) | 2018 | (t2 (tramp-tramp-file-p newname)) |
| 1984 | (length (nth 7 (file-attributes (file-truename filename)))) | 2019 | (length (nth 7 (file-attributes (file-truename filename)))) |
| 1985 | (context (and preserve-selinux-context | 2020 | (attributes (and preserve-extended-attributes |
| 1986 | (apply 'file-selinux-context (list filename)))) | 2021 | (apply 'file-extended-attributes (list filename)))) |
| 1987 | pr tm) | 2022 | pr tm) |
| 1988 | 2023 | ||
| 1989 | (with-parsed-tramp-file-name (if t1 filename newname) nil | 2024 | (with-parsed-tramp-file-name (if t1 filename newname) nil |
| @@ -2053,8 +2088,9 @@ file names." | |||
| 2053 | ;; One of them must be a Tramp file. | 2088 | ;; One of them must be a Tramp file. |
| 2054 | (error "Tramp implementation says this cannot happen"))) | 2089 | (error "Tramp implementation says this cannot happen"))) |
| 2055 | 2090 | ||
| 2056 | ;; Handle `preserve-selinux-context'. | 2091 | ;; Handle `preserve-extended-attributes'. |
| 2057 | (when context (apply 'set-file-selinux-context (list newname context))) | 2092 | (when attributes |
| 2093 | (apply 'set-file-extended-attributes (list newname attributes))) | ||
| 2058 | 2094 | ||
| 2059 | ;; In case of `rename', we must flush the cache of the source file. | 2095 | ;; In case of `rename', we must flush the cache of the source file. |
| 2060 | (when (and t1 (eq op 'rename)) | 2096 | (when (and t1 (eq op 'rename)) |
diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index d4386a5374c..f97d4620b97 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el | |||
| @@ -195,6 +195,7 @@ See `tramp-actions-before-shell' for more info.") | |||
| 195 | (dired-uncache . tramp-handle-dired-uncache) | 195 | (dired-uncache . tramp-handle-dired-uncache) |
| 196 | (expand-file-name . tramp-smb-handle-expand-file-name) | 196 | (expand-file-name . tramp-smb-handle-expand-file-name) |
| 197 | (file-accessible-directory-p . tramp-smb-handle-file-directory-p) | 197 | (file-accessible-directory-p . tramp-smb-handle-file-directory-p) |
| 198 | (file-acl . ignore) | ||
| 198 | (file-attributes . tramp-smb-handle-file-attributes) | 199 | (file-attributes . tramp-smb-handle-file-attributes) |
| 199 | (file-directory-p . tramp-smb-handle-file-directory-p) | 200 | (file-directory-p . tramp-smb-handle-file-directory-p) |
| 200 | (file-executable-p . tramp-handle-file-exists-p) | 201 | (file-executable-p . tramp-handle-file-exists-p) |
| @@ -227,6 +228,7 @@ See `tramp-actions-before-shell' for more info.") | |||
| 227 | (make-symbolic-link . tramp-smb-handle-make-symbolic-link) | 228 | (make-symbolic-link . tramp-smb-handle-make-symbolic-link) |
| 228 | (process-file . tramp-smb-handle-process-file) | 229 | (process-file . tramp-smb-handle-process-file) |
| 229 | (rename-file . tramp-smb-handle-rename-file) | 230 | (rename-file . tramp-smb-handle-rename-file) |
| 231 | (set-file-acl . ignore) | ||
| 230 | (set-file-modes . tramp-smb-handle-set-file-modes) | 232 | (set-file-modes . tramp-smb-handle-set-file-modes) |
| 231 | ;; `set-file-selinux-context' performed by default handler. | 233 | ;; `set-file-selinux-context' performed by default handler. |
| 232 | (set-file-times . ignore) | 234 | (set-file-times . ignore) |
| @@ -487,10 +489,10 @@ pass to the OPERATION." | |||
| 487 | 489 | ||
| 488 | (defun tramp-smb-handle-copy-file | 490 | (defun tramp-smb-handle-copy-file |
| 489 | (filename newname &optional ok-if-already-exists keep-date | 491 | (filename newname &optional ok-if-already-exists keep-date |
| 490 | preserve-uid-gid preserve-selinux-context) | 492 | preserve-uid-gid preserve-extended-attributes) |
| 491 | "Like `copy-file' for Tramp files. | 493 | "Like `copy-file' for Tramp files. |
| 492 | KEEP-DATE has no effect in case NEWNAME resides on an SMB server. | 494 | KEEP-DATE has no effect in case NEWNAME resides on an SMB server. |
| 493 | PRESERVE-UID-GID and PRESERVE-SELINUX-CONTEXT are completely ignored." | 495 | PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." |
| 494 | (setq filename (expand-file-name filename) | 496 | (setq filename (expand-file-name filename) |
| 495 | newname (expand-file-name newname)) | 497 | newname (expand-file-name newname)) |
| 496 | (with-tramp-progress-reporter | 498 | (with-tramp-progress-reporter |
| @@ -1813,5 +1815,6 @@ Returns nil if an error message has appeared." | |||
| 1813 | ;; * Try to remove the inclusion of dummy "" directory. Seems to be at | 1815 | ;; * Try to remove the inclusion of dummy "" directory. Seems to be at |
| 1814 | ;; several places, especially in `tramp-smb-handle-insert-directory'. | 1816 | ;; several places, especially in `tramp-smb-handle-insert-directory'. |
| 1815 | ;; * Ignore case in file names. | 1817 | ;; * Ignore case in file names. |
| 1818 | ;; * Implement `tramp-smb-handle-file-acl' for proper Samba versions. | ||
| 1816 | 1819 | ||
| 1817 | ;;; tramp-smb.el ends here | 1820 | ;;; tramp-smb.el ends here |
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index a4d36cbe72c..a4be6eab41f 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el | |||
| @@ -1879,7 +1879,8 @@ ARGS are the arguments OPERATION has been called with." | |||
| 1879 | ;; Emacs 22+ only. | 1879 | ;; Emacs 22+ only. |
| 1880 | 'set-file-times | 1880 | 'set-file-times |
| 1881 | ;; Emacs 24+ only. | 1881 | ;; Emacs 24+ only. |
| 1882 | 'file-selinux-context 'set-file-selinux-context | 1882 | 'file-acl 'file-selinux-context |
| 1883 | 'set-file-acl 'set-file-selinux-context | ||
| 1883 | ;; XEmacs only. | 1884 | ;; XEmacs only. |
| 1884 | 'abbreviate-file-name 'create-file-buffer | 1885 | 'abbreviate-file-name 'create-file-buffer |
| 1885 | 'dired-file-modtime 'dired-make-compressed-filename | 1886 | 'dired-file-modtime 'dired-make-compressed-filename |