mirror of
https://git.savannah.gnu.org/git/gnulib.git
synced 2025-08-16 01:22:18 +03:00
backupfile, chdir-long, fts, savedir: make safer
* lib/backupfile.c (includes): Use "dirent--.h", since numbered_backup can write to stderr during readdir. * lib/savedir.c (includes): Likewise. * lib/chdir-long.c (includes): Use "fcntl--.h", since openat emulation can write to stderr on failure. * lib/fts.c (includes) [!_LIBC]: Likewise for opendir and openat. * lib/getcwd.c: Document why opendir_safer is unused. * lib/glob.c: Likewise. * lib/scandir.c: Likewise. * lib/openat-proc.c: Likewise, for open_safer. * modules/backupfile (Depends-on): Add dirent-safer. * modules/savedir (Depends-on): Likewise. * modules/fts (Depends-on): Add dirent-safer and openat-safer. * modules/chdir-long (Depends-on): Add openat-safer. Signed-off-by: Eric Blake <ebb9@byu.net>
This commit is contained in:
16
ChangeLog
16
ChangeLog
@@ -1,5 +1,21 @@
|
|||||||
2009-09-02 Eric Blake <ebb9@byu.net>
|
2009-09-02 Eric Blake <ebb9@byu.net>
|
||||||
|
|
||||||
|
backupfile, chdir-long, fts, savedir: make safer
|
||||||
|
* lib/backupfile.c (includes): Use "dirent--.h", since
|
||||||
|
numbered_backup can write to stderr during readdir.
|
||||||
|
* lib/savedir.c (includes): Likewise.
|
||||||
|
* lib/chdir-long.c (includes): Use "fcntl--.h", since openat
|
||||||
|
emulation can write to stderr on failure.
|
||||||
|
* lib/fts.c (includes) [!_LIBC]: Likewise for opendir and openat.
|
||||||
|
* lib/getcwd.c: Document why opendir_safer is unused.
|
||||||
|
* lib/glob.c: Likewise.
|
||||||
|
* lib/scandir.c: Likewise.
|
||||||
|
* lib/openat-proc.c: Likewise, for open_safer.
|
||||||
|
* modules/backupfile (Depends-on): Add dirent-safer.
|
||||||
|
* modules/savedir (Depends-on): Likewise.
|
||||||
|
* modules/fts (Depends-on): Add dirent-safer and openat-safer.
|
||||||
|
* modules/chdir-long (Depends-on): Add openat-safer.
|
||||||
|
|
||||||
openat-safer: new module
|
openat-safer: new module
|
||||||
* modules/openat-safer: New file.
|
* modules/openat-safer: New file.
|
||||||
* lib/openat-safer.c: Likewise.
|
* lib/openat-safer.c: Likewise.
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
/* backupfile.c -- make Emacs style backup file names
|
/* backupfile.c -- make Emacs style backup file names
|
||||||
|
|
||||||
Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
|
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 Free Software
|
||||||
Foundation, Inc.
|
Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <dirent.h>
|
#include "dirent--.h"
|
||||||
#ifndef _D_EXACT_NAMLEN
|
#ifndef _D_EXACT_NAMLEN
|
||||||
# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name)
|
# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name)
|
||||||
#endif
|
#endif
|
||||||
@@ -80,11 +80,6 @@
|
|||||||
of `digit' even when the host does not conform to POSIX. */
|
of `digit' even when the host does not conform to POSIX. */
|
||||||
#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
|
#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
|
||||||
|
|
||||||
/* The results of opendir() in this file are not used with dirfd and fchdir,
|
|
||||||
therefore save some unnecessary work in fchdir.c. */
|
|
||||||
#undef opendir
|
|
||||||
#undef closedir
|
|
||||||
|
|
||||||
/* The extension added to file names to produce a simple (as opposed
|
/* The extension added to file names to produce a simple (as opposed
|
||||||
to numbered) backup file name. */
|
to numbered) backup file name. */
|
||||||
char const *simple_backup_suffix = "~";
|
char const *simple_backup_suffix = "~";
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/* provide a chdir function that tries not to fail due to ENAMETOOLONG
|
/* provide a chdir function that tries not to fail due to ENAMETOOLONG
|
||||||
Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
Copyright (C) 2004-2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -20,7 +20,6 @@
|
|||||||
|
|
||||||
#include "chdir-long.h"
|
#include "chdir-long.h"
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -28,7 +27,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "openat.h"
|
#include "fcntl--.h"
|
||||||
|
|
||||||
#ifndef PATH_MAX
|
#ifndef PATH_MAX
|
||||||
# error "compile this file only if your system defines PATH_MAX"
|
# error "compile this file only if your system defines PATH_MAX"
|
||||||
|
@@ -69,7 +69,7 @@ static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94";
|
|||||||
|
|
||||||
#if ! _LIBC
|
#if ! _LIBC
|
||||||
# include "fcntl--.h"
|
# include "fcntl--.h"
|
||||||
# include "openat.h"
|
# include "dirent--.h"
|
||||||
# include "unistd--.h"
|
# include "unistd--.h"
|
||||||
# include "same-inode.h"
|
# include "same-inode.h"
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991-1999, 2004-2008 Free Software Foundation, Inc.
|
/* Copyright (C) 1991-1999, 2004-2009 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
@@ -103,7 +103,11 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The results of opendir() in this file are not used with dirfd and fchdir,
|
/* The results of opendir() in this file are not used with dirfd and fchdir,
|
||||||
therefore save some unnecessary recursion in fchdir.c. */
|
and we do not leak fds to any single-threaded code that could use stdio,
|
||||||
|
therefore save some unnecessary recursion in fchdir.c.
|
||||||
|
FIXME - if the kernel ever adds support for multi-thread safety for
|
||||||
|
avoiding standard fds, then we should use opendir_safer and
|
||||||
|
openat_safer. */
|
||||||
#undef opendir
|
#undef opendir
|
||||||
#undef closedir
|
#undef closedir
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007, 2008
|
/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
@@ -186,7 +186,10 @@ static const char *next_brace_sub (const char *begin, int flags) __THROW;
|
|||||||
|
|
||||||
#ifndef _LIBC
|
#ifndef _LIBC
|
||||||
/* The results of opendir() in this file are not used with dirfd and fchdir,
|
/* The results of opendir() in this file are not used with dirfd and fchdir,
|
||||||
therefore save some unnecessary work in fchdir.c. */
|
and we do not leak fds to any single-threaded code that could use stdio,
|
||||||
|
therefore save some unnecessary recursion in fchdir.c and opendir_safer.c.
|
||||||
|
FIXME - if the kernel ever adds support for multi-thread safety for
|
||||||
|
avoiding standard fds, then we should use opendir_safer. */
|
||||||
# undef opendir
|
# undef opendir
|
||||||
# undef closedir
|
# undef closedir
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/* Create /proc/self/fd-related names for subfiles of open directories.
|
/* Create /proc/self/fd-related names for subfiles of open directories.
|
||||||
|
|
||||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
Copyright (C) 2006, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -34,7 +34,10 @@
|
|||||||
#include "xalloc.h"
|
#include "xalloc.h"
|
||||||
|
|
||||||
/* The results of open() in this file are not used with fchdir,
|
/* The results of open() in this file are not used with fchdir,
|
||||||
therefore save some unnecessary work in fchdir.c. */
|
and we do not leak fds to any single-threaded code that could use stdio,
|
||||||
|
therefore save some unnecessary work in fchdir.c.
|
||||||
|
FIXME - if the kernel ever adds support for multi-thread safety for
|
||||||
|
avoiding standard fds, then we should use open_safer. */
|
||||||
#undef open
|
#undef open
|
||||||
#undef close
|
#undef close
|
||||||
|
|
||||||
|
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include <dirent.h>
|
#include "dirent--.h"
|
||||||
#ifndef _D_EXACT_NAMLEN
|
#ifndef _D_EXACT_NAMLEN
|
||||||
# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name)
|
# define _D_EXACT_NAMLEN(dp) strlen ((dp)->d_name)
|
||||||
#endif
|
#endif
|
||||||
@@ -41,11 +41,6 @@
|
|||||||
# define NAME_SIZE_DEFAULT 512
|
# define NAME_SIZE_DEFAULT 512
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The results of opendir() in this file are not used with dirfd and fchdir,
|
|
||||||
therefore save some unnecessary work in fchdir.c. */
|
|
||||||
#undef opendir
|
|
||||||
#undef closedir
|
|
||||||
|
|
||||||
/* Return a freshly allocated string containing the file names
|
/* Return a freshly allocated string containing the file names
|
||||||
in directory DIRP, separated by '\0' characters;
|
in directory DIRP, separated by '\0' characters;
|
||||||
the end is marked by two '\0' characters in a row.
|
the end is marked by two '\0' characters in a row.
|
||||||
|
@@ -45,6 +45,14 @@
|
|||||||
# define __opendir opendir
|
# define __opendir opendir
|
||||||
# define __closedir closedir
|
# define __closedir closedir
|
||||||
# define __set_errno(val) errno = (val)
|
# define __set_errno(val) errno = (val)
|
||||||
|
|
||||||
|
/* The results of opendir() in this file are not used with dirfd and fchdir,
|
||||||
|
and we do not leak fds to any single-threaded code that could use stdio,
|
||||||
|
therefore save some unnecessary recursion in fchdir.c and opendir_safer.c.
|
||||||
|
FIXME - if the kernel ever adds support for multi-thread safety for
|
||||||
|
avoiding standard fds, then we should use opendir_safer. */
|
||||||
|
# undef opendir
|
||||||
|
# undef closedir
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef SCANDIR_CANCEL
|
#ifndef SCANDIR_CANCEL
|
||||||
|
@@ -11,6 +11,7 @@ m4/backupfile.m4
|
|||||||
Depends-on:
|
Depends-on:
|
||||||
argmatch
|
argmatch
|
||||||
d-ino
|
d-ino
|
||||||
|
dirent-safer
|
||||||
dirname
|
dirname
|
||||||
memcmp
|
memcmp
|
||||||
stdbool
|
stdbool
|
||||||
|
@@ -10,7 +10,7 @@ Depends-on:
|
|||||||
atexit
|
atexit
|
||||||
fchdir
|
fchdir
|
||||||
fcntl-h
|
fcntl-h
|
||||||
openat
|
openat-safer
|
||||||
memchr
|
memchr
|
||||||
mempcpy
|
mempcpy
|
||||||
memrchr
|
memrchr
|
||||||
|
@@ -11,6 +11,7 @@ Depends-on:
|
|||||||
cycle-check
|
cycle-check
|
||||||
d-ino
|
d-ino
|
||||||
d-type
|
d-type
|
||||||
|
dirent-safer
|
||||||
dirfd
|
dirfd
|
||||||
fchdir
|
fchdir
|
||||||
fcntl-h
|
fcntl-h
|
||||||
@@ -19,7 +20,7 @@ hash
|
|||||||
i-ring
|
i-ring
|
||||||
lstat
|
lstat
|
||||||
memmove
|
memmove
|
||||||
openat
|
openat-safer
|
||||||
stdbool
|
stdbool
|
||||||
unistd-safer
|
unistd-safer
|
||||||
|
|
||||||
|
@@ -7,6 +7,7 @@ lib/savedir.c
|
|||||||
m4/savedir.m4
|
m4/savedir.m4
|
||||||
|
|
||||||
Depends-on:
|
Depends-on:
|
||||||
|
dirent-safer
|
||||||
fdopendir
|
fdopendir
|
||||||
xalloc
|
xalloc
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user