1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-29 08:31:35 -08:00
emacs/admin
Paul Eggert 73dcdb9f30 Use faccessat, not access, when checking file permissions.
This fixes a bug that has been present in Emacs since its creation.
It was reported by Chris Torek in 1983 even before GNU Emacs existed,
which must set some sort of record.  (Torek's bug report was against
a predecessor of GNU Emacs, but GNU Emacs happened to have the
same common flaw.)  See Torek's Usenet posting
"setuid/setgid programs & Emacs" Article-I.D.: sri-arpa.858
Posted: Fri Apr  8 14:18:56 1983.
* .bzrignore: Add lib/fcntl.h.
* configure.ac (euidaccess): Remove check; gnulib does this for us now.
(gl_FCNTL_O_FLAGS): Define a dummy version.
* lib/at-func.c, lib/euidaccess.c, lib/faccessat.c, lib/fcntl.in.h:
* lib/getgroups.c, lib/group-member.c, lib/root-uid.h:
* lib/xalloc-oversized.h, m4/euidaccess.m4, m4/faccessat.m4:
* m4/fcntl_h.m4, m4/getgroups.m4, m4/group-member.m4:
New files, from gnulib.
* lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
* admin/merge-gnulib (GNULIB_MODULES): Add faccessat.
(GNULIB_TOOL_FLAGS): Avoid at-internal, fchdir, malloc-posix,
openat-die, openat-h, save-cwd.  Do not avoid fcntl-h.
Omit gnulib's m4/fcntl-o.m4.
* nt/inc/ms-w32.h (AT_FDCWD, AT_EACCESS): New symbols.
(access): Remove.
(faccessat): New macro.
* src/Makefile.in (LIB_EACCESS): New macro.
(LIBES): Use it.
* src/callproc.c (init_callproc):
* src/charset.c (init_charset):
* src/fileio.c (check_existing, check_executable, check_writable)
(Ffile_readable_p):
* src/lread.c (openp, load_path_check):
* src/process.c (allocate_pty):
* src/xrdb.c (file_p):
Use effective UID when checking permissions, not real UID.
* src/callproc.c (init_callproc):
* src/charset.c (init_charset):
* src/lread.c (load_path_check, init_lread):
Test whether directories are accessible, not merely whether they exist.
* src/conf_post.h (GNULIB_SUPPORT_ONLY_AT_FDCWD): New macro.
* src/fileio.c (check_existing, check_executable, check_writable)
(Ffile_readable_p):
Use symbolic names instead of integers for the flags, as they're
portable now.
(check_writable): New arg AMODE.  All uses changed.
Set errno on failure.
(Ffile_readable_p): Use faccessat, not stat + open + close.
(Ffile_writable_p): No need to call check_existing + check_writable.
Just call check_writable and then look at errno.  This saves a syscall.
dir should never be nil; replace an unnecessary runtime check
with an eassert.  When checking the parent directory of a nonexistent
file, check that the directory is searchable as well as writable, as
we can't create files in unsearchable directories.
(file_directory_p): New function, which uses 'stat' on most platforms
but faccessat with D_OK (for efficiency) if WINDOWSNT.
(Ffile_directory_p, Fset_file_times): Use it.
(file_accessible_directory_p): New function, which uses a single
syscall for efficiency.
(Ffile_accessible_directory_p): Use it.
* src/xrdb.c (file_p): Use file_directory_p.
* src/lisp.h (file_directory_p, file_accessible_directory_p): New decls.
* src/lread.c (openp): When opening a file, use fstat rather than
stat, as that avoids a permissions race.  When not opening a file,
use file_directory_p rather than stat.
(dir_warning): First arg is now a usage string, not a format.
Use errno.  All uses changed.
* src/nsterm.m (ns_term_init): Remove unnecessary call to file-readable
that merely introduced a race.
* src/process.c, src/sysdep.c, src/term.c: All uses of '#ifdef O_NONBLOCK'
changed to '#if O_NONBLOCK', to accommodate gnulib O_* style,
and similarly for the other O_* flags.
* src/w32.c (sys_faccessat): Rename from sys_access and switch to
faccessat's API.  All uses changed.
* src/xrdb.c: Do not include <sys/stat.h>; no longer needed.
(magic_db): Rename from magic_file_p.
(magic_db, search_magic_path): Return an XrmDatabase rather than a
char *, so that we don't have to test for file existence
separately from opening the file for reading.  This removes a race
fixes a permission-checking problem, and simplifies the code.
All uses changed.
(file_p): Remove; no longer needed.

Fixes: debbugs:12632
2012-11-13 20:55:41 -08:00
..
charsets Add more mappings for the charset japanese-jisx0208-1978. 2012-10-14 17:01:30 +09:00
coccinelle Revert and cleanup Lisp_Cons, Lisp_Misc and Lisp_Symbol things. 2012-08-07 17:37:21 +04:00
grammars Update for admin/grammars/README. 2012-10-06 22:22:31 +08:00
notes usertags updates 2012-10-13 12:39:42 -07:00
nt Add 2012 to FSF copyright years for Emacs files (do not merge to trunk) 2012-01-10 23:52:35 -08:00
unidata Update to Unicode 6.2. 2012-09-27 00:21:16 +02:00
admin.el * admin/admin.el (set-copyright): Add msdos/sed2v2.inp. 2012-11-03 12:19:05 -07:00
alloc-colors.c Add 2012 to FSF copyright years for Emacs files (do not merge to trunk) 2012-01-10 23:52:35 -08:00
build-configs Add 2012 to FSF copyright years for Emacs files (do not merge to trunk) 2012-01-10 23:52:35 -08:00
bzrmerge.el * admin/bzrmerge.el (bzrmerge-merges): Allow unversioned files in the tree. 2012-08-28 15:26:41 -04:00
ChangeLog Use faccessat, not access, when checking file permissions. 2012-11-13 20:55:41 -08:00
check-doc-strings Nuke arch-tags. 2011-01-15 15:16:57 -08:00
CPP-DEFINES Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid. 2012-11-04 19:18:32 -08:00
cus-test.el Add 2012 to FSF copyright years for Emacs files (do not merge to trunk) 2012-01-10 23:52:35 -08:00
diff-tar-files Add 2012 to FSF copyright years for Emacs files (do not merge to trunk) 2012-01-10 23:52:35 -08:00
emacs-pretesters Nuke arch-tags. 2011-01-15 15:16:57 -08:00
FOR-RELEASE FOR-RELEASE comment 2012-05-07 23:44:18 -07:00
MAINTAINERS Remove files that no longer exist 2012-08-01 23:17:21 -07:00
make-announcement Add 2012 to FSF copyright years for Emacs files (do not merge to trunk) 2012-01-10 23:52:35 -08:00
make-changelog-diff Nuke arch-tags. 2011-01-15 15:16:57 -08:00
make-emacs Use a simple struct to implement compile time checks for the Lisp_Object type 2012-06-13 15:40:48 +02:00
make-tarball.txt Remove --disable-maintainer-mode option from 'configure'. (Bug#11555) 2012-06-01 11:26:21 -07:00
merge-gnulib Use faccessat, not access, when checking file permissions. 2012-11-13 20:55:41 -08:00
quick-install-emacs Rename configure.in to configure.ac. 2012-07-08 21:52:49 -07:00
README Add 2012 to FSF copyright years for Emacs files (do not merge to trunk) 2012-01-10 23:52:35 -08:00

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Copyright (C) 2001-2012  Free Software Foundation, Inc.
See the end of the file for license conditions.


			 The admin directory

This directory contains scripts and other things useful for developing
and maintaining Emacs.  These files are not part of Emacs releases
because they are not deemed generally useful, and you have to know
what you do when using them.


* Instructions and scripts used to prepare an Emacs release.

** FOR-RELEASE

Living list of activities that must be completed before the next release.

** make-tarball.txt

Instructions to create pretest or release tarballs, announcements, etc.

** admin.el

Utilities for setting version numbers and alike.

** make-announcement, make-changelog-diff

Scripts used to prepare release announcements.


* Scripts that can be used to build and test Emacs.

** build-configs

Build Emacs in various configurations.

** make-emacs

Build Emacs in various ways.

** quick-install-emacs

Install emacs quickly (`incrementally').

** alloc-colors.c

A utility program that allocates a given number of colors on X.  Can
be used to debug Emacs with dense colormaps (PseudoColor).

** check-doc-strings

Check doc strings against documentation.

** cus-test.el

Tests for custom types and load problems.

** diff-tar-files

Show files added/removed between two tar files.


Brief description of sub-directories:

charsets		scripts for generating charset map files
			in ../etc/charsets
unidata			scripts for generating character property files
			in ../lisp/international


This file is part of GNU Emacs.

GNU Emacs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

GNU Emacs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.

Local variables:
mode: outline
paragraph-separate: "[ 	]*$"
end: