diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2012-12-14 10:59:00 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2012-12-14 10:59:00 -0800 |
commit | 97976f9f3fcf588535bf4afad71de92860bb2f8e (patch) | |
tree | 48af44cc93624fd119f59ceb94fbb5c5f3eaaf7c /src/editfns.c | |
parent | ad966fe7542070b5c9aa34ed019d586e7c3adae6 (diff) | |
download | emacs-97976f9f3fcf588535bf4afad71de92860bb2f8e.tar.gz emacs-97976f9f3fcf588535bf4afad71de92860bb2f8e.tar.bz2 emacs-97976f9f3fcf588535bf4afad71de92860bb2f8e.zip |
Fix permissions bugs with setgid directories etc.
* configure.ac (BSD4_2): Remove; no longer needed.
* admin/CPP-DEFINES (BSD4_2): Remove.
* doc/lispintro/emacs-lisp-intro.texi (Files List):
directory-files-and-attributes now outputs t for attribute that's
now a placeholder.
* doc/lispref/files.texi (Testing Accessibility): Document GROUP arg
of file-ownership-preserved-p.
(File Attributes): Document that 9th element is now
just a placeholder.
* doc/lispref/os.texi (User Identification): Document new functions group-gid,
group-real-gid.
* etc/NEWS: Document changes to file-attributes,
file-ownership-preserved-p.
Mention new functions group-gid, group-real-gid.
* lisp/files.el (backup-buffer): Don't rely on 9th output of
file-attributes, as it's now a placeholder. Instead, use the new
optional arg of file-ownership-preserved-p.
(file-ownership-preserved-p): New optional arg GROUP.
Fix mishandling of setuid directories that would cause this
function to return t when it should have returned nil.
Document what happens if the file does not exist, and when
it's not known whether the ownership will be preserved.
* lisp/net/tramp-sh.el (tramp-sh-handle-file-ownership-preserved-p):
Likewise.
(tramp-get-local-gid): Use group-gid for integer, as that's
faster and more reliable.
* src/dired.c (Ffile_attributes): Return t as the 9th attribute,
to mark it as a placeholder. The old value was often wrong.
The only user of this attribute has been changed to use
file-ownership-preserved-p instead, with its new group arg.
* src/editfns.c (Fgroup_gid, Fgroup_real_gid): New functions.
Fixes: debbugs:13125
Diffstat (limited to 'src/editfns.c')
-rw-r--r-- | src/editfns.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/editfns.c b/src/editfns.c index eb909f73697..108c8b27187 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -1272,6 +1272,24 @@ Value is an integer or a float, depending on the value. */) return make_fixnum_or_float (uid); } +DEFUN ("group-gid", Fgroup_gid, Sgroup_gid, 0, 0, 0, + doc: /* Return the effective gid of Emacs. +Value is an integer or a float, depending on the value. */) + (void) +{ + gid_t egid = getegid (); + return make_fixnum_or_float (egid); +} + +DEFUN ("group-real-gid", Fgroup_real_gid, Sgroup_real_gid, 0, 0, 0, + doc: /* Return the real gid of Emacs. +Value is an integer or a float, depending on the value. */) + (void) +{ + gid_t gid = getgid (); + return make_fixnum_or_float (gid); +} + DEFUN ("user-full-name", Fuser_full_name, Suser_full_name, 0, 1, 0, doc: /* Return the full name of the user logged in, as a string. If the full name corresponding to Emacs's userid is not known, @@ -4899,6 +4917,8 @@ functions if all the text being accessed has this property. */); defsubr (&Suser_real_login_name); defsubr (&Suser_uid); defsubr (&Suser_real_uid); + defsubr (&Sgroup_gid); + defsubr (&Sgroup_real_gid); defsubr (&Suser_full_name); defsubr (&Semacs_pid); defsubr (&Scurrent_time); |