• Paul Eggert's avatar
    Use faccessat, not access, when checking file permissions. · e752e0b0
    Paul Eggert authored
    * .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):
    * src/lread.c (openp, load_path_check):
    * src/process.c (allocate_pty):
    * src/xrdb.c (file_p):
    Use faccessat, not access or euidaccess.  Use symbolic names
    instead of integers for the flags, as they're portable now.
    * src/charset.c, src/xrdb.c: Include <fcntl.h>, for the new flags used.
    * src/fileio.c (Ffile_readable_p):
    Use faccessat, not stat + open + close.
    (file_directory_p): New function, which uses 'stat' on most places
    but 'access' (for efficiency) if WINDOWSNT.
    * src/fileio.c (Ffile_directory_p, Fset_file_times):
    * src/xrdb.c (file_p): Use file_directory_p.
    * src/lisp.h (file_directory_p): New decl.
    * 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.
    * src/process.c, src/sysdep.c, src/term.c: All uses of '#ifdef O_NONBLOCK'
    changed to '#if O_NONBLOCK', to accommodate gnulib O_* tyle.
    * src/w32.c (sys_faccessat): Rename from sys_access and switch to
    faccessat's API.  All uses changed.
    
    Fixes: debbugs:12632
    e752e0b0
ChangeLog 750 KB