diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2010-09-24 13:13:25 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2010-09-24 13:13:47 -0700 |
commit | c5c196310edddc0411cc312e45645a1a87b02793 (patch) | |
tree | bcdefccf6cb935ebb3ab96e8b8a1b536b0f1b1a4 | |
parent | 14efeb9f956e38d7beaf3fbedb04d3f3bb9ece3a (diff) | |
download | tar-c5c196310edddc0411cc312e45645a1a87b02793.tar.gz |
tar: -x -C symlink fix
* src/misc.c (chdir_do): Don't use O_NOFOLLOW when opening the
argument to -C. This is for consistency with "tar -c -C FOO", and
matches the new documentation.
* tests/extrac14.at: New file.
* tests/Makefile.am (TESTSUITE_AT): Add it.
* tests/testsuite.at: Include it.
-rw-r--r-- | src/misc.c | 3 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/extrac14.at | 36 | ||||
-rw-r--r-- | tests/testsuite.at | 1 |
4 files changed, 40 insertions, 1 deletions
@@ -736,7 +736,8 @@ chdir_do (int i) { if (! IS_ABSOLUTE_FILE_NAME (curr->name)) chdir_do (i - 1); - fd = openat (chdir_fd, curr->name, open_searchdir_flags); + fd = openat (chdir_fd, curr->name, + open_searchdir_flags & ~ O_NOFOLLOW); if (fd < 0) open_fatal (curr->name); diff --git a/tests/Makefile.am b/tests/Makefile.am index 34be6175..4bf3ff0c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -80,6 +80,7 @@ TESTSUITE_AT = \ extrac11.at\ extrac12.at\ extrac13.at\ + extrac14.at\ filerem01.at\ filerem02.at\ gzip.at\ diff --git a/tests/extrac14.at b/tests/extrac14.at new file mode 100644 index 00000000..1cfaa5c3 --- /dev/null +++ b/tests/extrac14.at @@ -0,0 +1,36 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- + +# Test suite for GNU tar. +# Copyright (C) 2010 Free Software Foundation, Inc. + +# 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 +# the Free Software Foundation; either version 3, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# written by Paul Eggert + +# Check that 'tar -x -C FOO' follows FOO if FOO is a symbolic link. + +AT_SETUP([extract -C symlink]) +AT_KEYWORDS([extract extrac14]) + +AT_TAR_CHECK([ +mkdir dest +ln -s dest symlink +echo foo >foo +tar -cf archive.tar foo && +tar -xf archive.tar -C symlink && +cmp foo dest/foo +], +[0],[],[],[],[],[gnu]) + +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index 8d768877..c047bd2f 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -152,6 +152,7 @@ m4_include([extrac10.at]) m4_include([extrac11.at]) m4_include([extrac12.at]) m4_include([extrac13.at]) +m4_include([extrac14.at]) m4_include([label01.at]) m4_include([label02.at]) |