Fix bug #13298 with failed backups by falling back on set-file-modes.
src/fileio.c (Fset_file_selinux_context, Fset_file_acl): Return t if file's SELinux context or ACLs successfully set, nil otherwise. lisp/files.el (backup-buffer-copy, basic-save-buffer-2): If set-file-extended-attributes fails, fall back on set-file-modes instead of signaling an error. doc/lispref/files.texi (Changing Files): Document the return values of set-file-selinux-context and set-file-acl.
This commit is contained in:
parent
ccb1c17e8b
commit
ccad023bc3
6 changed files with 45 additions and 12 deletions
|
@ -1,3 +1,8 @@
|
|||
2012-12-29 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* files.texi (Changing Files): Document the return values of
|
||||
set-file-selinux-context and set-file-acl.
|
||||
|
||||
2012-12-27 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* files.texi (File Names): Mention Cygwin conversion functions.
|
||||
|
|
|
@ -1703,9 +1703,11 @@ This function sets the SELinux security context of the file
|
|||
@var{filename} to @var{context}. @xref{File Attributes}, for a brief
|
||||
description of SELinux contexts. The @var{context} argument should be
|
||||
a list @code{(@var{user} @var{role} @var{type} @var{range})}, like the
|
||||
return value of @code{file-selinux-context}. The function does
|
||||
nothing if SELinux is disabled, or if Emacs was compiled without
|
||||
SELinux support.
|
||||
return value of @code{file-selinux-context}. The function returns
|
||||
@code{t} if it succeeds to set the SELinux security context of
|
||||
@var{filename}, @code{nil} otherwise. The function does nothing and
|
||||
returns @code{nil} if SELinux is disabled, or if Emacs was compiled
|
||||
without SELinux support.
|
||||
@end defun
|
||||
|
||||
@defun set-file-acl filename acl-string
|
||||
|
@ -1713,7 +1715,9 @@ This function sets the ACL entries of the file @var{filename} to
|
|||
@var{acl-string}. @xref{File Attributes}, for a brief description of
|
||||
ACLs. The @var{acl-string} argument should be a string containing the
|
||||
textual representation of the desired ACL entries as returned by
|
||||
@code{file-acl} (@pxref{File Attributes, file-acl}).
|
||||
@code{file-acl} (@pxref{File Attributes, file-acl}). The function
|
||||
returns @code{t} if it succeeds to set the ACL entries of
|
||||
@var{filename}, @code{nil} otherwise.
|
||||
@end defun
|
||||
|
||||
@node File Names
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2012-12-29 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* files.el (backup-buffer-copy, basic-save-buffer-2): If
|
||||
set-file-extended-attributes fails, fall back on set-file-modes
|
||||
instead of signaling an error. (Bug#13298)
|
||||
|
||||
2012-12-29 Fabián Ezequiel Gallina <fgallina@cuca>
|
||||
|
||||
* progmodes/python.el: Support other commands triggering
|
||||
|
|
|
@ -4019,10 +4019,12 @@ BACKUPNAME is the backup file name, which is the old file renamed."
|
|||
nil)))
|
||||
;; Reset the umask.
|
||||
(set-default-file-modes umask)))
|
||||
(and modes
|
||||
(set-file-modes to-name (logand modes #o1777)))
|
||||
(and extended-attributes
|
||||
(set-file-extended-attributes to-name extended-attributes)))
|
||||
;; If set-file-extended-attributes fails, fall back on set-file-modes.
|
||||
(unless (and extended-attributes
|
||||
(with-demoted-errors
|
||||
(set-file-extended-attributes to-name extended-attributes)))
|
||||
(and modes
|
||||
(set-file-modes to-name (logand modes #o1777)))))
|
||||
|
||||
(defvar file-name-version-regexp
|
||||
"\\(?:~\\|\\.~[-[:alnum:]:#@^._]+\\(?:~[[:digit:]]+\\)?~\\)"
|
||||
|
@ -4737,8 +4739,14 @@ Before and after saving the buffer, this function runs
|
|||
(setq setmodes (list (file-modes buffer-file-name)
|
||||
(file-extended-attributes buffer-file-name)
|
||||
buffer-file-name))
|
||||
(set-file-modes buffer-file-name (logior (car setmodes) 128))
|
||||
(set-file-extended-attributes buffer-file-name (nth 1 setmodes)))))
|
||||
;; If set-file-extended-attributes fails, fall back on
|
||||
;; set-file-modes.
|
||||
(unless
|
||||
(with-demoted-errors
|
||||
(set-file-extended-attributes buffer-file-name
|
||||
(nth 1 setmodes)))
|
||||
(set-file-modes buffer-file-name
|
||||
(logior (car setmodes) 128))))))
|
||||
(let (success)
|
||||
(unwind-protect
|
||||
(progn
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
2012-12-29 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* fileio.c (Fset_file_selinux_context, Fset_file_acl): Return t if
|
||||
file's SELinux context or ACLs successfully set, nil otherwise.
|
||||
(Bug#13298)
|
||||
|
||||
* w32proc.c (reader_thread): Avoid passing NULL handles to
|
||||
SetEvent and WaitForSingleObject.
|
||||
|
||||
|
|
10
src/fileio.c
10
src/fileio.c
|
@ -2996,8 +2996,10 @@ DEFUN ("set-file-selinux-context", Fset_file_selinux_context,
|
|||
CONTEXT should be a list (USER ROLE TYPE RANGE), where the list
|
||||
elements are strings naming the components of a SELinux context.
|
||||
|
||||
This function does nothing if SELinux is disabled, or if Emacs was not
|
||||
compiled with SELinux support. */)
|
||||
Value is t if setting of SELinux context was successful, nil otherwise.
|
||||
|
||||
This function does nothing and returns nil if SELinux is disabled,
|
||||
or if Emacs was not compiled with SELinux support. */)
|
||||
(Lisp_Object filename, Lisp_Object context)
|
||||
{
|
||||
Lisp_Object absname;
|
||||
|
@ -3063,6 +3065,7 @@ compiled with SELinux support. */)
|
|||
|
||||
context_free (parsed_con);
|
||||
freecon (con);
|
||||
return Qt;
|
||||
}
|
||||
else
|
||||
report_file_error ("Doing lgetfilecon", Fcons (absname, Qnil));
|
||||
|
@ -3127,6 +3130,8 @@ DEFUN ("set-file-acl", Fset_file_acl, Sset_file_acl,
|
|||
ACL-STRING should contain the textual representation of the ACL
|
||||
entries in a format suitable for the platform.
|
||||
|
||||
Value is t if setting of ACL was successful, nil otherwise.
|
||||
|
||||
Setting ACL for local files requires Emacs to be built with ACL
|
||||
support. */)
|
||||
(Lisp_Object filename, Lisp_Object acl_string)
|
||||
|
@ -3166,6 +3171,7 @@ support. */)
|
|||
report_file_error ("Setting ACL", Fcons (absname, Qnil));
|
||||
|
||||
acl_free (acl);
|
||||
return Qt;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue