From 0d49dd9de2ba941f685a15f795b65e2afdaa03fe Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 11 Apr 2005 20:10:23 +0000 Subject: [PATCH] Include unistd-safer.h. (wipename): Use fd_safer on directory file descriptor. (wipefile): Remove special case for /dev/fd/* on older hosts. It didn't work in general, and wasn't documented. Use fd_safer. --- src/shred.c | 33 +++++++-------------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/src/shred.c b/src/shred.c index f4e96bd2f..6a4ad4478 100644 --- a/src/shred.c +++ b/src/shred.c @@ -108,6 +108,7 @@ #include "inttostr.h" #include "quotearg.h" /* For quotearg_colon */ #include "quote.h" /* For quotearg_colon */ +#include "unistd-safer.h" #define DEFAULT_PASSES 25 /* Default */ @@ -1345,6 +1346,7 @@ wipename (char *oldname, char const *qoldname, struct Options const *flags) int dir_fd = open (dir, O_WRONLY | O_NOCTTY); if (dir_fd < 0) dir_fd = open (dir, O_RDONLY | O_NOCTTY); + dir_fd = fd_safer (dir_fd); if (flags->verbose) error (0, 0, _("%s: removing"), qoldname); @@ -1434,32 +1436,11 @@ wipefile (char *name, char const *qname, int fd; fd = open (name, O_WRONLY | O_NOCTTY); - if (fd < 0) - { - if (errno == EACCES && flags->force) - { - if (chmod (name, S_IWUSR) >= 0) /* 0200, user-write-only */ - fd = open (name, O_WRONLY | O_NOCTTY); - } - else if ((errno == ENOENT || errno == ENOTDIR) - && strncmp (name, "/dev/fd/", 8) == 0) - { - /* We accept /dev/fd/# even if the OS doesn't support it */ - int errnum = errno; - unsigned long int num; - char *p; - errno = 0; - num = strtoul (name + 8, &p, 10); - /* If it's completely decimal with no leading zeros... */ - if (errno == 0 && !*p && num <= INT_MAX && - (('1' <= name[8] && name[8] <= '9') - || (name[8] == '0' && !name[9]))) - { - return wipefd (num, qname, s, flags); - } - errno = errnum; - } - } + if (fd < 0 + && (errno == EACCES && flags->force) + && chmod (name, S_IWUSR) == 0) + fd = open (name, O_WRONLY | O_NOCTTY); + fd = fd_safer (fd); if (fd < 0) { error (0, errno, _("%s: failed to open for writing"), qname); -- 2.34.1