diff lisp/files.el @ 25604:634f6f699331

(backup-by-copying-when-privileged-mismatch): New variable. (backup-buffer): Use it.
author Richard M. Stallman <rms@gnu.org>
date Wed, 08 Sep 1999 07:37:56 +0000
parents c4397641ee0e
children 952461b8fdaf
line wrap: on
line diff
--- a/lisp/files.el	Wed Sep 08 07:32:49 1999 +0000
+++ b/lisp/files.el	Wed Sep 08 07:37:56 1999 +0000
@@ -84,8 +84,9 @@
 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 @@
   :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 @@
 		  ;; 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