mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-03 10:31:37 -08:00
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 |
||
|---|---|---|
| .. | ||
| icons | ||
| inc | ||
| .gitignore | ||
| addpm.c | ||
| addsection.c | ||
| ChangeLog | ||
| cmdproxy.c | ||
| config.nt | ||
| configure.bat | ||
| COPYING | ||
| ddeclient.c | ||
| emacs-src.tags | ||
| emacs-x64.manifest | ||
| emacs-x86.manifest | ||
| emacs.rc | ||
| emacsclient.rc | ||
| envadd.bat | ||
| ftime-nostartup.bat | ||
| ftime.bat | ||
| gmake.defs | ||
| INSTALL | ||
| makefile.w32-in | ||
| multi-install-info.bat | ||
| nmake.defs | ||
| paths.h | ||
| preprep.c | ||
| README | ||
| README.W32 | ||
| runemacs.c | ||
| subdirs.el | ||
| zipdist.bat | ||
Emacs for Windows NT/2000 and Windows 95/98/ME
Copyright (C) 2001-2012 Free Software Foundation, Inc.
See the end of the file for license conditions.
This directory contains support for compiling and running GNU Emacs on
Windows NT, Windows 95, and their successors. This port supports all
of the major functionality of the Unix version, including
subprocesses, windowing features (fonts, colors, scroll bars, multiple
frames, etc.), and networking support.
Precompiled distributions are also available; ftp to
ftp://ftp.gnu.org/gnu/emacs/windows/
for the latest precompiled distributions.
* Building and installing
See the INSTALL file in this directory for detailed instructions on
building and installing Emacs on your system.
* EXE files produced
Building and installing Emacs will produce the following executable
files in the bin directory.
+ emacs.exe - The main Emacs executable. As this is designed to run
as both a text-mode application (emacs -nw) and as a GUI application,
it will pop up a command prompt window if run directly from Explorer.
+ runemacs.exe - A wrapper for running Emacs as a GUI application
without popping up a command prompt window.
+ emacsclient.exe - A command-line client program that can
communicate with a running Emacs process. See the `Emacs Server'
node of the Emacs manual.
+ emacsclientw.exe - A version of emacsclient that does not open
a command-line window.
+ addpm.exe - A basic installer that creates Start Menu icons for Emacs.
Running this is optional.
+ cmdproxy.exe - Used internally by Emacs to work around problems with
the native shells in various versions of Windows.
+ ctags.exe, etags.exe - Tools for generating tag files. See the
`Tags' node of the Emacs manual.
+ ebrowse.exe - A tool for generating C++ browse information. See the
`Ebrowse' manual.
+ ddeclient.exe - A tool for interacting with DDE servers.
+ hexl.exe - A tool for converting files to hex dumps. See the
`Editing Binary Files' node of the Emacs manual.
+ movemail.exe - A helper application for safely moving mail from
a mail spool or POP server to a local user mailbox. See the
`Movemail' node of the Emacs manual.
* Further information
There is a web page that serves as a FAQ for the Windows port of
Emacs (a.k.a. NTEmacs) at:
http://www.gnu.org/software/emacs/windows/ntemacs.html
There is also a mailing list for discussing issues related to this
port of Emacs. For information about the list, see this Web page:
http://mail.gnu.org/mailman/listinfo/help-emacs-windows
To ask questions on the mailing list, send email to
help-emacs-windows@gnu.org. (You don't need to subscribe for that.)
To subscribe to the list or unsubscribe from it, fill the form you
find at http://mail.gnu.org/mailman/listinfo/help-emacs-windows as
explained there.
Another valuable source of information and help which should not be
overlooked is the various Usenet news groups dedicated to Emacs.
These are particularly good for help with general issues which aren't
specific to the Windows port of Emacs. The main news groups to use
for seeking help are:
gnu.emacs.help
comp.emacs
There are also fairly regular postings and announcements of new or
updated Emacs packages on this group:
gnu.emacs.sources
* Reporting bugs
If you encounter a bug in this port of Emacs, we would like to hear
about it. First check the file etc/PROBLEMS and the FAQ on the web
page above to see if the bug is already known and if there are any
workarounds. If not, then check whether the bug has something to do
with code in your .emacs file, e.g. by invoking Emacs with the "-Q"
option.
Use the built in bug reporting functionality in Emacs so that it
will be seen by the right people. You can use the command M-x
report-emacs-bug to create and send the bug report, but in some
cases there is a function to report bugs in a specific package;
e.g. M-x gnus-bug for Gnus, M-x c-submit-bug-report for C/C++/Java
mode, etc.
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/>.