]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix comparisons of file ownership on MS-Windows for the Administrator user.
authorEli Zaretskii <eliz@gnu.org>
Fri, 11 Mar 2011 12:19:08 +0000 (14:19 +0200)
committerEli Zaretskii <eliz@gnu.org>
Fri, 11 Mar 2011 12:19:08 +0000 (14:19 +0200)
 lisp/files.el (file-ownership-preserved-p): Pass `integer' as an
 explicit 2nd argument to `file-attributes'.  If the file's owner
 is the Administrators group on Windows, and the current user is
 Administrator, consider that a match.
 lisp/server.el (server-ensure-safe-dir): Consider server directory
 safe on MS-Windows if its owner is the Administrators group while
 the current Emacs user is Administrator.  Use `=' to compare
 numerical UIDs, since they could be integers or floats.

lisp/ChangeLog
lisp/files.el
lisp/server.el

index 1b8a7641b35d865c11c336028b6dd3c4f730f67b..6685e355360d96a2c468320f7a1bd73c16800cbe 100644 (file)
@@ -1,3 +1,15 @@
+2011-03-11  Eli Zaretskii  <eliz@gnu.org>
+
+       * files.el (file-ownership-preserved-p): Pass `integer' as an
+       explicit 2nd argument to `file-attributes'.  If the file's owner
+       is the Administrators group on Windows, and the current user is
+       Administrator, consider that a match.
+
+       * server.el (server-ensure-safe-dir): Consider server directory
+       safe on MS-Windows if its owner is the Administrators group while
+       the current Emacs user is Administrator.  Use `=' to compare
+       numerical UIDs, since they could be integers or floats.
+
 2011-03-07  Chong Yidong  <cyd@stupidchicken.com>
 
        * Version 23.3 released.
index 88063aed2b91ad1ddf362d51d7fbb789e9f3d01b..91fed0d1274a1f971a3ea70e2c83c8f5777d127b 100644 (file)
@@ -3752,11 +3752,17 @@ we do not remove backup version numbers, only true file version numbers."
   (let ((handler (find-file-name-handler file 'file-ownership-preserved-p)))
     (if handler
        (funcall handler 'file-ownership-preserved-p file)
-      (let ((attributes (file-attributes file)))
+      (let ((attributes (file-attributes file 'integer)))
        ;; Return t if the file doesn't exist, since it's true that no
        ;; information would be lost by an (attempted) delete and create.
        (or (null attributes)
-           (= (nth 2 attributes) (user-uid)))))))
+           (= (nth 2 attributes) (user-uid))
+           ;; Files created on Windows by Administrator (RID=500)
+           ;; have the Administrators group (RID=544) recorded as
+           ;; their owner.  Rewriting them will still preserve the
+           ;; owner.
+           (and (eq system-type 'windows-nt)
+                (= (user-uid) 500) (= (nth 2 attributes) 544)))))))
 
 (defun file-name-sans-extension (filename)
   "Return FILENAME sans final \"extension\".
index f62a7c73abcc04340f177d55ec40d5c307b45b4e..816a072bf7589e675212bd8f59c8f997602f53dc 100644 (file)
@@ -474,7 +474,13 @@ See variable `server-auth-dir' for details."
                              (file-name-as-directory dir))
                      :warning)
                     (throw :safe t))
-                  (unless (eql uid (user-uid)) ; is the dir ours?
+                  (unless (or (= uid (user-uid)) ; is the dir ours?
+                              (and w32
+                                   ;; Files created on Windows by
+                                   ;; Administrator (RID=500) have
+                                   ;; the Administrators (RID=544)
+                                   ;; group recorded as the owner.
+                                   (= uid 544) (= (user-uid) 500)))
                     (throw :safe nil))
                   (when w32                    ; on NTFS?
                     (throw :safe t))