1
0
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:
Eric Blake
2009-09-01 12:25:01 -06:00
parent 02fd4eb456
commit fc333501ca
13 changed files with 51 additions and 25 deletions

View File

@@ -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.

View File

@@ -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 = "~";

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -10,7 +10,7 @@ Depends-on:
atexit atexit
fchdir fchdir
fcntl-h fcntl-h
openat openat-safer
memchr memchr
mempcpy mempcpy
memrchr memrchr

View File

@@ -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

View File

@@ -7,6 +7,7 @@ lib/savedir.c
m4/savedir.m4 m4/savedir.m4
Depends-on: Depends-on:
dirent-safer
fdopendir fdopendir
xalloc xalloc