+2011-03-12 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Version 1.26
+ * NEWS, configure.ac: Update.
+ * po/POTFILES.in: Remove paxexit.c (see bb971a1e).
+
+2011-03-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ --atime-preserve=replace: fix correctness and performance bugs
+ reported by Eric Blake in
+ <http://lists.gnu.org/archive/html/bug-tar/2011-03/msg00000.html>.
+ * src/compare.c (diff_file): Do not restore atime of size-zero
+ files.
+ * src/create.c (dump_file0): Likewise. Also, do not restore atime
+ when fd is zero, because that indicates a file we haven't opened.
+
+2011-02-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/tar.texi: Adjust example commands and output for accuracy.
+ The original problem was reported by Michael Witten in
+ <http://lists.gnu.org/archive/html/bug-tar/2011-02/msg00033.html>.
+
+2011-02-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: if (p) free (p); -> free (p);
+ There is no longer (since SunOS 4) any need to guard against
+ free (NULL), so replace each "if (p) free (p);" with "free (p);".
+ From Jim Meyering in
+ <http://lists.gnu.org/archive/html/bug-tar/2011-01/msg00026.html>.
+ * src/incremen.c (scan_directory, read_directory_file): As above.
+ (try_purge_directory): Likewise.
+ * src/list.c (read_header): Likewise.
+ * src/misc.c (assign_string): Likewise.
+
+2010-12-14 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Correctly store long sparse file names in PAX archives.
+ * src/sparse.c (pax_dump_header_1): Make sure the created header
+ name is
+ shorter than NAME_FIELD_SIZE bytes.
+ * tests/sparse04.at: New testcase.
+ * tests/Makefile.am (TESTSUITE_AT): Add sparse04.at.
+ * tests/testsuite.at: Include sparse04.at.
+ * NEWS: Update.
+
+2010-12-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ tests: make the truncate test smaller and less buggy (tiny change)
+ Reported by Solar Designer in
+ <http://lists.gnu.org/archive/html/bug-tar/2010-12/msg00003.html>.
+ * tests/truncate.at: Use a smaller test case, and make its
+ race condition less likely.
+
+2010-11-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ tests: skip SIGPIPE-dependent tests in environments ignoring
+ SIGPIPE
+ Problem reported by Sven Joachim in
+ <http://lists.gnu.org/archive/html/bug-tar/2010-11/msg00043.html>.
+ * tests/remfiles01.at: Use AT_SIGPIPE_PREREQ.
+ * tests/sigpipe.at: Likewise.
+ * tests/testsuite.at (AT_SIGPIPE_PREREQ): New macro.
+
+2010-11-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: work around NetBSD and Tru64 symlink incompatibility
+ with POSIX
+ Problem reported by Bruno Haible in
+ <http://lists.gnu.org/archive/html/bug-gnulib/2010-11/msg00306.html>.
+ * src/extract.c (maybe_recoverable): Also treat EFTYPE (if
+ defined)
+ and ENOTSUP like ELOOP.
+
+2010-11-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: adjust to paxutils change: paxexit.c -> paxexit-status.c
+ * lib/Makefile.am (libtar_a_SOURCES): paxexit.c renamed to
+ paxexit-status.c.
+
+ tar: remove unused function dir_removed_diag
+ * src/common.h (dir_removed_diag): Remove unused decl.
+ * src/misc.c (dir_removed_diag): Remove unused function.
+
+2010-11-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: work around FreeBSD symlink incompatibility with POSIX
+ * src/extract.c (maybe_recoverable): Treat EMLINK like ELOOP, for
+ FreeBSD. Problem reported by Christian Weisgerber in
+ <http://lists.gnu.org/archive/html/bug-tar/2010-11/msg00080.html>.
+
+ * src/names.c: tar: fix bug with --one-file-system
+ --listed-incremental
+ Problem (and idea for fix) reported by Martin Weigel
+ <http://lists.gnu.org/archive/html/bug-tar/2010-11/msg00071.html>.
+ * src/common.h (is_individual_file): Remove decl.
+ * src/create.c (dump_file0): Replace "is_individual_file (p)"
+ with "top_level".
+ * src/incremen.c (procdir): Replace "!is_individual_file
+ (name_buffer)" with "st->parent". Fix bug with --one-file-system
+ and --listed-incremental.
+ * src/names.c (individual_file_table, register_individual_file):
+ (is_individual_file): Remove. All uses removed.
+
+ tests: new test listed04 for --one-file-system
+ --listed-incremental
+ * tests/Makefile.am (TESTSUITE_AT): Add listed04.at.
+ * tests/listed04.at: New file.
+ * tests/testsuite.at: Include it.
+
+ scripts: fix option parsing
+ Problem reported by Dennis Wydra in
+ <http://lists.gnu.org/archive/html/bug-tar/2010-11/msg00082.html>.
+ * scripts/backup.in: Accept "-l LEVEL". Be more systematic about
+ backslashes inside ``; it shouldn't matter for modern shells but
+ it might matter for older ones.
+ * scripts/restore.in: Likewise.
+ * scripts/backup.in: Adjust implementation of -t/--time to match
+ the new implementation of -l/--level.
+
+2010-11-15 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Issue a warning if the archive being compared contais transformed
+ file names.
+ * src/common.h (transform_program_p): New proto.
+ * src/transform.c (transform_program_p): New function.
+ * src/compare.c (verify_volume): Warn if the archive contains
+ transformed file names.
+
+ Minor change.
+ * doc/tar.texi: Reword the description of decompress-program.
+
+2010-11-15 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: fix --verify option, which broke in 1.24
+ * NEWS: Document this.
+ * src/compare.c (verify_volume): Decode the header before invoking
+ diff_archive, as diff_archive no longer does this as of the
+ 2010-06-28 commit. Also, don't try to invoke diff_archive on a
+ zero block.
+ * tests/Makefile.am (TESTSUITE_AT): Add verify.at.
+ * tests/testsuite.at: Include verify.at.
+ * tests/verify.at: New file.
+
+2010-11-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/tar
+
+2010-11-08 Jim Meyering <meyering@redhat.com>
+
+ tests: avoid spurious failure when VERSION_CONTROL envvar is set
+ * tests/backup01.at: Unset VERSION_CONTROL. Otherwise,
+ when set to e.g., 'always', it would cause this test to fail.
+
+2010-11-07 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Version 1.25
+ * configure.ac: Version 1.25
+ * NEWS: Describe the changes.
+
+2010-11-05 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Run alternative decompression programs if the principal one is
+ not available.
+ Some compression programs are able to handle various compression
+ formats
+ (e.g. `gzip' can decompress files created by `compress', `xz'
+ is able
+ to handle lzma, etc.) Tar tries to use such programs for
+ decompression
+ if the principal decompressor cannot be started.
+
+ * src/buffer.c (compress_type): Swap ct_none and ct_tar.
+ (archive_compression_type): New static variable.
+ (zip_magic): Remove program and option fields.
+ (zip_program): New structure and static.
+ (compress_program): Remove macro.
+ (find_zip_program): New static function.
+ (first_decompress_program,next_decompress_program): New functions.
+ (open_compressed_archive): Set archive_compression_type instead of
+ use_compress_program_option.
+ * src/common.h (first_decompress_program)
+ (next_decompress_program): New functions.
+ (WARN_DECOMPRESS_PROGRAM): New flag.
+ (WARN_VERBOSE_WARNINGS): Include WARN_DECOMPRESS_PROGRAM.
+ * src/warning.c (warning_args): Add "decompress-program".
+ (warning_types): Add WARN_DECOMPRESS_PROGRAM.
+ * src/system.c (run_decompress_program): New function.
+ (sys_child_open_for_uncompress): Use run_decompress_program
+ instead of calling execlp directly.
+
+2010-11-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ tests: fix some issues with signals, timestamps, "test" typo
+ * tests/extrac17.at: Add --warning=no-timestamp, to avoid
+ bogus warning due to NFS clock skew.
+ * tests/remfiles01.at: Discard diagnostics that some shells
+ generate about broken pipes.
+ * tests/sigpipe.at: Likewise.
+ * tests/remfiles01.at: Fix typo: "test $EC" was written where
+ "test $EC -ne 0" was intended.
+
+2010-11-01 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix extraction of device nodes.
+ * src/extract.c (extract_node): Do not mask out node type.
+ The bug was introduced in commit ea964cce.
+
+2010-10-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: don't cross struct member boundaries with OLDGNU_MAGIC
+ * src/create.c (write_gnu_long_link, start_header): Access
+ header->buffer + offsetof (struct posix_header, magic), instead of
+ header->header.magic, when reading or writing the OLDGNU_MAGIC
+ pattern. The code violates the C standard without this change,
+ and GCC warns about this if fortify checking is enabled. It's not
+ a bug on traditional (i.e., non-debugging) platforms, but it does
+ violate the C standard so it should be fixed. Problem originally
+ reported by John Emil Karlson in
+ <http://lists.gnu.org/archive/html/bug-tar/2010-04/msg00023.html>.
+ * src/list.c (decode_header): Likewise.
+
+ tests: port to sh variants that squirrel away file descriptors
+ OpenBSD /bin/sh, and some other sh variants, squirrel away file
+ descriptors before closing them. For example, for "cat 3<&-" they
+ first dup file descriptor 3 to a fd that is 10 or greater, then
+ close 3 (because if "cat" had been a builtin command like ":" then
+ they would have wanted to avoid the fork and restore the fd after
+ ":" finished); and they treat ordinary (forking) commands the same
+ as builtin commands. This approach fails after "ulimit -n 10".
+ Work around this deficiency by closing the file descriptors before
+ invoking ulimit. Problem reported by Christian Weisgerber in
+ <http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00041.html>;
+ solution suggested by Jilles Tjoelker in
+ <http://article.gmane.org/gmane.comp.shells.dash/415>.
+
+ * tests/extrac11.at (scarce file descriptors): Close file
+ descriptors before invoking ulimit -n.
+
+2010-10-27 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Transform file names when updating and appendig to archives.
+ This complements 28e91b48.
+
+ * src/common.h (transform_stat_info): New prototype.
+ * src/list.c (transform_stat_info): Remove static qualifier.
+ * src/update.c (update_archive): Call transform_stat_info.
+ * tests/Makefile.am (TESTSUITE_AT): Add append03.at
+ * tests/testsuite.at: Include append03.at
+
+2010-10-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ tests: port to Solaris diff
+ * tests/extrac13.at: Don't assume that "diff -c" outputs nothing
+ when there are no differences. This is not true on Solaris,
+ where it outputs "No differences encounted".
+
+ tar: fix -x --overwrite bug (no --dereference, ! O_NOFOLLOW)
+ This bug was discovered on Solaris 8. On older hosts lacking
+ O_NOFOLLOW, tar -x --overwrite (without --dereference) follows
+ symbolic links, causing the "extract over symlinks" test to fail.
+
+ * src/extract.c (open_output_file): If O_NOFOLLOW is needed but
+ does not work, check for a symlink separately.
+
+ tar: don't use "((" in shell scripts
+ * tests/extrac11.at: Replace "((" with "( (" in shell scripts, as
+ "((" is not portable to the Korn shell, and POSIX 1003.1-2008 says
+ that "((" is not portable.
+
+2010-10-26 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Make sure name matching occurs before name transformation.
+ The commit 9c194c99 altered that order.
+
+ * src/list.c (transform_stat_info): New function. Split off from
+ decode_header.
+ (read_and): Call transform_stat_info right before do_something,
+ and after deciding if we should proceed with this member name,
+ so that name matching occurs before name transformation.
+
+ * tests/extrac17.at: New file.
+ * tests/Makefile.am (TESTSUITE_AT): Add extrac17.at
+ * tests/testsuite.at: Include extrac17.at.
+
+2010-10-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: don't assume stdin is open when testing fd limits
+ * tests/extrac11.at: Redirect stdin from /dev/null, in case
+ the parent 'make' is running with stdin closed.
+
+2010-10-26 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Further fixes in bootstrap.
+ * bootstrap: Restore the default for gnulib_path
+ (symlink_to_dir): Re-apply 67cad07.
+
+2010-10-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: fix bug with -C and extracting directories
+ Problem reported by Denis Excoffier in
+ <http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00034.html>.
+
+ * src/extract.c (extract_dir): Use mkdirat, not mkdir.
+ * tests/extrac16.at: New file, to test for this bug.
+ * tests/Makefile.am (TESTSUITE_AT): Add it.
+ * tests/testsuite.at: Include it.
+
+ This file is a placeholder. It will be replaced with the actual
+ ChangeLog
+ by make dist. Run make ChangeLog if you wish to create it
+ earlier.
+
+2010-10-25 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Version 1.24
+ * configure.ac, NEWS: Version 1.24
+ * bootstrap: Restore tar-specific code lost during last
+ sync from gnulib (241b72ffad).
+ * src/misc.c (chdir_do): Remove unused automatic variable.
+
+2010-10-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: use more-accurate diagnostic when intermediate mkdir fails
+ Without this change, if tar tried to extract a file A/B/C, noticed
+ that A/B didn't exist, attempted to mkdir A/B, and the mkdir
+ failed, it did not diagnose the mkdir failure, but simply reported
+ the failure to open A/B/C. This sometimes led to confusion
+ because it wasn't clear what tar was trying to do, in particular
+ that tar tried to mkdir A/B. With this patch, tar issues two
+ diagnostics in this case: one for A/B and the other for A/B/C.
+ Problem reported by Hauke Laging in
+ <http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00020.html>.
+ * gnulib.modules: Remove faccessat.
+ * src/extract.c (make_directories): New arg INTERDIR_MADE.
+ Diagnose mkdir failure. Return 0 on success, nonzero on failure,
+ as opposed to nonzero iff some directory was created. All callers
+ changed. Simplify the code when mkdir fails, by checking whether
+ the desired file exists unless errno==EEXIST: this is more robust.
+ * tests/extrac15.at: New test, to check this.
+ * tests/Makefile.am (TESTSUITE_AT): Add it.
+ * tests/testsuite.at: Include it.
+
+ tests: port to NFS file servers with clock skew
+ Several of the tests assumed that a newly created file cannot
+ have a time stamp dated in the future. This assumption is not
+ true when files are served by a remote host whose clock is
+ slightly in advance of ours. Fix the problems that I observed
+ when running "make check" a couple of times on such a server.
+
+ * tests/backup01.at: Use --warning=no-timestamp to suppress
+ clock-skew warnings.
+ * tests/chtype.at, tests/comprec.at, tests/exclude06.at:
+ * tests/extrac01.at, tests/extrac03.at, tests/extrac05.at:
+ * tests/extrac06.at, tests/extrac08.at, tests/extrac13.at:
+ * tests/extrac14.at, tests/incr01.at, tests/incr03.at,
+ tests/link01.at:
+ * tests/multiv01.at, tests/multiv02.at, tests/multiv03.at:
+ * tests/pipe.at, tests/rename02.at, tests/rename03.at:
+ * tests/rename05.at, tests/same-order01.at, tests/same-order02.at:
+ * tests/sparse01.at:
+ Likewise.
+
+2010-10-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ gnulib: sync from latest gnulib, notably bootstrap and
+ parse-datetime
+ * bootstrap: Sync from gnulib.
+ * doc/.gitignore: Rename getdate.texi to parse-datetime.texi.
+ * doc/Makefile.am (tar_TEXINFOS): Likewise.
+ * doc/tar.texi (Top): Adjust to renaming of getdate to
+ parse-datetime.
+ * gnulib.modules: Likewise. Also, remove ftruncate (now
+ obsolete).
+ And add inttostr (we missed this dependency).
+ * src/tar.c: Include parse-datetime.h, not getdate.h. All calls
+ to get_date replaced with parse_datetime.
+
+2010-09-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ 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.
+
+ tar: --dereference consistency
+ This closes another race condition, that occurs when overwriting a
+ symlink with a regular file.
+ * NEWS (--dereference consistency): New section.
+ * doc/tar.texi (Option Summary): Describe new --deference
+ behavior.
+ (dereference): Likewise. Remove discussion that I didn't follow,
+ even before --dereference was changed.
+ * src/common.h (deref_stat, set_file_atime): Adjust signatures.
+ * src/compare.c (diff_file, diff_multivol): Respect
+ open_read_flags
+ instead of rolling our own flags. This implements the new
+ behavior
+ for --dereference.
+ (diff_file, diff_dumpdir): Likewise, for fstatat_flags.
+ * src/create.c: Adjust to set_file_atime signature change.
+ * src/extract.c (mark_after_links, file_newer_p, extract_dir):
+ Likewise.
+ * src/incremen.c (try_purge_directory): Likewise.
+ * src/misc.c (maybe_backup_file): Likewise.
+ * src/extract.c (file_newer_p): New arg STP. All callers changed.
+ (maybe_recoverable): New arg REGULAR. All callers changed.
+ Handle the case of overwriting a symlink with a regular file,
+ when --overwrite is specified but --dereference is not.
+ (open_output_file): Add O_CLOEXEC, O_NOCTTY, O_NONBLOCK for
+ consistency with file creation. Add O_NOFOLLOW if
+ overwriting_old_files && ! dereference_option.
+ * src/incremen.c (update_parent_directory): Use fstat, not
+ fstatat;
+ there's less to go wrong.
+ * src/misc.c (deref_stat): Remove DEREF arg. All callers changed.
+ Instead, use fstatat_flags.
+ (set_file_atime): Remove ATFLAG arg. All callers changed.
+ Instead, use fstatat_flags.
+ * src/names.c, src/update.c: Adjust to deref_stat signature
+ change.
+ * src/tar.c (get_date_or_file): Use stat, not deref_stat, as this
+ is not a file to be archived.
+ * tests/Makefile.am (TESTSUITE_AT): Add extrac13.at.
+ * tests/extrac13.at: New file.
+ * tests/testsuite.at: Include it.
+
+2010-09-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: do not crash with --listed-incremental
+ Problem reported by Frantisek Hanzlik in
+ <https://bugzilla.redhat.com/635318> via Kamil Dudka in
+ <http://lists.gnu.org/archive/html/bug-tar/2010-09/msg00066.html>.
+ I don't understand this code either, but Sergey can take a look at
+ this patch, and perhaps install a better one, when he has
+ the time.
+ * src/incremen.c (append_incremental_renames): Don't actually
+ append
+ anything to DIR if DIR is null.
+
+2010-09-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: prefer openat-style functions
+ This change replaces traditional functions like 'open' with the
+ POSIX.1-2008 functions like 'openat'. Mostly this is an internal
+ refactoring change, in preparation for further changes to close
+ some races.
+ * gnulib.modules: Add faccessat, linkat, mkfifoat, renameat,
+ symlinkat.
+ Remove save-cwd.
+ * src/Makefile.am (tar_LDADD): Add $(LIB_EACCESS).
+ * tests/Makefile.am (LDADD): Likewise.
+ * src/common.h (chdir_fd): New extern var.
+ * src/compare.c (diff_file, diff_multivol): Use openat instead
+ of open.
+ * src/create.c (create_archive, restore_parent_fd): Likewise.
+ * src/extract.c (create_placeholder_file): Likewise.
+ * src/names.c (collect_and_sort_names): Likewise.
+ * src/update.c (append_file): Likewise.
+ * src/compare.c (diff_symlink): Use readlinkat instead of
+ readlink.
+ * src/compare.c (diff_file): Use chdir_fd instead of AT_FDCWD.
+ * src/create.c (subfile_open, dump_file0): Likewise.
+ * src/extract.c (fd_chmod, fd_chown, fd_stat, set_stat):
+ (repair_delayed_set_stat, apply_nonancestor_delayed_set_stat):
+ Likewise.
+ * src/extract.c (mark_after_links, file_newer_p, extract_dir):
+ (extract_link, apply_delayed_links):
+ Use fstatat rather than stat or lstat.
+ * src/misc.c (maybe_backup_file, deref_stat): Likewise.
+ * src/extract.c (make_directories): Use mkdirat rather than mkdir.
+ Use faccessat rather than access. This fixes a minor permissions
+ bug when tar is running setuid (who would want to do that?!).
+ (open_output_file): Use openat rather than open.
+ In the process, this removes support for Masscomp's O_CTG files,
+ which aren't compatible with openat's signature. Masscomp! Wow!
+ That's a blast from the past. As far as I know, that operating
+ system hasn't been supported for more than 20 years.
+ (extract_link, apply_delayed_links):
+ Use linkat rather than link.
+ (extract_symlink, apply_delayed_links):
+ Use symlinkat rather than symlink.
+ (extract_node): Use mknodat rather than mknod.
+ (extract_fifo): Use mkfifoat rather than mkfifo.
+ (apply_delayed_links): Use unlinkat rather than unlink or rmdir.
+ * src/misc.c (safer_rmdir, remove_any_file): Likewise.
+ * src/unlink.c (flush_deferred_unlinks): Likewise.
+ * src/extract.c (rename_directory): Use renameat rather than
+ rename.
+ * src/misc.c (maybe_backup_file, undo_last_backup): Likewise.
+ * src/misc.c: Don't include <save-cwd.h>; no longer needed now
+ that we're using openat etc.
+ (struct wd): Add member fd. Remove members err and fd. All uses
+ changed.
+ (CHDIR_CACHE_SIZE): New constant.
+ (wdcache, wdcache_count, chdir_fd): New vars.
+ (chdir_do): Use openat rather than save_cwd. Keep the cache up
+ to date. This code won't scale well, but is good enough for now.
+ * src/update.c (update_archive): Use openat + fdopendir +
+ streamsavedir rather than savedir.
+
+ This file is a placeholder. It will be replaced with the actual
+ ChangeLog
+ by make dist. Run make ChangeLog if you wish to create it
+ earlier.
+
+2010-09-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: add utimens.h includes
+ * src/extract.c: Include <utimens.h>, needed for fdutimens
+ prototype.
+ * src/misc.c: Likewise.
+
+ tar: switch to gnulib fdutimensat module
+ * gnulib.modules: Add fdutimensat.
+ * src/common.h (fd_utimensat): Remove decl.
+ * src/extract.c (set_stat): Call fdutimensat, not fd_utimensat.
+ * src/misc.c (set_file_atime): Likewise.
+ (fd_utimensat): Remove.
+
+2010-09-17 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: extract permissions for . last
+ * src/common.h (must_be_dot_or_slash): New decl.
+ * src/extract.c (mark_after_links): New function, taking code
+ that used to be in create_placeholder_file.
+ (create_placeholder_file): Use it.
+ (delay_set_stat): Always delay setting status for . and /.
+ * src/misc.c (must_be_dot_or_slash): Now extern.
+ * tests/extrac12.at: New file.
+ * tests/Makefile.am (TESTSUITE_AT): Add it.
+ * tests/testsuite.at: Likewise.
+
+ tar: don't check for getdtablesize; use AC_CHECK_FUNCS_ONCE
+ * configure.ac: Don't check for getdtablesize; no longer needed.
+ Use AC_CHECK_FUNCS_ONCE rather than AC_CHECK_FUNCS, for
+ efficiency.
+
+ tar: extract symlink attributes, close some symlink-related races
+ * NEWS: Describe symlink-extraction improvements.
+ * src/extract.c (enum permstatus): Remove.
+ (fchmod, fchown): Define dummy replacement macros if the system
+ does not supply them.
+ (implemented): New function.
+ (struct delayed_set_stat): Remove members invert_permissions,
+ permstatus. They were too confusing, and tried to do too much
+ in too-little space. Instead, add members current_mode,
+ current_mode_mask, interdir, atflag. All users changed.
+ (struct delayed_link): Add members mode, atime, mtime, to support
+ platforms such as BSD where symlinks have these attributes.
+ All users changed.
+ (fd_chmod): Renamed from fdchmod. New argument atflag. Check for
+ operation not supported at run-time, not at configure-time. Put
+ fd argument first. All callers changed.
+ (fd_chown): Likewise, renaming from fdchown.
+ (fd_stat): Likewise, renaming from fdstat.
+ (set_mode): Remove args stat_info, cur_info, invert_permissions,
+ permstatus. Add args mode, mode_mask, current_mode,
+ current_mode_mask,
+ atflag. All callers changed. Close some races. Use an easier-to
+ understand method for computing permissions. Work around POSIX
+ incompatibility in Linux fchmodat. Support extraction of symlink
+ modes, if the OS allows it.
+ (set_stat): Remove args cur_info, invert_permissions, permstatus.
+ Add args current_mode, current_mode_mask, interdir, atflag.
+ All callers changed. Close some races. Support extraction of
+ attributes on symlinks, if the OS allows it.
+ (delay_set_stat): Remove args invert_permissions, permstatus.
+ Add args current_mode, current_mode_mask, mode, atflag.
+ The ST arg can be null now, indicating that it's an intermediate
+ directory. All callers changed.
+ (repair_delayed_set_stat, apply_nonancestor_delayed_set_stat):
+ Close some races.
+ (extract_dir): Also be paranoid if only --same-permissions, due
+ to semantics of setgid and setuid directories on some hosts.
+ This closes a race on those hosts. Simplify calculation of
+ delay_set_stat arguments; the old code was truly strange and
+ probably wrong in some border cases.
+ (extract_dir, extract_file, extract_node, extract_fifo): Don't
+ rely on
+ unspecified behavior in mode arg of open, mknod, etc. Instead,
+ mask out those bits when creating the file, and add them later via
+ fchmod or chmodat.
+ (open_output_file): file_name is now const. Add arg current_mode,
+ current_mode_mask. All callers changed. When overwriting
+ old files,
+ refuse to overwrite something that is not a regular file, since
+ we're extracting a regular file.
+ (extract_file): Remove the FIXME comment. Whatever the protection
+ issues were, they should be fixed now. As a result of all
+ the other
+ API changes, we now use fchmod etc. rather than chmod etc.,
+ closing
+ some races.
+ (create_placeholder_file, apply_delayed_links): Record desired
+ mode and times for symlinks, for OSes that support that.
+
+2010-09-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: tar -x without --incremental no longer sets atime again
+ * src/extract.c (set_stat): Use UTIME_OMIT rather than UTIME_NOW.
+ The UTIME_NOW was there only to emulate the previous behavior of
+ using the current time, and the previous behavior was there only
+ because before we started assuming POSIX.1-2008 there was no
+ portable way to get the effect of UTIME_NOW.
+
+ tar: another --atime-preserve race fix
+ * src/common.h (set_file_atime): Add parentfd arg.
+ * src/compare.c (diff_file): Use it.
+ * src/create.c (dump_file0): Likewise. This closes yet another
+ race condition with symbolic links.
+ * src/misc.c (set_file_atime): Add parentfd arg.
+
+ tar: --atime-preserve fixes for races etc.
+ This patch fixes a race condition in the --atime-preserve=replace
+ option, which might cause tar to improperly follow a symbolic
+ link.
+
+ It also drops the use of the _FIOSATIME ioctl of Solaris 2.x
+ and later, which loses resolution on time stamps. Modern Solaris
+ systems support full-resolution time stamps in the kernel, and
+ it's not worth the hassle of testing this call, useful only in
+ no-longer-supported Solaris variants.
+
+ Also, it undoes a change I recently introduced to the --compare
+ option, which caused it to not follow symbolic links unless the
+ --dereference option was also used. Quite possibly this change is
+ a good idea, but the old behavior was documented and the change
+ should not have been installed casually.
+
+ * configure.ac: Don't check for stropts.h and sys/filio.h.
+ * gnulib.modules: Add futimens, utimensat. Remove futimens.
+ * src/common.h (fd_utimensat): New decl.
+ * src/compare.c (diff_file, diff_multivol):
+ Don't use open_read_flags: those are for --create only.
+ * src/create.c (dump_file0): Adjust to set_file_atime changes.
+ Pass fstatat_flags to set_file_atime, so that symbolic links are
+ not followed inadvertantly.
+ * src/extract.c: Don't include utimens.h.
+ (set_stat): Use fd_utimensat ant UTIME_NOW rather than fdutimens.
+ * src/misc.c: Don't include utimens.h, stropts.h, sys/filio.h.
+ (fd_utimensat): New function.
+ (set_file_atime): Use it. New arg atflag, controlling symlink
+ handling. All callers changed.
+
+2010-09-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ * configure.ac: tar: close some race conditions when extracting
+ * configure.ac: Check for fchmod and fchown. Don't check
+ for utimes.
+ * src/extract.c (fdchmod, fdchown, fdstat): New functions.
+ (set_mode, set_stat): New arg FD. All callers changed.
+ This avoids some race conditions between closing a regular file
+ and setting its metadata, and it's a bit faster.
+
+2010-09-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: don't worry about fdopendir closing its argument
+ * NEWS: Don't mention dirfd; no longer needed.
+ * gnulib.modules: Remove dirfd.
+ * src/create.c (get_directory_entries): Remove the code dealing
+ with dirfd failures, as the new fdopendir replacement doesn't
+ close its argument so we don't need to call dirfd. See
+ <http://lists.gnu.org/archive/html/bug-gnulib/2010-09/msg00208.html>
+ and gnulib commit 970c9038e4cca46e1b037ae0a6d574dfae6a7327.
+
+ * NEWS: Fix wording typo in previous change.
+ Reported by Jim Meyering.
+
+ tar: live within system-supplied limits on file descriptors
+ * NEWS: Note the change. Mention dirfd and fdopendir.
+ * gnulib.modules: Add dirfd and fdopendir. The code was already
+ using fdopendir; dirfd is a new need.
+ * src/common.h (open_searchdir_flags, get_directory_entries):
+ (subfile_open, restore_parent_fd, tar_stat_close): New decls.
+ (check_exclusion_tags): Adjust signature to match code change.
+ * src/create.c (IMPOSTOR_ERRNO): New constant.
+ (check_exclusion_tags): First arg is now a struct tar_stat_info
+ const *, not an fd. All callers changed.
+ (dump_regular_file, dump_file0): A zero fd represents an unused
+ slot, so play it safe if the fd member is zero here. A negative
+ fd represents the negation of an errno value, so play it safe and
+ do not assign -1 to fd merely because an open fails.
+ (open_failure_recover, get_directory_entries, restore_parent_fd):
+ (subfile_open): New functions. These help to recover from file
+ descriptor exhaustion.
+ (dump_dir, dump_file0): Use them.
+ (dump_file0): Use tar_stat_close instead of rolling our own close.
+ * src/incremen.c (scan_directory): Use get_directory_entries,
+ subfile_open, etc., to recover from file descriptor exhaustion.
+ * src/names.c (add_hierarchy_to_namelist): Likewise.
+ (collect_and_sort_names): A negative fd represents the negation
+ of an errno value, so play it safe and do not assign -1 to fd.
+ * src/tar.c (decode_options): Set open_searchdir_flags.
+ Add O_CLOEXEC to all the open flags.
+ (tar_stat_close): New function, which knows how to deal with
+ new convention for directory streams and file descriptors.
+ Diagnose 'close' failures.
+ (tar_stat_destroy): Use it.
+ * src/tar.h (struct tar_stat_info): New member dirstream.
+ fd now has the negative of an errno value, not merely -1, if
+ the file could not be opened, so that failures to reopen
+ directories
+ are better-diagnosed later.
+ * tests/Makefile.am (TESTSUITE_AT): Add extrac11.at.
+ * tests/testsuite.at: Likewise.
+ * tests/extrac11.at: New file.
+
+2010-09-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: improve documentation of reliability and security issues
+ * doc/tar.texi (Reliability and security, Reliability):
+ (Permissions problems, Data corruption and repair, Race
+ conditions):
+ (Security, Privacy, Integrity, Live untrusted data):
+ (Security rules of thumb): New nodes.
+
+2010-09-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: more reliable directory traversal when creating archives
+ * NEWS: Document this.
+ * gnulib.modules: Add openat, readlinkat.
+ * src/common.h (open_read_flags, fstatat_flags): New global
+ variables.
+ (cachedir_file_p, dump_file, check_exclusion_tags,
+ scan_directory):
+ Adjust to new signatures, described below.
+ (name_fill_directory): Remove.
+ * src/compare.c (diff_file, diff_multivol): Use open_read_flags.
+ * src/create.c (struct exclusion_tag): Exclusion predicates
+ now take
+ a file descriptor, not a file name.
+ (add_exclusion_tag): Likewise. All uses changed.
+ (cachedir_file_p): Likewise.
+ (check_exclusion_tags): The directory is now a file descriptor,
+ not a file name. All uses changed. Use openat for better
+ traversal.
+ (file_dumpable_p): Arg is now a struct stat, not a struct
+ tar_stat_info. All uses changed. Check the arg's file types too.
+ (dump_dir0, dump_dir, dump_file0, dump_file): Omit top_level and
+ parent_device args, since st->parent tells us that now. All uses
+ changed.
+ (dump_dir): Likewise. Also, omit fd arg for similar reasons.
+ Apply fdsavedir to a dup of the file descriptor, since we need a
+ file descriptor for openat etc. as well, and fdsavedir (perhaps
+ unwisely) consumes its file descriptor when successful.
+ Do not consume st->fd when successful; this simplifies the caller.
+ (create_archive): Allocate a file descriptor when retraversing
+ a directory, during incremental dumps.
+ (dump_file0): Use fstatat, openat, and readlinkat for better
+ traversal.
+ When opening a file, use the result of fstat on the file
+ descriptor
+ rather than the fstatat on the directory entry, to avoid some race
+ conditions. No need to reopen the directory since we now
+ no longer
+ close it. Change "did we open the file?" test from 0 <= fd to
+ 0 < fd since fd == 0 now represents uninitialized.
+ (dump_file): Now accepts struct tar_stat_info describing parent,
+ not parent_device. Also, accept basename and fullname of entry.
+ All uses changed.
+ * src/incremen.c (update_parent_directory): Accept struct
+ tar_stat_info for parent, not name. All callers changed.
+ Use fstatat for safer directory traversal.
+ (procdir): Accept struct tar_stat_info, not struct stat and
+ dev_t, for info about directory. All callers changed.
+ (scan_directory): Accept struct tar_stat_info, not name,
+ device, and cmdline, for info about directory. All callers
+ changed. Do not consume the file descriptor, since caller
+ might need it. Use fstatat and openat for safer directory
+ traversal; also, use fstat after opening to double-check.
+ (name_fill_directory): Remove.
+ * src/names.c (add_hierarchy_to_namelist): Accept struct
+ tar_stat_info instead of device and cmdline. All callers changed.
+ When descending into a subdirectory, use openat and fstat for
+ safer directory traversal.
+ (collect_and_sort_names): Use open and fstat for safer directory
+ traversal. Set up struct tar_stat_info for callee's new API.
+ * src/tar.c (decode_options): Initialize open_read_flags
+ and fstatat_flags.
+ (tar_stat_destroy): Close st->fd if it is positive (not zero!).
+ * src/tar.h (struct tar_stat_info): New members parent, fd.
+ * src/update.c (update_archive): Adjust to dump_file's API change.
+ * tests/filerem02.at: Ignore stderr since its contents now depend
+ on the file system implementation.
+
+2010-09-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: remove lint discovered by Sun C compiler
+ * src/common.h (WARN_ALL): Don't mask with 0xffffffff; on a 32-bit
+ host, 0xffffffff is of type 'unsigned int', which makes WARN_ALL
+ an unsigned int value that is too large to fit into an int, and
+ the C standard says that this has undefined behavior. The mask is
+ not needed, so omit it.
+
+2010-09-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: restore macros that are used in some cases
+ * src/tar.c (LOW_DENSITY_NUM, MID_DENSITY_NUM, HIGH_DENSITY_NUM):
+ Restore these macros, undoing the previous change to this file.
+ The macros are used after all, in some cases. Sorry about that.
+
+2010-09-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: remove unused macros
+ * src/create.c (UINTMAX_TO_CHARS): Remove; no longer used.
+ * src/tar.c (LOW_DENSITY_NUM, MID_DENSITY_NUM, HIGH_DENSITY_NUM):
+ Likewise.
+ * src/incremen.c (DIR_IS_NEW): Comment out; not used.
+ Mark this with a FIXME, since it looks like it should be used.
+
+2010-08-27 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix --remove-files in update/append mode.
+ * src/update.c (update_archive): Call finish_deferred_unlinks when
+ done.
+
+2010-08-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: avoid assumptions about root access and chmod -w in test
+ cases
+ * tests/extrac07.at, tests/extrac09.at, tests/listed03.at: Use
+ AT_UNPRIVILEGED_PREREQ, since this test requires non-root
+ privileges.
+ * tests/extrac07.at: Don't use "chmod -w", as POSIX says it's not
+ portable to start a chmod permissions-list with "-" as it may be
+ confused with an option. Use "chmod a-w" instead.
+
+ tar: fix bug with -C and delayed setting of metadata
+ * src/common.h (chdir_current): New decl.
+ * src/extract.c (struct delayed_set_stat, struct delayed_link):
+ New member change_dir.
+ (delay_set_stat, create_placeholder_file): Set it.
+ (apply_nonancestor_delayed_set_stat, apply_delayed_links): Use it.
+ (extract_link): Check that the links are all relative to the same
+ directory.
+ (extract_archive): Restore the current directory after
+ apply_nonancestor_delayed_set_stat has possibly changed it.
+ * src/misc.c (chdir_current): New external var; this used to
+ be the private static variable 'previous' inside chdir_dir.
+ All uses changed.
+ * tests/Makefile.am (TESTSUITE_AT): New test extrac10.at.
+ * tests/extrac10.at: New file.
+ * tests/testsuite.at: Include it.
+
+2010-08-25 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Don't apply file transformations to volume names.
+ * src/list.c (decode_header): Don't apply file transformations
+ to volume names.
+ * tests/xform01.at: New testcase.
+ * tests/xform-h.at (xform): Rename macro to xformtest. Use
+ pushdef/popdef.
+ * tests/Makefile.am, tests/testsuite.at: Add xform01.at
+
+2010-08-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: optimize -c --sparse when file is entirely sparse
+ * src/sparse.c (sparse_scan_file): If the file is entirely sparse,
+ that is, if ST_NBLOCKS is zero, don't bother scanning for nonzero
+ blocks. Idea by Kit Westneat, communicated by Bernd Schubert in
+ <http://lists.gnu.org/archive/html/bug-tar/2010-08/msg00038.html>.
+ Also, omit unnecessary lseek at start of file.
+
+ tar: don't assume size of a sparse file chunk fits in size_t
+ * src/tar.h (struct sp_array): Change numbytes from size_t
+ to off_t.
+ All uses changed.
+ * scripts/xsparse.c (struct sp_array): Likewise.
+ Include <stdint.h>, for SIZE_MAX.
+ (expand_sparse): Don't try to allocate a buffer bigger than
+ SIZE_MAX bytes.
+ * src/common.h (SIZE_TO_CHARS, size_to_chars, SIZE_FROM_HEADER):
+ (size_from_header): Remove decls.
+ * src/create.c (size_to_chars): Remove.
+ * src/list.c (size_from_header): Remove.
+ * src/sparse.c (sparse_extract_region, check_data_region):
+ (oldgnu_add_sparse, oldgnu_store_sparse_info, pax_decode_header):
+ Don't assume chunk sizes fit in size_t.
+ (oldgnu_add_sparse): Check for off_t overflow.
+ * src/xheader.c (sparse_numbytes_decoder, sparse_map_decoder):
+ Likewise.
+
+ tar: use ctime, not mtime, when checking placeholders
+ * src/extract.c (struct delayed_link): Rename member mtime
+ to ctime.
+ All uses changed to use ctime rather than mtime.
+
+2010-08-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: add comment to link04.at test
+ * tests/link04.at: Add explanatory comment at head.
+
+ tar: fix 1.23 Solaris regression related to PRIV_SYS_LINKDIR
+ The idea was suggested by Petr Sumbera in the thread starting
+ here:
+ http://lists.gnu.org/archive/html/bug-tar/2010-08/msg00000.html
+ * src/extract.c (set_mode): Save the errno of the chmod that
+ failed, for the benefit of chmod_error_details. Do not bother
+ retrying chmod unless the mode suggests setuid is the issue.
+ (extract_archive): Remove redundant call to
+ priv_set_remove_linkdir.
+ * src/system.c: Include priv-set.h.
+ (sys_spawn_shell, sys_child_open_for_compress):
+ (sys_child_open_for_uncompress, sys_exec_command):
+ (sys_exec_info_script, sys_exec_checkpoint_script):
+ Invoke priv_set_restore_linkdir before execv or execlp, so that
+ the subprocess has the same privileges that tar originally did.
+
+ tar: handle files that occur multiple times but have link count 1
+ This patch was inspired by the following patch that addressed a
+ similar problem in GNU coreutils du:
+ http://git.savannah.gnu.org/gitweb/?p=coreutils.git;h=efe53cc72b599979ea292754ecfe8abf7c839d22
+ * src/common.h (name_count): New decl.
+ * src/create.c (trivial_link_count): New static var.
+ (create_archive): Initialize it.
+ (dump_hard_link, file_count_links): Use it, so that files with
+ link count 1 are handled correctly when they are found multiple
+ times.
+ * src/names.c (allocated_entries): Renamed from allocated_names,
+ since the identifier's name was misleading. All uses changed.
+ (entries): Renamed from names. All uses changed.
+ (scanned): Renamed from name_index. All uses changed.
+ (name_count): New var.
+ (name_add_name): Increment it.
+ * tests/link04.at: New file.
+ * tests/testsuite.at: Add it.
+ * tests/Makefile.am (TESTSUITE_AT): Likewise.
+
+2010-08-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: use nlink_t for link counts
+ * src/create.c (struct link): nlink is now of type nlink_t,
+ not size_t.
+
+ tar: don't export names that aren't used elsewhere
+ * src/common.h (file_dumpable_p, gid_to_chars, major_to_chars):
+ (minor_to_chars, mode_to_chars, uid_to_chars, uintmax_to_chars):
+ (string_to_chars, dumpdir_creat0, dumpdir_create, dumpdir_free):
+ (dumpdir_locate, dumpdir_next, dumpdir_first, gid_from_header):
+ (major_from_header, minor_from_header, mode_from_header):
+ (time_from_header, uid_from_header, quote_copy_string,
+ request_stdin):
+ (xheader_init, transform_header_name):
+ Remove declarations; these are no longer exported from their
+ modules.
+ (GID_TO_CHARS, MAJOR_TO_CHARS, MINOR_TO_CHARS, MODE_TO_CHARS):
+ (UID_TO_CHARS, UINTMAX_TO_CHARS, UNAME_TO_CHARS, GNAME_TO_CHARS):
+ Move to src/create.c, since no other module uses these.
+ (GID_FROM_HEADER, MAJOR_FROM_HEADER, MINOR_FROM_HEADER):
+ (MODE_FROM_HEADER, TIME_FROM_HEADER, UID_FROM_HEADER):
+ Move to src/extract.c, since no other module uses these.
+ (dumpdir_t, dumpdir_iter_t): Remove; no longer used.
+ * src/create.c (gid_to_chars, major_to_chars, minor_to_chars):
+ (mode_to_chars, uid_to_chars, uintmax_to_chars, string_to_chars):
+ (file_dumpable_p): Now static.
+ * src/incremen.c (dumpdir_create0, dumpdir_create, dumpdir_free):
+ (dumpdir_locate, dumpdir_next, dumpdir_first): Now static.
+ (scan_directory, write_directory_file_entry):
+ Use struct dumpdir_iter * rather than dumpdir_iter_t.
+ * src/list.c (gid_from_header, major_from_header,
+ minor_from_header):
+ (mode_from_header, time_from_header, uid_from_header):
+ (transform_member_name): Now static.
+ * src/misc.c (quote_copy_string): #if 0 out, as it's not used
+ anywhere.
+ * src/system.c (wait_for_grandchild): Now static.
+ * src/tar.c (request_stdin): Now static.
+ * src/xheader.c (xheader_init): Now static.
+
+ tar: fix misspelled identifier "set_comression_program_by_suffix"
+ * src/suffix.c (set_compression_program_by_suffix): Renamed from
+ set_comression_program_by_suffix.
+ * src/buffer.c, src/common.h, src/tar.c: All uses changed.
+
+2010-08-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: change interdir_made from int to bool
+ * src/extract.c (maybe_recoverable, create_placeholder_file):
+ Change interdir_made from int * to bool *, since the flag has just
+ two values 0 and 1. All uses changed. This does not affect tar's
+ behavior.
+
+ tar: remove trailing white space from source files
+ * ChangeLog.1, ChangeLog.CVS, Makefile.am, NEWS, README:
+ * README-hacking, directory, doc/Makefile.am, doc/dumpdir.texi:
+ * doc/gendocs_template, doc/intern.texi, doc/mastermenu.el:
+ * doc/snapshot.texi, doc/sparse.texi, doc/tar-snapshot-edit.texi:
+ * doc/value.texi, lib/Makefile.am, scripts/backup-specs:
+ * scripts/dump-remind.in, scripts/tar-snapshot-edit,
+ scripts/tarcat:
+ * scripts/xsparse.c, src/arith.h, src/buffer.c, src/compare.c:
+ * src/create.c, src/delete.c, src/exit.c, src/suffix.c, src/tar.c:
+ * src/tar.h, src/update.c, src/warning.c, src/xheader.c:
+ * tests/append01.at, tests/append02.at, tests/atlocal.in:
+ * tests/delete03.at, tests/exclude.at, tests/exclude06.at:
+ * tests/extrac04.at, tests/extrac05.at, tests/extrac06.at:
+ * tests/extrac07.at, tests/filerem01.at, tests/filerem02.at:
+ * tests/incr01.at, tests/incr02.at, tests/incr03.at,
+ tests/incr06.at:
+ * tests/label02.at, tests/label03.at, tests/label04.at:
+ * tests/label05.at, tests/link02.at, tests/link03.at:
+ * tests/listed01.at, tests/listed02.at, tests/long01.at:
+ * tests/longv7.at, tests/multiv01.at, tests/multiv02.at:
+ * tests/multiv03.at, tests/multiv05.at, tests/multiv06.at:
+ * tests/multiv07.at, tests/multiv08.at, tests/options.at:
+ * tests/options02.at, tests/remfiles03.at, tests/rename01.at:
+ * tests/rename02.at, tests/rename03.at, tests/rename04.at:
+ * tests/rename05.at, tests/same-order01.at, tests/same-order02.at:
+ * tests/shortfile.at, tests/shortupd.at, tests/sparse01.at:
+ * tests/sparse02.at, tests/sparsemv.at, tests/sparsemvp.at:
+ * tests/star/README, tests/star/gtarfail2.at:
+ * tests/star/multi-fail.at:
+ * tests/star/pax-big-10g.at, tests/star/quicktest.sh:
+ * tests/star/ustar-big-2g.at, tests/star/ustar-big-8g.at:
+ * tests/update01.at, tests/update02.at, tests/volsize.at:
+ * tests/volume.at:
+ Remove trailing spaces and tabs from lines, and remove
+ trailing empty lines from files. This makes it a bit easier
+ to share code among coreutils and other projects that do this.
+
+2010-08-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ tar: update licenses to latest versions from www.gnu.org
+ * COPYING: Update to latest version; this is just minor
+ formatting.
+ * doc/fdl.texi: Update from GFDL 1.2 to 1.3.
+ * doc/tar.texi: Adjust to new format of fdl.texi. Omit trailing
+ white space.
+
+2010-07-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * src/misc.c (struct wd): Fix comment to match code.
+
+2010-07-18 Paul R. Eggert <eggert@cs.ucla.edu>
+
+ tar: no need to report getcwd error if never using the result
+ * src/misc.c (struct wd): Rename 'saved' to 'err', with new
+ semantics.
+ (chdir_arg, chdir_do): Adjust to new semantics. Do not report an
+ error merely because save_cwd fails; report an error only if
+ save_cwd's result is needed later.
+ * tests/extrac09.at: New file, to test for bug that was fixed.
+ * tests/testsuite.at: Include it.
+ * tests/Makefile.am (TESTSUITE_AT): Add it.
+
+ tar: go back to absolutifying filenames in normalize_filename
+ for now
+ * src/misc.c (normalize_filename): For now, go back to making
+ filenames absolute, even though this causes 'tar' to fail when
+ getcwd fails. However, do not attempt to resolve ".." as this
+ does not work with symlinks. Also, do the right thing with
+ leading file system prefixes and on hosts where // != /.
+
+2010-07-17 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Allow for size suffixes in -L and --record-size options.
+ * src/tar.c (TAR_SIZE_SUFFIXES): New define.
+ (parse_opt): Allow for size suffixes in arguments to
+ -L and --record-size options.
+ * NEWS, doc/tar.texi: Update.
+
+2010-07-15 Paul R. Eggert <eggert@cs.ucla.edu>
+
+ tar: don't crash if getcwd fails
+ * src/extract.c: Don't include xgetcwd.h.
+ (extract_dir): stat "." rather than statting getcwd's output.
+ * src/misc.c (normalize_filename_x): Rewrite so as not to resolve
+ /../, which can't be done reliably in the presence of symlinks.
+ Don't reject valid names such as ".".
+ (normalize_filename): Don't make it absolute; that way, we don't
+ have to invoke xgetcwd which might fail. Don't bother to realloc
+ at the end, since that uses time and now saves little space.
+ (chdir_do): Don't crash if xgetcwd fails.
+ * tests/Makefile.am (TESTSUITE_AT): Add listed03.at.
+ * tests/listed03.at: New file.
+ * tests/testsuite.at: Include listed03.at.
+
+2010-07-11 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Keep a detailed map of archive members stored in the record
+ buffer.
+ A separate map (bufmap) provides information for creating
+ multi-volume continuation headers.
+
+ * src/buffer.c (bufmap): New struct.
+ (bufmap_head, bufmap_tail, inhibit_map): New variables.
+ (mv_begin_write): New function.
+ (mv_begin): Rename to mv_begin_read. Rewrite using mv_begin_write.
+ All callers changed.
+ (mv_total_size): Remove.
+ (bufmap_locate, bufmap_free, bufmap_reset): New functions.
+ (_flush_write): Update bufmap.
+ (close_archive): Free bufmap.
+ (add_chunk_header): Take a bufmap argument.
+ (gnu_add_multi_volume_header): Likewise.
+ (add_multi_volume_header): Likewise.
+ (_gnu_flush_write): Rewrite using bufmap.
+ (real_s_name, real_s_totsize)
+ (real_s_sizeleft)
+ (save_name, save_totsize, save_sizeleft): Removed. All
+ uses updated.
+ (mv_size_left): Update bufmap_head.
+ (mv_end): Rewrite.
+ (multi_volume_sync): Remove.
+
+ * src/common.h (mv_begin_write): New prototype.
+ (mv_begin): Rename to mv_begin_read.
+ * src/create.c: Use mv_begin_write instead of mv_begin.
+ Remove calls to mv_size_left and mv_end.
+ * src/sparse.c: Likewise.
+
+ * tests/multiv07.at: Close stdin.
+ * tests/spmvp00.at: Update AT_KEYWORDS.
+ * tests/spmvp10.at: Likewise.
+
+ * tests/multiv08.at: New testcase.
+ * tests/Makefile.am, tests/testsuite.at: Add multiv08.at.
+
+ Version 1.23.90
+ * NEWS, configure.ac: Version 1.23.90
+ * doc/tar.texi: Document the use of lbzip2.
+
+2010-06-28 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix exclusion of long file names when extracting from pax format
+ archives.
+ * src/list.c (read_and): Call decode_header before attempting
+ name_match.
+ (list_archive): Remove call to decode_header.
+
+ * src/compare.c (diff_archive): Remove call to decode_header.
+ * src/extract.c (extract_archive): Likewise.
+
+ * test/exclude06.at: New test case.
+ * tests/testsuite.at: Include exclude06.at.
+ * tests/Makefile.am (TESTSUITE_AT): Add exclude06.at.
+
+ Minor fix.
+ * src/buffer.c (magic): Split the character constant to help
+ cc recognize character boundaries (7 is a valid hex character).
+
+2010-06-27 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Minor fix.
+ * src/buffer.c (magic): Fix xz magic.
+
+2010-06-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ Remove some lint, found by gcc -W etc.
+ * src/common.h (label_notfound): New decl.
+ * src/buffer.c (set_volume_start_time, compress_type):
+ (guess_seekable_archive, open_compressed_archive, init_buffer):
+ (_flush_write, archive_is-dev, increase_volume_number):
+ (change_tape_menu, try_new_volume, add_chunk_header):
+ (multi_volume_sync):
+ Declare as 'static' if it's not exported.
+ Use function prototype (void) rather than old-style ().
+ * src/checkpoint.c (expand_checkpoint_string): Likewise.
+ * src/incremen.c (dirlist_replace_prefix, makedumpdir,
+ read_incr_db_2):
+ Likewise.
+ * src/list.c (print_volume_label): Likewise.
+ * src/misc.c (normalize_filename_x): Likewise.
+ * src/names.c (make_name, free_name, check_name_alloc,
+ name_next_elt):
+ Likewise.
+ * src/tar.c (tar_list_quoting_style, add_exclude_array):
+ (set_stat_signal): Likewise.
+ * src/transform.c (new_transform,
+ _single_transform_name_to_obstack):
+ (_transform_name_to_obstack): Likewise.
+ * src/unlink.c (dunlink_alloc): Likewise.
+
+ * src/buffer.c (struct zip_magic): Use const when appropriate.
+ * src/incremen.c (obstack_code_rename,
+ write_directory_file_entry):
+ Likewise.
+ * src/sparse.c (COPY_STRING): Likewise.
+ * src/system.c (dec_to_env, time_to_env, oct_to_env, str_to_env):
+ (chr_to_env): Likewise.
+ * src/tar.c (tar_list_quoting_style, set_stat_signal): Likewise.
+
+ * src/extract.c (extract_node): Don't return garbage.
+
+ * src/names.c: Remove old-style declarations of getgrnam etc.
+ All modern systems declare these, and it's not worth the hassle
+ of ignoring the warnings on modern systems for old-style decls.
+
+2010-05-17 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Bugfix.
+ * src/incremen.c (make_directory): Retain the slash if it is the
+ only character in a filename.
+
+2010-04-02 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Recode NEWS back to UTF-8
+
+2010-04-01 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix the gzip.at test case.
+ * tests/gzip.at: Suppress gzip error output, as it can differ
+ depending on its version etc. Bug reported by Ludovic Courtès.
+
+2010-03-28 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ New option --full-time.
+ * src/common.h (full_time_option): New global.
+ * src/tar.c (FULL_TIME_OPTION): New constant.
+ (options): New option --full-time.
+ (parse_opt): Handle the --full-time option.
+ * src/list.c (simple_print_header): Pass full_time_option
+ as the 2nd argument to tartime.
+ * doc/tar.texi: Update.
+ * NEWS: Update.
+
+2010-03-27 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Minor fixes in the testsuite.
+ * tests/extrac07.at: Fix a typo (invalid number
+ of arguments before format list).
+ * tests/link02.at: Use `ln' instead of `link'.
+ * tests/link03.at: Likewise.
+
+ Fix coredump.
+ * src/names.c (collect_and_sort_names): Remove
+ entry from the table before freeing it.
+
+ Fix dead loop on extracting existing symlinks with the -k option.
+ * src/extract.c (create_placeholder_file)
+ (extract_link, extract_symlink)
+ (extract_node, extract_fifo): Handle all possible
+ return values from maybe_recoverable. This complements
+ 8f390db92fc. Reported by Ico Doornekamp <bug-tar@zevv.nl>.
+ * NEWS: Update.
+
+2010-03-20 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix undesired error exit on receiving SIGPIPE.
+ * src/tar.c: Do not ignore SIGPIPE.
+ * tests/sigpipe.at: New testcase.
+ * tests/Makefile.am, tests/testsuite.at: Add sigpipe.at
+ * tests/remfiles01.at: Fix error code expectation.
+ * NEWS: Update.
+
+2010-03-17 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix --remove-files.
+ Tar --remove-files relied on canonicalize_file_name,
+ which replaces symlinks in file name components with
+ the directories they point to. Due to this, tar
+ effectively ignored existence of symbolic links and
+ was unable to remove a directory that contained any
+ (Alexander Kozlov <akozlov@nada.kth.se>, 2010-03-15).
+
+ * gnulib.modules: Remove canonicalize.
+ * src/misc.c (normalize_filename): Rewrite
+ from scratch. The function operates only on
+ its input string, it makes no attempt to test
+ components for existence or to resolve symbolic
+ links.
+ * tests/Makefile.am (TESTSUITE_AT): Add remfiles03.at.
+ * tests/testsuite.at: Likewise.
+ * tests/remfiles03.at: New test case.
+ * NEWS: Update.
+
+2010-03-12 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Bugfixes.
+ * src/buffer.c (check_label_pattern): Initialize result.
+ * tests/remfiles01.at: Skip if run with root privileges.
+
+2010-03-11 Sergey Poznyakoff <gray@gnu.org.ua>
+
+ Fix `--test-label' and `--label -r' behavior.
+ * doc/tar.texi (Including a Label in the Archive): Revise
+ the section.
+ * NEWS: Update
+
+ * src/buffer.c (open_archive): Check volume label on
+ ACCESS_UPDATE as well.
+ * src/list.c (test_archive_label): Rewrite to match the
+ documentation.
+ * src/names.c (regex_usage_warning): Return int.
+ (names_notfound): Rewrite the conditional.
+ (label_notfound): New function.
+
+ * tests/label03.at: New testcase.
+ * tests/label04.at: New testcase.
+ * tests/label05.at: New testcase.
+ * tests/Makefile.am: Add new testcases.
+ * tests/testsuite.at: Likewise.
+
+ Doc fixes.
+ * doc/tar.texi: Consistently use lowercase `see' within sentences.
+ More fixes spotted by Denis Excoffier.
+ * THANKS: Update.
+
+ Shut up a gcc warning message.
+ * src/tar.c (tar_help_filter): Use a separate const
+ variable to hold returns from gettext. Reported by
+ Peter Breitenlohner.
+
+ Bugfix.
+ * src/names.c (collect_and_sort_names): Initialize prev_name.
+ Reported by Dmitry V. Levin.
+
2010-03-10 Sergey Poznyakoff <gray@gnu.org.ua>
Version 1.23
* tests/extrac05.at: Skip test if creating
sparse file fails.
- Fix eventual memory override and fd exhaustion in create.c
- Both bugs reported by Kamil Dudka.
-
+ Fix eventual memory override and fd exhaustion in create.c Both
+ bugs reported by Kamil Dudka.
* src/create.c (check_exclusion_tags): Do not keep
pointer to a location within tagname: it may change
after xrealloc. Use byte offset instead.
2009-03-04 Sergey Poznyakoff <gray@gnu.org.ua>
Add xz support.
-
+
* src/buffer.c, src/suffix.c: Add support for xz compression.
* src/tar.c: New option --xz, for compression/decompression using xz.
Re-assign -J as a short equivalent of --xz.
2008-11-25 Sergey Poznyakoff <gray@gnu.org.ua>
Do not try to drain the input pipe before closing the
- archive.
-
+ archive.
+
* src/buffer.c (close_archive): Remove call to
sys_drain_input_pipe. Pass hit_eof as the second
argument to sys_wait_for_child.
* src/extract.c (extract_link, extract_symlink): Remove calls to
transform_member_name. It is done in read_header.
* src/list.c (decode_xform): Reflect change in data type of 2nd
- argument.
+ argument.
(transform_member_name): 2nd arg is int.
(decode_header): Transform file name and link target names.
* src/tar.c: Remove --transform-symlinks.
set global flags using `flags=' syntax.
(_transform_name_to_obstack, transform_name_fp)
(transform_name): Take an additional argument, specifying scope
- flags.
+ flags.
2008-10-19 Sergey Poznyakoff <gray@gnu.org.ua>
* tests/sparsemvp.at: Likewise.
* tests/volsize.at: Likewise.
* NEWS: Update.
-
+
2008-10-16 Sergey Poznyakoff <gray@gnu.org.ua>
* src/common.h (transform_symlinks_option): New global.
* doc/tar.texi: Document --transform-symlinks
* NEWS: Update.
* THANKS: Update.
-
+
* src/names.c (name_gather): Use xzalloc.
* src/buffer.c (short_read): Move record size detection before
the loop.
-
+
2008-10-07 Sergey Poznyakoff <gray@gnu.org.ua>
* src/tar.c (options): Add --lzop option.
2008-10-05 Xavier Hienne <xavier.hienne@free.fr> (tiny change)
* src/checkpoint.c (checkpoint_compile_action): Add missing
- `else'.
+ `else'.
2008-09-24 Sergey Poznyakoff <gray@gnu.org.ua>
* tests/atlocal.in (decho): New function.
* tests/multiv06.at: Use decho instead of echo2.
* tests/incremental.at: Raise wait interval to 2 seconds.
-
+
2008-07-24 Sergey Poznyakoff <gray@gnu.org.ua>
* src/tar.c (decode_options): Do not allow volume length less
tests/longv7.at, tests/lustar01.at, tests/lustar02.at,
tests/shortfile.at: Update to match new diagnostic wording
(see 2008-05-06).
-
+
* NEWS: Update.
2008-06-14 Sergey Poznyakoff <gray@gnu.org.ua>
* doc/tar.texi (exclude): Document support for new VCS.
* THANKS: Update.
- * NEWS: Update.
+ * NEWS: Update.
* tests/multiv05.at: Fix typos.
* tests/volsize.at: Remove a TZ dependency.
-
+
2008-06-14 Dan Drake <dan@dandrake.org> (tiny change)
* src/tar.c (exclude_vcs_files): Support for Bazaar, Mercurial and
- Darcs.
+ Darcs.
2008-05-06 Sergey Poznyakoff <gray@gnu.org.ua>
* tests/incr03.at, tests/incr04.at, tests/rename02.at,
tests/rename03.at: Insert calls to sleep between creation of files
and adding them to the archive.
-
+
2008-03-31 Sergey Poznyakoff <gray@gnu.org.ua>
* src/create.c (dump_file0): Count links only for actually dumped
- files.
+ files.
2008-03-27 Sergey Poznyakoff <gray@gnu.org.ua>
* NEWS: Document --no-check-device and --check-device.
* doc/rendition.texi: Change the way FIXME-*refs are handled in
- !PROOF.
+ !PROOF.
* doc/intern.texi, doc/tar.texi: Update.
* doc/untabify.el: New file.
* doc/Makefile.am (EXTRA_DIST): Add untabify.el
(untabify, final, check-format, check-refs, check-fixmes)
(check-unrevised, all-check-docs, check-docs): New rules.
-
+
* src/common.h (check_device_option): New global.
* src/incremen.c (procdir): Use boolean and instead of bitwise
one. Patch by Jean-Louis Martineau.
--check-device. Proposed by Jean-Louis Martineau.
(parse_opt): Hanlde new options.
(decode_options): Initialize check_device_option to true.
-
+
* THANKS: Update
2008-03-06 Sergey Poznyakoff <gray@gnu.org.ua>
* po/.cvsignore: Update
* src/system.c: Remove include setenv.h.
* tests/atlocal.in (STAR_DATA_URL): Update.
- * tests/star/README: Update URL.
+ * tests/star/README: Update URL.
2008-02-09 Sergey Poznyakoff <gray@gnu.org.ua>
Exit with nonzero status if a close fails on an archive.
Problem (and initial trivial fix)
* src/buffer.c (close_archive, new_volume): close_error, not
- close_warn.
+ close_warn.
2007-12-05 Sergey Poznyakoff <gray@gnu.org.ua>