[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-tar] [PATCH] fix extrac13.at with a non-working O_NOFOLLOW
From: |
Paul Eggert |
Subject: |
Re: [Bug-tar] [PATCH] fix extrac13.at with a non-working O_NOFOLLOW |
Date: |
Tue, 17 Jan 2012 22:25:41 -0800 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20111124 Thunderbird/8.0 |
Thanks, that's too bad about GNU/Hurd not supporting O_NOFOLLOW.
I installed the following slightly-different patch:
tar: port --overwrite symlink test to GNU/Hurd
Problem reported by Pino Toscano in
<http://lists.gnu.org/archive/html/bug-tar/2012-01/msg00040.html>.
* gnulib.modules: Add fcntl-h, which defines
HAVE_WORKING_O_NOFOLLOW.
* src/extract.c (open_output_file): Use HAVE_WORKING_O_NOFOLLOW,
not O_NOFOLLOW, when testing whther O_NOFOLLOW works.
diff --git a/gnulib.modules b/gnulib.modules
index 49eab65..43c9de1 100644
--- a/gnulib.modules
+++ b/gnulib.modules
@@ -12,6 +12,7 @@ dirname
error
exclude
exitfail
+fcntl-h
fdopendir
fdutimensat
fileblocks
diff --git a/src/extract.c b/src/extract.c
index 55f3eb8..bd5e7bf 100644
--- a/src/extract.c
+++ b/src/extract.c
@@ -887,7 +887,8 @@ open_output_file (char const *file_name, int typeflag,
mode_t mode,
/* If O_NOFOLLOW is needed but does not work, check for a symlink
separately. There's a race condition, but that cannot be avoided
on hosts lacking O_NOFOLLOW. */
- if (! O_NOFOLLOW && overwriting_old_files && ! dereference_option)
+ if (! HAVE_WORKING_O_NOFOLLOW
+ && overwriting_old_files && ! dereference_option)
{
struct stat st;
if (fstatat (chdir_fd, file_name, &st, AT_SYMLINK_NOFOLLOW) == 0