aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>1999-09-08 07:37:56 +0000
committerRichard M. Stallman <[email protected]>1999-09-08 07:37:56 +0000
commit2cb28a6046084caa7d9e21d717b555f71b4c1a88 (patch)
tree2c92b99e36e8ece78006765865cbcc061582263d /lisp
parentbb53e1ee9a9b8898dd3d49ecc53804ca79294398 (diff)
(backup-by-copying-when-privileged-mismatch): New variable.
(backup-buffer): Use it.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/files.el30
1 files changed, 24 insertions, 6 deletions
diff --git a/lisp/files.el b/lisp/files.el
index 17a9e78c7d..272c901432 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -84,8 +84,9 @@ names that the old file had will now refer to the new (edited) file.
The file's owner and group are unchanged.
The choice of renaming or copying is controlled by the variables
-`backup-by-copying', `backup-by-copying-when-linked' and
-`backup-by-copying-when-mismatch'. See also `backup-inhibited'."
+`backup-by-copying', `backup-by-copying-when-linked',
+`backup-by-copying-when-mismatch' and
+`backup-by-copying-when-privileged-mismatch'. See also `backup-inhibited'."
:type 'boolean
:group 'backup)
@@ -120,6 +121,18 @@ This variable is relevant only if `backup-by-copying' is nil."
:type 'boolean
:group 'backup)
+(defcustom backup-by-copying-when-privileged-mismatch 200
+ "*Non-nil means create backups by copying to preserve a privileged owner.
+Renaming may still be used (subject to control of other variables)
+when it would not result in changing the owner of the file or if the owner
+has a user id greater than the value of this variable. This is useful
+when low-numbered uid's are used for special system users (such as root)
+that must maintain ownership of certain files.
+This variable is relevant only if `backup-by-copying' and
+`backup-by-copying-when-mismatch' are nil."
+ :type '(choice (const nil) integer)
+ :group 'backup)
+
(defvar backup-enable-predicate
'(lambda (name)
(or (< (length name) 5)
@@ -2010,14 +2023,19 @@ no longer accessible under its old name."
;; Actually write the back up file.
(condition-case ()
(if (or file-precious-flag
- ; (file-symlink-p buffer-file-name)
+ ; (file-symlink-p buffer-file-name)
backup-by-copying
(and backup-by-copying-when-linked
(> (file-nlinks real-file-name) 1))
- (and backup-by-copying-when-mismatch
+ (and (or backup-by-copying-when-mismatch
+ (integerp backup-by-copying-when-privileged-mismatch))
(let ((attr (file-attributes real-file-name)))
- (or (nth 9 attr)
- (not (file-ownership-preserved-p real-file-name))))))
+ (and (or backup-by-copying-when-mismatch
+ (and (integerp (nth 2 attr))
+ (integerp backup-by-copying-when-privileged-mismatch)
+ (<= (nth 2 attr) backup-by-copying-when-privileged-mismatch)))
+ (or (nth 9 attr)
+ (not (file-ownership-preserved-p real-file-name)))))))
(condition-case ()
(copy-file real-file-name backupname t t)
(file-error