Commit Graph

2848 Commits

Author SHA1 Message Date
Sergey Poznyakoff
21c1c29592 Minor fix
* src/tar.h (tar_stat_info): Change type of real_size_set to bool
2016-11-11 12:22:03 +02:00
Pavel Raiskup
00f928642f sparse: fix pax extraction for unicode filenames
Make sure that 'GNU.sparse.name' header has higher priority than
(for sparse-purposes artificially modified) 'path' pax header.

Historically, the 'GNU.sparse.name' header comes before 'path';
this caused that modified 'path' header won and that is not what
we want in sparse "capable" tar implementation.

* src/tar.h (tar_stat_info): New argument sparse_name_done.
* src/xheader.c (raw_path_decoder): Move here the unconditional
code from path_decoder.
(path_decoder): Apply raw_path_decoder only if sparse_path_decoder
was not yet called.
(sparse_path_decoder): New wrapper around raw_path_decoder.
* tests/sparse07.at: New testcase.
* tests/testsuite.at: Mention new testcase.
* tests/Makefile.am: Likewise.
2016-11-11 11:18:32 +02:00
Pavel Raiskup
c81a0853bb * tests/xattr06.at: Test include/exclude during archive/exctract. 2016-11-10 10:02:44 +02:00
Ian McLeod
bb6ddd8e04 Bugfix - fix xattr exclude/include for archive create
This makes archive create behavior consistent with the
documentation.  Without this change xattr include/exclude options
are accepted when creating an archive but are silently ignored.

* src/xattrs.c (xattrs_xattrs_get): Apply exclude/include mask
when fetching extended attributes
* tests/Makefile.am: Add new test case.
* tests/testsuite.at: Likewise.
2016-11-10 10:02:31 +02:00
Paul Eggert
7340f67b98 When extracting, skip ".." members
* NEWS: Document this.
* src/extract.c (extract_archive): Skip members whose names
contain "..".
2016-10-29 21:05:35 -07:00
Sergey Poznyakoff
1d2674bacc Mark all tests related to -C option with the "chdir" keyword 2016-09-26 14:00:12 +03:00
Sergey Poznyakoff
e1b7e40ff0 Fix interaction of -u with -C
* src/update.c (update_archive): Pass correct change_dir
value for addname
* tests/update03.at: New file.
* tests/Makefile.am: Add update03.at
* tests/testsuite.at: Include update03.at
2016-09-26 13:53:50 +03:00
Sergey Poznyakoff
c2886473a8 Fix passing string values via TAR_OPTIONS
* src/tar.c (parse_default_options): Don't free parsed words.
* tests/options03.at: New testcase.
* tests/Makefile.am: Add options03.at
* tests/testsuite.at: Include options03.at
2016-09-21 08:58:10 +03:00
Sergey Poznyakoff
ac065c57fd Tiny bugfix 2016-05-28 01:05:07 +03:00
Sergey Poznyakoff
9a33077a7b Report positional options that were used but had no effect during archive creation
* src/names.c (file_selection_option)
(file_selection_option_name): New functions.
(unconsumed_option_push, unconsumed_option_free)
(unconsumed_option_report): New functions.
(name_list_advance): Maintain a list
of eventually unconsumed options during archive creation.
Report unconsumed options, if any.

* tests/positional01.at: New test case.
* tests/positional02.at: New test case.
* tests/positional03.at: New test case.
* tests/Makefile.am: Add new test cases.
* tests/testsuite.at: Likewise.

* NEWS: Document the changes.
* configure.ac: Version 1.29.90
* doc/tar.texi: Document the changes.
2016-05-27 11:50:19 +03:00
Sergey Poznyakoff
20b55f0679 Version 1.29 release_1_29 2016-05-16 11:51:12 +03:00
Sergey Poznyakoff
35b292ac4b Minor fix
* src/names.c (new_name): rename to make_file_name. All uses changed.
2016-05-16 11:50:19 +03:00
Sergey Poznyakoff
61cd3fd268 Fix argument handling when running external commands.
* src/system.c (xexec): Use sh -c to run the command.  This fixed
bug introduced by 7b5e80396 (tar 1.27)
* doc/tar.texi: Fix checkpoint examples: (1) $TAR_FILENAME
is not available when creating archive and (2) --checkpoint
can't be used as abbreviation of --checkpoint-action
2016-04-14 11:51:38 +03:00
Sergey Poznyakoff
3010818f36 Remove iotty test
The auxiliary utility ttyemu proved to be unreliable.  Given existing
differences between pty implementations and termios ioctls on various
platforms, writing it in a portable way requires effort disproportional
to its actual purpose.

* configure.ac: Remove check for grantpt
* gnulib.modules: Remove posix_openpt, ptsname, and unlockpt
* tests/Makefile.am (TESTSUITE_AT): Remove iotty.at
(check_PROGRAMS): Remove ttyemu.
* tests/testsuite.at: Remove iotty.at
* tests/iotty.at: Remove.
* tests/ttyemu.c: Remove.
2016-04-06 08:34:55 +03:00
Pavel Raiskup
733e2741b1 xattrs: fix build on Darwin
Be careful to define HAVE_XATTRS when not all needed xattr-related
functions are properly defined either in libc or libattr.

Reported independently by Denis Excoffier and Dominyk Tille.

* acinclude.m4 (TAR_HEADERS_ATTR_XATTR_H): Check for each xattr
function separately.  Don't AC_CHECK_LIB (LIBS is filled by
AC_SEARCH_LIBS when necessary).
* src/Makefile.am: The LDADD -lattr was redundant.
2016-04-05 17:55:19 +03:00
Sergey Poznyakoff
195a25316c Remove --preserve option
* src/tar.c: Remove --preserve option
* NEWS: Update.
* doc/tar.texi: Update.
2016-03-24 08:39:52 +02:00
Sergey Poznyakoff
74e3b497c4 Fix testcase
* tests/time02.at: Sort tar -d output
2016-03-24 08:38:38 +02:00
Sergey Poznyakoff
29f652871e Update THANKS file 2016-03-24 07:30:16 +02:00
Jeremy Bobbio
13d04fe6ae New option --clamp-mtime
The new `--clamp-mtime` option will change the behavior of `--mtime` to only
use the time specified if the file mtime is newer than the given time.
The `--clamp-mtime` option can only be used together with `--mtime`.

Typical use case is to make builds reproducible: to loose less
information, it's better to keep the original date of an archive, except for
files modified during the build process. In that case, using a reference
(and thus reproducible) timestamps for the latter is good enough. See
<https://wiki.debian.org/ReproducibleBuilds> for more information.

Patch submitted by Jeremy Bobbio and
Daniel Kahn Gillmor <dkg@fifthhorseman.net>

* doc/tar.1: Document --clamp-mtime
* doc/tar.texi: Likewise.

* src/common.h (set_mtime_option_mode): New enum
(set_mtime_option): Change type to enum set_mtime_option_mode.
(NEWER_OPTION_INITIALIZED): Rename to NEWER_OPTION_INITIALIZED.
* src/create.c (start_header): Set mtime depending on set_mtime_option.
* src/tar.c (options,parse_opt): New option --clamp-mtime
(decode_options): Initialize mtime_option

* tests/time02.at: New testcase.
* tests/Makefile.am: Add new testcase
* tests/testsuite.at: Likewise.
2016-03-24 07:26:27 +02:00
Sergey Poznyakoff
8d31493c99 Acknowledgments
* THANKS: Add Dagobert Michelsen
2016-03-21 20:46:19 +02:00
Sergey Poznyakoff
752b447f3e Fix the testsuite
* tests/sparse06.at: Don't use timeout: depending on the filesystem
mounted, current LA and lots of other factors, creation of archive can
take much more time than the expected 2 seconds.
2016-03-21 20:33:26 +02:00
Sergey Poznyakoff
a3aa7003ea Fix ckmtime
* gnulib.modules: Use timespec-sub
* tests/ckmtime.c: Use second resolution.
2016-03-21 13:35:32 +02:00
Sergey Poznyakoff
143dc63ffa Fix the testsuite
* tests/sparse05.at: Use autom4te magic to generate mapfile,
instead of the shell command seq, which is not always available.
* tests/listed03.at: Skip the test if xgetcwd fails.
* tests/ckmtime.c: New file.
* tests/Makefile.am: Build ckmtime
* tests/testsuite.at (AT_CHECK_TIMESTAMP): Check whether newly created
files have timestamps consistent with the creation time.  Skip the test
if not.
* tests/incr01.at: Use AT_CHECK_TIMESTAMP
* tests/incr02.at: Likewise.
* tests/incr03.at: Likewise.
* tests/incr04.at: Likewise.
* tests/incr05.at: Likewise.
* tests/incr06.at: Likewise.
* tests/incr07.at: Likewise.
* tests/incr08.at: Likewise.
* tests/incr09.at: Likewise.
* tests/incr10.at: Likewise.
* tests/incr11.at: Likewise.
* tests/incremental.at: Likewise.
* tests/listed01.at: Likewise.
* tests/listed02.at: Likewise.
* tests/listed04.at: Likewise.
* tests/listed05.at: Likewise.
2016-03-20 23:11:27 +02:00
Sergey Poznyakoff
c0fb0740fa Testsuite fixes.
* paxutils: Update.
* src/unlink.c (flush_deferred_unlinks): OpenSolaris sets EEXIST
instead of ENOTEMPTY if trying to remove a non-empty directory.
* tests/numeric.at: Avoid using awk -v: some older awks don't support
that option.  Also fix environment variable usage.
* tests/onetop05.at: Skip test if unable to set initial directory
mode bits.
* tests/sparse06.at: Use --quiet option.
2016-03-18 22:18:58 +02:00
Sergey Poznyakoff
6ac0dd1d73 Revise docs 2016-03-18 14:27:27 +02:00
Sergey Poznyakoff
160fb9abd2 Fix build with --enable-gcc-warnings
* configure.ac: Disable stack-protector warnings
2016-03-18 13:08:39 +02:00
Sergey Poznyakoff
f6ad0e4af2 Improve testsuite
* tests/iotty.at: Skip test if ttyemu can't do its job
2016-03-17 14:22:35 +02:00
Sergey Poznyakoff
e4b246c14a Document xattrs, ACL and SELinux-related options.
* doc/tar.1: Document all options.
* doc/tar.texi: Likewise.
2016-03-16 20:08:00 +02:00
Sergey Poznyakoff
2a7c84b4a9 Fix appending to archive with changed blocking factor.
* src/buffer.c (flush_archive): If previous reading attempt resulted
in short read, correctly use the remaining record space.
(backspace_output): Fix position calculation (still has to be
improved).

* tests/append05.at: New test case.
* tests/Makefile.am: Add new test.
* tests/testsuite.at: Likewise.
2016-03-15 00:02:40 +02:00
Sergey Poznyakoff
da7845c656 Fix coredump on parsing invalid traditional option
* src/tar.c (find_argp_option): Fix loop termination condition.
2016-03-14 13:13:04 +02:00
Sergey Poznyakoff
8980ecd62d Update copyright years 2016-01-20 11:29:17 +02:00
Sergey Poznyakoff
63f2e969dd Allow escaped delimiters in transform expressions.
Patch provided by Charles McGarvey and Flavio Poletti.

* src/transform.c (parse_transform_expr): Allow escaped delimiters
in transform expressions.
* tests/xform02.at: New test case.
* tests/Makefile.am: Add xform02.at
* tests/testsuite.at: Include xform02.at
* THANKS: Update.
2016-01-20 11:16:02 +02:00
Sergey Poznyakoff
445293654d Fix eventual dereference of uninitialized pointer.
* src/exclist.c (hg_initfn): Initialize hgopt.
2015-12-17 16:04:40 +02:00
Pavel Raiskup
b5f581e637 sparse: fix use of indeterminate value
* src/xheader.c (sparse_map_decoder): Move 'e' up from loop-block.
2015-12-17 16:01:18 +02:00
Sergey Poznyakoff
0f26331b17 fix a typo
* doc/tar.texi (Incremental Dumps): Add missing --file to the
'--list' example.
2015-12-11 15:21:04 +02:00
Sergey Poznyakoff
196fef9b40 Minor fixes.
* doc/tar.texi: Document position-sensitive options in a
separate subsection.
* src/names.c (names_argp,names_argp_children): Explicitly initialize
all members.
2015-12-11 14:19:44 +02:00
Sergey Poznyakoff
68dd249987 Minor fix 2015-12-11 01:10:43 +02:00
Sergey Poznyakoff
4cf2af4500 Fix handling of filename-selection options.
Filename-selection options are --wildcards, --recursive, etc. (see
names.c for a complete list).  These options are position-sensitive,
i.e. each such option affects all filenames and filename-selection
options that appear after it until eventually cancelled by a
corresponding counterpart option.

These options can appear in "file-from" file lists, which means that
they cannot be handled right away, but instead should be put on
the "name_elt" list and processed sequentionally, as file name arguments
are.

* src/common.h (warn_regex_usage): Remove.
(name_add_name): Change signature.
(name_add_dir, name_add_file): Remove prototypes.
* src/names.c (name_add_option, name_add_dir)
(name_add_file): Static functions.
(names_options, is_file_selection_option, names_parse_opt): Static functions.
(names_argp_children): New variable.
(NELT_NAME, NELT_CHDIR)
(NELT_FILE, NELT_NOOP): Redefine as enum nelt_type.
(NELT_FMASK): Remove.
(NELT_OPTION): New constant.
(name_elt) <type>: Change type.
<v.opt>: New member.
(name_elt_alloc_matflags): Remove.
(name_add_name): Take one argument.
(name_add_option): New static function.
(name_add_file): Take one argument.
(read_next_name): Use filename_terminator and
verbatim_files_from_option to initialize file.term and file.verbatim.
* src/tar.c: Move handling of filename-selection options to names.c

* tests/T-dir00.at: Fix typo.
* tests/T-recurse.at: Remove expected failure.
2015-12-11 00:50:23 +02:00
Pavel Raiskup
cadc43ace5 better test --{,no-}recursion options
* tests/recurs02.at: Also test --list mode.
* tests/T-recurse.at: New test case.  Test that -T option works
correctly together with --{,no-}recursion.
* tests/Makefile.am: Mention new test T-recurse.at.
* tests/testsuite.at: Likewise.
2015-12-10 14:55:34 +02:00
Pavel Raiskup
239441b5df Bugfix
* src/buffer.c (try_new_volume): Warn if user supplied malformed
tar archive.
Consistently use WARN (instead of ERROR) when reporting.
2015-12-06 22:14:23 +02:00
Sergey Poznyakoff
0a93c16c62 Fix segfault when extracting from a multi-volume archive.
Fix suggested by Pavel Raiskup.

* src/buffer.c (try_new_volume): Fix dereferencing NULL pointer.
* tests/multiv09.at: New testcase.
* tests/Makefile.am: Add new testcase.
* tests/testsuite.at: Likewise.
2015-12-06 22:02:16 +02:00
Sergey Poznyakoff
5dd490e7f1 Fix NEWS 2015-12-06 21:20:48 +02:00
Pavel Raiskup
68e9ab4966 numeric-owner: print big UID/GID correctly
* src/list.c (simple_print_header): Do not parse ustar header
for UID/GID again (tar_stat_info has already been correctly
filled with respect to possible uid/gid extended headers).
* tests/numeric.at: New testcase for --numeric-owner option.
* tests/Makefile.am: Add new testcase.
* tests/testsuite.at: Likewise.
2015-12-06 21:18:51 +02:00
Sergey Poznyakoff
b684326e69 Use SEEK_HOLE for hole detection
Based on patch by Pavel Raiskup.

Use SEEK_HOLE/SEEK_DATA feature of lseek on systems that support
it.  This can make archiving of sparse files much faster.

Implement the --hole-detection option to allow users to select
hole-detection method.

* src/common.h (hole_detection_method): New enum.
(hole_detection): New global.
* src/sparse.c  (sparse_scan_file_wholesparse): New function as a
method for detecting sparse files without any data.
(sparse_scan_file_raw): Rename from sparse_scan_file; with edits.
(sparse_scan_file_seek): New function.
(sparse_scan_file): Reimplement function.
* src/tar.c: New option --hole-detection

* tests/checkseekhole.c: New file.
* tests/.gitignore: Mention two test binaries.
* tests/Makefile.am: Add new tests.
* tests/testsuite.at (AT_SEEKHOLE_PREREQ): New macro.
Include sparse06.at.
* tests/sparse06.at: New test case.
* tests/sparse02.at: Force raw hole-detection method.
* tests/sparsemv.at: Likewise.
* tests/sparsemvp.at: Likewise.

* doc/tar.1: Document --hole-detection option.
* doc/tar.texi: Document hole-detection algorithms and
command-line options.
* NEWS: Document hole-detection.
2015-12-06 00:14:55 +02:00
Sergey Poznyakoff
589ba77faf Catch compressor execution errors.
* src/misc.c (write_fatal_details): Move to buffer.c
* src/buffer.c (write_fatal_details): Close the archive and wait for
the compressor program to terminate in order to catch eventual execution
errors.
* src/system.c (sys_child_open_for_compress): Ignore SIGPIPE so tar will
not silently terminate when unable to write to the compressor.
* tests/comperr.at: New file.
* tests/Makefile.am: Add comperr.at
* tests/testsuite.at: Include comperr.at
2015-12-05 16:54:26 +02:00
Sergey Poznyakoff
6ea9e62bb3 Upgrade paxutils 2015-12-05 08:48:03 +02:00
Sergey Poznyakoff
d02c81df15 Fix extraction from concatenated incremental archives with renamed directories.
Complements 15c02c2b.

* src/extract.c (delayed_set_stat): Change type of file_name.
(delay_set_stat): Allocate file_name member.
(free_delayed_set_stat): Free file_name.
(fixup_delayed_set_stat): New function.
(rename_directory): Call fixup_delayed_set_stat on success.

* tests/incr11.at: New testcase.
* tests/incr10.at: Improve description.
* tests/Makefile.am: Add incr11.at
* tests/testsuite.at: Add incr11.at
2015-11-29 21:11:08 +02:00
Sergey Poznyakoff
e426787454 Fix bug in the inplementation of --one-top-level.
When extracting an archive that contains './' with the --one-top-level option,
the mode and ownership of '.' would be incorrectly applied to the current
working directory, instead of the requested top-level directory.

* src/list.c (enforce_one_top_level): Map '.' to the top-level
directory.
* tests/Makefile.am: Add onetop05.at
* tests/testsuite.at: Include onetop05.at.
* tests/onetop05.at: New file.
* tests/onetop01.at: Fix keywords.
* tests/onetop02.at: Likewise.
* tests/onetop03.at: Likewise.
* tests/onetop04.at: Likewise.
2015-11-21 21:56:49 +02:00
Sergey Poznyakoff
e6fcc73efa Work around unlinkat bug on FreeBSD and GNU/Hurd
* src/unlink.c (dunlink_insert): New function.
(flush_deferred_unlinks): Skip cwds and nonempty directories
at the first pass.  If force is requested, run a second pass
removing them.
(queue_deferred_unlink): Make sure current working directory
entries are sorted in descending order by the value of dir_idx.
This makes sure they will be removed in right order, which works
around unlinkat bug on FreeBSD and GNU/Hurd.
* tests/remfiles08b.at: Remove expected failure.
* tests/remfiles09b.at: Likewise.
2015-11-11 13:01:45 +02:00
Sergey Poznyakoff
6167c23e22 Fix coredump on FreeBSD when TAR_OPTIONS is set
* src/tar.c (parse_default_options): Use program_name instead of
program_invocation_short_name.  On some systems the latter is NULL when
the function is called, which causes coredumps.
(tar_set_quoting_style): Likewise.
* src/names.c: Likewise.
2015-11-10 18:25:47 +02:00