From: Wolfgang Jenkner <wjenkner@inode.at>
To: Paul Eggert <eggert@cs.ucla.edu>
Cc: 13125@debbugs.gnu.org
Subject: bug#13125: Fix permissions bugs with setgid directories etc.
Date: Sun, 09 Dec 2012 17:43:31 +0100 [thread overview]
Message-ID: <85a9tnkw8d.fsf@iznogoud.viz> (raw)
In-Reply-To: <50C3E5CE.2000307@cs.ucla.edu>
On Sun, Dec 09 2012, Paul Eggert wrote:
> In several places Emacs assumes that on 4.2BSD hosts, a newly created
> file is given a group ID equal to its parent directory, and that on
> non-4.2BSD hosts the new files are given Emacs's group ID. Although
> this was true long ago, it hasn't been true for many years. Most
> commonly, the old 4.2BSD behavior is now selected by the setgid bit on
> directories.
I understand you are describing here the most common behaviour only for
non-4.2BSD descendants?
I've tested your patch by typing the following in a *shell* buffer.
[[1 ~]]$ uname -rs
FreeBSD 9.1-PRERELEASE
[[2 ~]]$ id
uid=1002(wolfgang) gid=20(staff) groups=20(staff),0(wheel),5(operator)
[[3 ~]]$ ls -ld /tmp
drwxrwxrwt 8 root wheel 512 Dec 9 16:59 /tmp/
[[4 ~]]$ rm -f /tmp/foo && touch $_
[[5 ~]]$ ls -l $_
-rw-r--r-- 1 wolfgang wheel 0 Dec 9 17:01 /tmp/foo
[[6 ~]]$
Then, in the same emacs process, I evaluate
(file-ownership-preserved-p "/tmp/foo")
=> t
which is fine, but
(file-ownership-preserved-p "/tmp/foo" t)
=> nil
is not since /tmp/foo will always be created in the wheel group.
Indeed, in an unpatched emacs, I get the expected
(nth 9 (file-attributes "/tmp/foo"))
=> nil
Now, open(2) on all free BSD descendants invariably, literally and
unconditionally states
When a new file is created it is given the group of the directory which
contains it.
So I wonder if the following lightly tested patch (on top of yours)
would give better results in this case (in the absence of races with
other processes).
Wolfgang
=== modified file 'lisp/files.el'
--- lisp/files.el 2012-12-09 15:29:12 +0000
+++ lisp/files.el 2012-12-09 16:25:09 +0000
@@ -4039,6 +4039,7 @@
(and (eq system-type 'windows-nt)
(= (user-uid) 500) (= (nth 2 attributes) 544)))
(or (not group)
+ (memq system-type '(berkeley-unix darwin))
(= (nth 3 attributes) (group-gid)))
(let* ((parent (or (file-name-directory file) "."))
(parent-attributes (file-attributes parent 'integer)))
@@ -4052,7 +4053,10 @@
;; inherits that directory's group. On some systems
;; this happens even if the setgid bit is not set.
(or (not group)
- (= (nth 3 parent-attributes) (group-gid)))))))))))
+ (= (nth 3 parent-attributes)
+ (if (memq system-type '(berkeley-unix darwin))
+ (nth 3 attributes)
+ (group-gid))))))))))))
(defun file-name-sans-extension (filename)
"Return FILENAME sans final \"extension\".
next prev parent reply other threads:[~2012-12-09 16:43 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-09 1:13 bug#13125: Fix permissions bugs with setgid directories etc Paul Eggert
2012-12-09 3:54 ` Chong Yidong
2012-12-09 7:26 ` Paul Eggert
2012-12-09 17:03 ` Eli Zaretskii
2012-12-10 1:08 ` Paul Eggert
2012-12-14 19:00 ` Paul Eggert
2012-12-09 8:32 ` Michael Albinus
2012-12-09 8:56 ` Paul Eggert
2012-12-09 9:32 ` Michael Albinus
2012-12-09 16:43 ` Wolfgang Jenkner [this message]
2012-12-10 0:46 ` Paul Eggert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=85a9tnkw8d.fsf@iznogoud.viz \
--to=wjenkner@inode.at \
--cc=13125@debbugs.gnu.org \
--cc=eggert@cs.ucla.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).