2023-07-18 Sergey Poznyakoff Version 1.35 2023-07-17 Sergey Poznyakoff Use full-read instead of safe-read This helps handle archiving on certain filesystems where read() returns less bytes than requested when reading from a regular file. References: https://savannah.gnu.org/bugs/index.php?64426 https://lists.gnu.org/archive/html/bug-tar/2021-07/msg00001.html * gnulib.modules: Add full-read. * src/common.h: Include full-read.h * src/misc.c: Use full_read. * src/sparse.c: Likewise. * src/update.c: Likewise. 2023-07-11 Sergey Poznyakoff Fix typo in comments This and the bug fixed by the previous commit were reported by Benno Schulenberg. 2023-07-10 Sergey Poznyakoff Fix --update --wildcards * src/common.h (name): New field: is_wildcard. (name_scan): Change protoype. * src/delete.c: Update calls to name_scan. * src/names.c (addname, add_starting_file): Initialize is_wildcard. (namelist_match): Take two arguments. If second one is true, return only exact matches. (name_scan): Likewise. All callers updated. (name_from_list): Skip patterns. * src/update.c (remove_exact_name): New function. (update_archive): Do not remove matching name, if it is a pattern. Instead, add a new entry with the matching file name. * tests/update04.at: New test. * tests/Makefile.am: Add new test. * tests/testsuite.at: Include new test. * NEWS: Update. 2023-07-10 Benno Schulenberg Various fixes in the documentation * doc/tar.1: Add missing dots, use plural when necessary, tweak a wording. Remove an incorrect observation, three times. Add some missing articles, correct some formatting, and expand the opaque descriptions of two options. * doc/tar.texi: Drop a stray `cd` command from an example. Correct two cross references, correct the paragraph about the manpage, and unbreak a URL. * src/names.c: Correct and shorten an error message: "non-optional" means "mandatory", but "non-option" is what was meant. And the phrase "in archive create or update mode" was both unneeded and incomplete. * tests/positional01.at: Change expected error text. * tests/positional02.at: Likewise. * tests/positional03.at: Likewise. 2023-06-29 Paul Eggert build: update gnulib submodule to latest 2023-06-26 Paul Eggert tar: extract delayed links in order Extract delayed links in tar file order, rather than in hash table order with modifications. This is simpler and more likely to use the kernel’s cached filesystem data, assuming related delayed links are nearby in the tar file. * src/extract.c (struct delayed_link.has_predecessor): Remove. All uses removed. (delayed_link_head, delayed_link_tail): New static vars. This resurrects delayed_link_head’s old function except that the linked list is now in forward order, not reverse. (find_delayed_link_source): Now simply returns bool, since the callers no longer need the pointer. (create_placeholder_file): Put the delayed link at the end of the linked list. Omit no-longer-needed last arg. All callers changed. (apply_delayed_links): Simplify now that we can just iterate through the delayed_link_head list. 2023-06-26 Paul Eggert tar: make safe for -Wunused-parameter This also ports to C23 [[maybe_unused]]. * configure.ac (WARN_CFLAGS): Do not add -Wno-unused-parameter. Add MAYBE_UNUSED where needed in source code. Also, put it at the front where C23 requires it. 2023-06-26 Paul Eggert * po/.gitignore: Omit redundant *~ entries. 2023-06-26 Paul Eggert tar: omit unnecessary freeing * src/tar.c (main): Omit unnecessary freeing. 2023-06-18 Sergey Poznyakoff Make sure each delayed link entry is visited once * src/extract.c (create_placeholder_file): Use FLEXNSIZEOF (overlooked by c542d3d0c8) (apply_delayed_links): Don't follow the "next" chain after its entries have been applied. 2023-06-17 Paul Eggert Omit unnecessary freeing * src/extract.c (apply_delayed_link): Don’t bother to free memory, as we’re about to exit. 2023-06-17 Paul Eggert Port to strict C99 struct hack Portability bug caught by GCC 13 -fstrict-flex-arrays. * gnulib.modules: Add flexmember. * src/create.c (struct link): * src/exclist.c (struct excfile): * src/extract.c (struct delayed_link, struct string_list): Include . Use FLEXIBLE_ARRAY_MEMBER, for portability to strict C99 or later. All storage allocations changed to use FLEXNSIZEOF. 2023-06-17 Paul Eggert Use Gnulib ‘dup2’ module This simplifies code that would otherwise use dup and close. * gnulib.modules: Add dup2. * src/system.c: Add #pragma to pacify GCC 13. (xdup2): Simplify by using dup2. 2023-06-17 Paul Eggert Use Gnulib ‘free-posix’ module Paxutils uses it so we should too. * gnulib.modules: Add ‘free-posix’. * src/misc.c (remove_any_file): Assume ‘free’ keeps errno. 2023-06-17 Paul Eggert * buffer.c: work around GCC bug 109856 Recommend Y2038 safety build: update gnulib and paxutils submodules to latest * .gitignore: Add slash, as bootstrap does this now. Sync bootstrap from Gnulib 2023-06-06 Pavel Raiskup Comment a bit on the xattr extraction logic * src/extract.c (extract_file): Document why we pre-create with S_IWUSR. (set_xattr): Drop the INVERT_PERMISSIONS doc leftover. 2023-06-06 Pavel Raiskup Fix --xattr-include='*' documentation * doc/tar.texi (Extended File Attributes): The default extraction pattern consists of just 'user.*' namespace only. While on it, try to explain the reasons for this default behavior. 2023-05-18 Sergey Poznyakoff Honor --numeric-owner when storing ACL entries Based on patch from Fabian Grünbichler * src/xattrs.c (acls_get_text): New function. If given --numeric-owner, use acl_to_any_text to convert ACL to textual representation. Print warning if that function is not available. (xattrs__acls_get_a, xattrs__acls_get_d): Use acls_get_text. 2023-05-18 Sergey Poznyakoff Upgrade paxutils to d50ea31268 This fixes two bugs related to remote archives: 1. Access from unprivileged user accounts. 2. Malfunctioning seek (L) command. 2023-05-18 Sergey Poznyakoff Don't copy DISTFILES during bootstrapping DISTFILES are necessary only during bootstrapping and should not be distributed. This partially reverts commit 9f0e54ab2. 2023-05-01 Benno Schulenberg Add missing option to manpage and remove duplicate operation * doc/tar.1: Add needed option -f after operation -A, sort operation -t alphabetically, add --file after --concatenate, consistently use long option --file in the GNU-style section, and delete duplicate --update. * doc/tar.texi: Add small missing word, and lowercase a letter. 2023-04-18 Sergey Poznyakoff Change some wording in doc/intern.texi 2023-04-18 Anton Makrushin Exclude VCS directory with writing from an archive See https://savannah.gnu.org/bugs/?62859 2023-02-21 Sergey Poznyakoff Detect EOF when deleting from archive. See https://savannah.gnu.org/bugs/?63823 * src/delete.c (flush_file): Break the loop on EOF. * tests/delete06.at: New test. * tests/Makefile.am: Add new test. * tests/testsuite.at: Likewise. 2023-02-11 Sergey Poznyakoff Changes in extended header decoder * src/xheader.c (decode_time): Fix error detection. (raw_path_decoder): Ignore empty paths. 2023-02-11 Sergey Poznyakoff Prevent dead loop in extract_file * src/extract.c (maybe_recoverable): If make_directories indicates success, suppose some intermediate directories have been made, even if in fact they have not. That's necessary to avoid dead loops when maybe_recoverable is called with the same arguments again. 2023-02-11 Sergey Poznyakoff Fix boundary checking in base-256 decoder * src/list.c (from_header): Base-256 encoding is at least 2 bytes long. 2023-01-06 Paul Eggert Adjust to Gnulib macro renaming * src/Makefile.am, tests/Makefile.am (LDADD): Gnulib renamed LIB_HAS_ACL to FILE_HAS_ACL_LIB. 2023-01-06 Paul Eggert build: update gnulib, paxutils submodules to latest 2023-01-06 Paul Eggert Go back to single-file bootstrap Gnulib now supports a single-file bootstrap with --pull and --gen options, in place of the three files autopull.sh, autogen.sh, bootstrap-funclib.sh. This keeps the top level a bit cleaner. * bootstrap: Sync from Gnulib build-aux/bootstrap instead of from top/bootstrap. * autopull.sh, autogen.sh, bootstrap-funclib.sh: Remove. 2023-01-06 Paul Eggert Fix ‘assume’ include * src/tar.c: Include verify.h, needed for ‘assume’. 2023-01-06 Paul Eggert Update copyright years UPDATE_COPYRIGHT_USE_INTERVALS=1 \ gnulib/build-aux/update-copyright \ $(git ls-files | sed -e '/^gnulib$/d /^paxutils$/d /^COPYING$/d /\/fdl.texi$/d') 2022-12-29 Sergey Poznyakoff Optionally warn about missing zero blocks at the end of the archive (In response to savannah bug #63574) * doc/intern.texi: Document actual tar behaviour in regard to missing end-of-file marker. * doc/tar.texi: Rewrite the "warnings" section. Document --warning=missing-zero-blocks * src/common.h (WARN_MISSING_ZERO_BLOCKS): New constant. (WARN_ALL): Include all warning bits. * src/list.c (read_and): If EOF is reached without seeing end-of-file blocks and the "missing-zero-blocks" warning is requested, warn about the fact. * src/warning.c: New warnings: "missing-zero-blocks", "verbose". (warning_option): Change definition to reflect changes in common.h 2022-12-27 Sergey Poznyakoff Fix example use of find command in documentation 2022-12-26 Sergey Poznyakoff Fix savannah bug #63567 * src/buffer.c (short_read): Increase records_read only if a full record has been read. 2022-11-04 Paul Eggert Fix -Af F bug when F is not a regular file Problem reported by Boris Gjenero in: https://lists.gnu.org/r/bug-tar/2022-11/msg00001.html * src/update.c (append_file): Don’t assume that FILE_NAME is a regular file whose size can be determined before reading. Instead, simply read from the file until its end is reached. 2022-11-04 Paul Eggert Fix README-* files README-alpha is for alpha releases, which are not from Git or CVS, so omit mention of that. I'm not sure we'll ever do alpha releases, but if we do, README-alpha assumes the tarballs are already bit. Update README-hacking with info that was mistakenly put into README-alpha. Also mention Bison, needed for parse-date.y. 2022-10-27 Paul Eggert Fix undefined behavior on bad extended header * src/xheader.c (locate_handler): Avoid undefined behavior if strlen(keyword) < kwlen. 2022-10-22 Sergey Poznyakoff Fix savannah bug #63123 The bug was introduced by commit 79d1ac38c1, which didn't take into account all the consequences of returning RECOVER_OK on EEXIST, in particular interactions with the delayed_set_stat logic. The commit 79d1ac38c1 is reverted (the bug it was intended to fix was actually fixed by 79a442d7b0). Instead: * src/extract.c (maybe_recoverable): Don't call maybe_recoverable if EEXIST is reported when UNLINK_FIRST_OLD_FILES option is set. 2022-10-22 Sergey Poznyakoff Fix savannah bug #63250 * src/buffer.c (magic): Add signature of LZMA files produced by xz. 2022-10-08 Paul Eggert Mention previous bug fix 2022-10-08 Paul Eggert tests: check for recently-fixed bug * tests/exclude17.at: New file. * tests/testsuite.at (AT_CHECK_TIMESTAMP): Add it. 2022-10-08 Aurélien Martin (tiny change) tar: fix --exclude-vcs-ignores memory The function frees the patterns' wordsplit structure without asking add_exclude to reallocate the strings. In many cases, this leads to each file name in the directory being checked against the memory location where it just got reallocated. * src/exclist.c: Use EXCLUDE_ALLOC. 2022-09-11 Paul Eggert build: update submodules to latest * src/common.h: Include since paxutils no longer does. (STRINGIFY_BIGINT): New macro, copied from older paxutils. (UINTMAX_STRSIZE_BOUND): New constant, also from older paxutils. 2022-09-11 Paul Eggert Fix bootstrap.conf when no paxutils * bootstrap.conf: Don’t assume the paxutils subdirectory already exists, when bootstrapping. 2022-09-04 Paul Eggert Fix data loss when acting as filter This bug was introduced by the recent lseek-related changes. * src/delete.c (delete_archive_members): * src/update.c (update_archive): Copy the member if acting as a filter, rather than lseeking over it, which is possible if stdin is a regular file. * src/list.c (skim_file, skim_member): * src/sparse.c (sparse_skim_file): New functions, for copying when a filter. * src/list.c (skip_file): Remove; replaced with skim_file. All callers changed. (skip_member): Reimplement in terms of skim_member. * src/sparse.c (sparse_skip_file): Remove; replaced with sparse_skim_file. All callers changed. * src/update.c (acting_as_filter): New static var. (update_archive): Set it; this is like delete.c. * tests/delete01.at (deleting a member after a big one): * tests/delete02.at (deleting a member from stdin archive): Also test filter case. 2022-09-03 Paul Eggert Fix --delete bug with short reads * gnulib.modules: Add idx. * src/common.h: Include idx.h. * src/delete.c (move_archive): Don’t botch short reads. 2022-08-27 Paul Eggert Do not diagnose same xattr file twice * src/extract.c (set_xattr): Simplify, by having it do only the mknodat and xattrs_xattrs_set, rather than also trying to recover from failure. Caller simplified too. * tests/xattr07.at (xattrs: xattrs and --skip-old-files): Adjust test to match fixed behavior. 2022-08-27 Paul Eggert Fix bug with -x --xattr read-only files Problem reported by Kevin Raymond in: https://bugzilla.redhat.com/show_bug.cgi?id=1886540 * src/extract.c (open_output_file): If we already created the empty file, do not open with O_EXCL, or with O_CREAT or O_TRUNC for that matter. Instead, use only O_NOFOLLOW to avoid some races. When estimating current mode, use openflag & O_EXCL rather than overwriting_old_files. (extract_file): Also invert S_IWUSR if it’s not set. * tests/xattr08.at: New test. * tests/Makefile.am, tests/testsuite.at: Add it. 2022-08-15 Paul Eggert Avoid quadratic behavior with delayed links Do this by searching a hash table instead of a linked list. Problem reported by Martin Dørum in https://mort.coffee/home/tar/ via Gavin Smith in: https://lists.gnu.org/r/bug-tar/2022-07/msg00003.html * src/extract.c: Include hash.h. Improve performance a bit on non-birthtime hosts (struct delayed_link.has_predecessor): New member. (delayed_link_head): Remove, replacing with ... (delayed_link_table): ... this new variable. All uses of linked list replaced with hash table. (dl_hash, dl_compare): New functions for hash table. (create_placeholder_file): Initialize has_predecessor. (apply_delayed_link): New function, with body taken from most of the old apply_delayed_link. (apply_delayed_links): Use it. Respect has_predecessor. Don’t bother freeing as we are about to exit. 2022-08-15 Paul Eggert Improve performance a bit on non-birthtime hosts * src/extract.c (HAVE_BIRTHTIME, BIRTHTIME_EQ): New macros. (struct delayed_link, create_placeholder_file, extract_link) (apply_delayed_links): Avoid unnecessary work on platforms like GNU/Linux that lack birthtime. 2022-08-15 Paul Eggert Avoid excess lseek etc. * src/buffer.c, src/delete.c: Do not include system-ioctl.h. * src/buffer.c (guess_seekable_archive): Remove. This is now done by get_archive_status, in a different way. (get_archive_status): New function that gets archive_stat unless remote, and sets seekable_archive etc. (_open_archive): Prefer bool for boolean. (_open_archive, new_volume): Get archive status consistently by calling get_archive_status in both places. * src/buffer.c (backspace_output): * src/compare.c (verify_volume): * src/delete.c (move_archive): Let mtioseek worry about mtio. * src/common.h (archive_stat): New global, replacing ar_dev and ar_ino. All uses changed. * src/delete.c (move_archive): Check for integer overflow. Also report overflow if the archive position would go negative. * src/system.c: Include system-ioctl.h, for MTIOCTOP etc. (mtioseek): New function, which also checks for integer overflow. (sys_save_archive_dev_ino): Remove. (archive_stat): Now (sys_get_archive_stat): Also initialize mtioseekable_archive. (sys_file_is_archive): Don’t return true if the archive is /dev/null since it’s not a problem in that case. (sys_detect_dev_null_output): Cache dev_null_stat. doc: omit MS-DOS mentions in doc It’s really FAT32 we’re worried about now, not MS-DOS. And doschk is no longer a GNU program. 2022-08-15 Paul Eggert Omit MS-DOS mentions in doc It’s really FAT32 we’re worried about now, not MS-DOS. And doschk is no longer a GNU program. 2022-07-25 Paul Eggert Work around GCC bug 106436 * src/tar.c (optloc_eq): Use ‘assume’ to pacify GCC bug. 2022-07-25 Paul Eggert Avoid unlikely crash when xasprintf returns 0 Problem caught by GCC 12. * src/tar.c (easprintf): New static function, which never returns a null pointer. All uses of xasprintf replaced by uses of this function. 2022-07-25 Paul Eggert Update .gitignore * .gitignore: Redo for current sources. 2022-07-25 Paul Eggert Fix minor type confusion * src/tar.c (decode_options): Don’t assign ‘false’ to a pointer. 2022-07-25 Paul Eggert Work around GCC bug 106428 * src/names.c (read_next_name): Reword and clarify to avoid GCC bug 106428. 2022-07-25 Paul Eggert Work around GCC bug 106427 * lib/wordsplit.c (coalesce_segment): Reword to avoid GCC bug 106427. 2022-07-24 Paul Eggert Adjust to Gnulib bootstrap revamp * autogen.sh, autopull.sh, bootstrap-funclib.sh: New files, copied from gnulib/top. * bootstrap: Copy from gnulib/top/bootstrap (as opposed to copying from gnulib/build-aux/bootstrap, as we used to). * bootstrap.conf (bootstrap_post_pull_hook) (bootstrap_post_import_hook): New functions. Move commands into these functions as needed. 2022-07-11 Paul Eggert * doc/tar.1: Fix --xattrs-exclude typo. 2022-06-14 Paul Eggert Avoid EOVERFLOW problems in some symlink tests * src/extract.c (is_directory_link): New arg ST. Caller changed. (is_directory_link, open_output_file): Use readlinkat, not fstatat, to determine whether a string names a symlink. This avoids EOVERFLOW issues. (extract_dir): Avoid duplicate calls to fstatat when keep_directory_symlink_option && fstatat_flags == 0 and the file is a symlink to an existing file. 2022-06-14 Paul Eggert Fix ‘make dist-xz’ bug Problem reported by Pavel Raiskup in: https://lists.gnu.org/r/bug-tar/2022-06/msg00014.html * bootstrap.conf (copy_files): Also copy DISTFILES. 2022-06-14 Paul Eggert Fix commentary in new test case 2022-06-13 Paul Eggert Fix doc -c typo https://lists.gnu.org/r/bug-tar/2022-06/msg00006.html * doc/tar.texi (Extended File Attributes): Fix typo. 2022-06-13 Paul Eggert Update to current Autoconf & Gettext * acinclude.m4, configure.ac: Use AS_HELP_STRING, not AC_HELP_STRING. * bootstrap: Sync from Gnulib. * configure.ac: Require Autoconf 2.71 and Gettext 0.21. Use AC_PROG_CC, not AC_PROG_CC_STDC. Prefer AC_COMPILE_IFELSE to AC_TRY_COMPILE. Use AC_CONFIG_FILES. * gnulib.modules: Use gettext-h, not gettext. 2022-06-13 Paul Eggert build: update gnulib and paxutils submodules to latest 2022-06-11 James Abbatiello (tiny change) tar: fix race condition Problem reported in: https://lists.gnu.org/r/bug-tar/2022-03/msg00000.html * src/extract.c (make_directories): Retry the file creation as long as the directory exists, regardless of whether tar itself created the directory. 2022-06-11 Paul Eggert tar: fix race condition Problem reported by James Abbatiello in: https://lists.gnu.org/r/bug-tar/2022-03/msg00000.html * src/extract.c (make_directories): Do not assume that when mkdirat fails with errno == EEXIST that there is an existing file that can be statted. It could be a dangling symlink. Instead, wait until the end and stat it. 2022-06-11 Paul Eggert test: new test extrac25.at * tests/Makefile.am (TESTSUITE_AT): Add extrac25.at. * tests/extrac25.at: New file. * tests/testsuite.at: Include it. 2022-06-10 Paul Eggert Warn “file changed as we read it” less often * src/create.c (dump_file0): Remove an fstatat call that is unnecessary because the file wasn’t read so we can treat the first fstatat as atomic. Warn “file changed” when the file’s size, mtime, user ID, group ID, or mode changes, instead of when the file’s size or ctime changes. Also, when such a change happens, do not change exit status if --ignore-failed-read. Finally, don’t attempt to change atime back if it didn’t change. 2022-06-10 Paul Eggert Modernize NEWS hook to current Emacs 2022-05-04 Paul Eggert doc: fix abrupt sentence in HTML Typo reported by Jackson Dougherty in: https://lists.gnu.org/r/bug-tar/2022-05/msg00000.html * doc/tar.texi: Don’t assume that tex and info are the only two formats. 2022-02-16 Paul Eggert tar: revamp "file is the archive" diagnostic * src/create.c (dump_file0): For clarity, change diagnostic wording from "file is the archive; not dumped" to "archive cannot contain itself; not dumped". All test cases and documentation changed. 2022-01-02 Sergey Poznyakoff Update copyright years 2021-12-14 Paul Eggert Copy COPYING and fdl.texi from upstream 2021-12-14 Paul Eggert Format ` and ' more nicely in doc Use @documentencoding and set txicodequoteundirected and txicodequotebacktick to get nicer-looking quoting in the manual. 2021-12-14 Paul Eggert Don’t recommend delete=mtime That stops working after the year 2242. 2021-12-13 Paul Eggert More reproducible tarball doc * doc/tar.texi (PAX keywords): Improve discussion of how to generate reproducible tarballs. 2021-12-13 Sergey Poznyakoff Raise version number 2021-12-13 Paul Eggert .gitignore maintenance (some automated) bootstrap: copy from Gnulib build: update gnulib and paxutils submodules to latest Add NEWS items for changes since 1.34 2021-12-13 Paul Eggert Omit unnecessary devmajor and devminor setting * src/create.c (dump_file0): Omit redundant setting of devmajor and devminor; start_header already does this. 2021-12-13 Paul Eggert Omit devmajor and devminor for non-special files * src/create.c (start_header): Leave the devmajor and devminor fields empty for files that are not character and block special devices, even when the archive format is pax, ustar or v7. This avoids generating irrelevant differences which helps with reproducible builds, and is more compatible with what Solaris 10 tar does. 2021-12-13 Paul Eggert Use ‘bool’ in create.c * src/create.c: Prefer ‘bool’, ‘true’, ‘false’ for booleans. 2021-10-14 Paul Eggert * gnulib.modules: Add year2038. 2021-09-20 Paul Eggert build: improve build-from-git for older GCCs configure.ac: Bump GCC version from 4.6 to 11.2 when deciding whether to default to enabling GCC warnings when --enable-gcc-warnings is not specified, as older GCCs can generate too many false alarms. From a suggestion by Christian Schoenebeck. 2021-09-19 Paul Eggert Simplify wordsplit code a bit These changes pacify gcc -Wanalyzer-null-dereference on x86-64 gcc 11.2.1 20210728 (Red Hat 11.2.1-1). * lib/wordsplit.c (wsnode_tail): Remove unnecessary test. (coalesce_segment): Coalesce calls to wsnode_len. 2021-09-18 Paul Eggert build: document WERROR_CFLAGS * README-hacking: Mention 'make WERROR_CFLAGS='. 2021-09-17 Paul Eggert build: update paxutils submodule to latest 2021-09-17 Paul Eggert build: update gnulib submodule to latest * src/common.h (get_directory_entries): Add _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE. Problem found by gcc -Wsuggest-attribute=malloc and current Gnulib. 2021-09-17 Paul Eggert Pacify gcc -Warray-parameter * src/common.h (code_timespec): Declare sbuf arg to be an array, to be consistent with definition. 2021-09-17 Paul Eggert Fix null rereference if low-memory * src/incremen.c (read_incr_db_01): Use xstrdup not strdup. Problem found by gcc -Wanalyzer-possible-null-argument. 2021-09-02 Sergey Poznyakoff Provide functions for manipulating arrays of extended attributes * src/common.h (xheader_xattr_free,xheader_xattr_copy): Remove protos. (xattr_map_init,xattr_map_copy) (xattr_map_add,xattr_map_free): New protos. * src/tar.h (xattr_map): New struct. (tar_stat_info): Replace xattr_map_size and xattr_map with one field: xattr_map. * src/xattrs.c (XATTRS_PREFIX,XATTRS_PREFIX_LEN): New defines. (xheader_xattr_init,xattr_map_init) (xattr_map_free,xattr_map_add) (xheader_xattr_add,xattr_map_copy): New functions. All uses changed. * src/create.c (start_header): Update to use struct xattr_map. * src/extract.c: Update to use struct xattr_map. * src/tar.c: Likewise. * src/xheader.c (xheader_xattr_init,xheader_xattr_free) (xheader_xattr_add,xheader_xattr_copy): Remove. (xattr_coder,xattr_decoder): Use xattr_map_ functions. 2021-08-28 Sergey Poznyakoff Fix handling of extended header prefixes * src/xheader.c (locate_handler): Recognize prefix keywords only when followed by a dot. (xattr_decoder): Use xmalloc/xstrdup instead of alloc 2021-08-28 Sergey Poznyakoff Handle invalid sparse entries in pax header * src/sparse.c (pax_decode_header): Check if sp.offset+sp.numbytes falls within the reported file size. Check for possible integer overflow. 2021-08-28 Sergey Poznyakoff transform: fix replacement of particular pattern instance This fixes handling of expressions like 's/s/@/2' Fix suggested by Anthony Heading. * src/transform.c (_single_transform_name_to_obstack): Avoid duplicating initial prefix if replace is not needed. 2021-07-01 Samanta Navarro Fix crash on invalid command line argument The copy_string_unquote function does not handle arguments which only consist of a single quote. A string is only quoted if two quoting characters exist. How to reproduce: tar --checkpoint-action exec=\" 2021-07-01 Sergey Poznyakoff Fix the use of options with trailing slash in files-from list * src/names.c (read_name_from_file): Do not remove trailing slash here, since name_buffer might contain an option (e.g. -C /). (read_next_name): Remove trailing slash when we're sure we're dealing with a file name. See 163e96a0. 2021-06-01 Sergey Poznyakoff Minor fix * scripts/backup-specs: Set standard paths for rsh (patch#9275). 2021-06-01 Samanta Navarro Fix typos Typos found with codespell 2021-06-01 Samanta Navarro Minor changes. * src/xheader.c (decode_record): Fix format specification. (xattr_encode_keyword): Allocate space for terminating \0. 2021-03-24 Sergey Poznyakoff Fix gendocs_template 2021-03-08 Paul Eggert Tune for single-threaded tar This takes advantage of recent optimizations in Gnulib for single-threaded programs. * configure.ac (GNULIB_EXCLUDE_SINGLE_THREAD) (GNULIB_MBRTOWC_SINGLE_THREAD, GNULIB_REGEX_SINGLE_THREAD) (GNULIB_WCHAR_SINGLE_LOCALE): Define. 2021-03-08 Paul Eggert Port linking to AIX 7.1 * src/Makefile.am (LDADD): Remove, folding into tar_LDADD. * src/Makefile.am (tar_LDADD), tests/Makefile.am (LDADD): Add the libraries gnulib-tool currently recommends: LIB_ACL, LIB_CLOCK_GETTIME, LIB_GETRANDOM, LIB_HARD_LOCALE, LIB_HAS_ACL, LIB_MBRTOWC, LIB_SETLOCALE_NULL. Otherwise, tar won’t link on AIX 7.1 with xlc because the -lpthread option is missing. 2021-03-08 Paul Eggert Port xattr-at.h to AIX 7.1 * lib/xattr-at.h: Include before testing whether ENOATTR is defined. 2021-03-08 Paul Eggert build: update gnulib submodule to latest 2021-03-01 Sergey Poznyakoff Fix building the online version of the manual. * doc/Makefile.am (GENDOCS): Use the version from the tar repository. (manual): Set the DISTRIN rendition. (manual-rebuild): New goal. * doc/README.manual: New file. Instructions for maintainers on how to update web documentation. * doc/gendocs.sh: A version from gnulib fixed as per https://lists.gnu.org/archive/html/bug-gnulib/2021-03/msg00002.html. * doc/gendocs_template: Updated version from gnulib. * doc/intern.texi: Fix the use of UNREVISED. * doc/tar.texi: Fix the use of GNUTAR. 2021-03-01 Paul Eggert Fix unlikely uninitalized var bug with sparse file * src/sparse.c (sparse_extract_file): Set *SIZE to stat.st_size so that the caller does not use *SIZE when uninitalized. Problem found with GCC 10 and --enable-gcc-warnings CFLAGS='-O2 -flto -fanalyzer'. 2021-03-01 Paul Eggert Pacify --enable-gcc-warnings -flto -fanalyzer With GCC 10.2.1, ‘./configure --enable-gcc-warnings CFLAGS='-O2 -flto -fanalyzer' issued a false alarm about uninitialized variable use. Pacify GCC by using a variant of the code. * src/buffer.c (zip_program): Omit last placeholder entry. (n_zip_programs): New constant. (find_zip_program): Use it instead of placeholder. (first_decompress_program): Set *PSTATE to maximum value if skipping the table. This avoids confusing gcc -flto into thinking *PSTATE is used uninitialized. (next_decompress_program): Simplify now that *PSTATE is maximal when skipping. 2021-03-01 Paul Eggert Pacify clang for unreachable ‘return’ * src/sparse.c (sparse_scan_file_seek): Omit unreachable statement. 2021-03-01 Paul Eggert Pacify clang char conversion * src/create.c (to_chars): Pacify ‘clang’ about assigning 128 to ‘char’. 2021-03-01 Paul Eggert Omit most uses of ‘inline’ With today’s compilers ‘inline’ is typically not needed for performance (at least the way GNU Tar uses it) and it gets in the way of portability. * configure.ac: Omit AC_C_INLINE; no longer needed here. * lib/attr-xattr.in.h (setxattr, lsetxattr, fsetxattr, getxattr) (lgetxattr, fgetxattr, listxattr, llistxattr, flistxattr): * lib/wordsplit.c (skip_delim_internal, skip_delim) (skip_delim_real, exptab_matches): * src/delete.c (flush_file): * src/extract.c (safe_dir_mode): * src/misc.c (ptr_align): Now just static, not static inline. * lib/wordsplit.h (wordsplit_getwords): Remove; no longer used. * src/common.h (name_more_files): Now COMMON_INLINE, not extern inline - which is not portable according to C99, the way we were using it. 2021-03-01 Paul Eggert maint: port better to non-GCC compilers This can be helpful in porting to compilers like Oracle Developer Studio that support some but not all GCC attributes. * lib/wordsplit.c (FALLTHROUGH): Remove; now done by attribute.h. * lib/wordsplit.h (__WORDSPLIT_ATTRIBUTE_FORMAT): Remove; all uses replaced by ATTRIBUTE_FORMAT. * lib/wordsplit.h, src/buffer.c, src/common.h, src/compare.c: * src/sparse.c, src/system.c, src/xheader.c: Prefer ATTRIBUTE_FORMAT, MAYBE_UNUSED, _Noreturn, etc. to __attribute__. 2021-03-01 Paul Eggert Update paxutils from upstream 2021-02-28 Paul Eggert maint: 1.34 announcement update Hand-install 1.34 changes into master. Evidently these changes were not pushed to savannah, before I installed further changes today. 2021-02-28 Paul Eggert maint: port to Fedora 33 Fedora 33 uses GCC 10.2.1, which is a bit pickier. * configure.ac: Do not use -Wsystem-headers, as this runs afoul of netdb.h on Fedora 33. * gnulib.modules: Add ‘attribute’. * lib/wordsplit.c (wsnode_new): Return the newly allocated pointer instead of a boolean, to pacify GCC 10.2.1 which otherwise complains about use of possibly-null pointers. All uses changed. * src/buffer.c (try_new_volume): Don’t assume find_next_block succeeds. (_write_volume_label): Pacify GCC 10.2.1 with an ‘assume’, since LABEL must be nonnull here. * src/common.h (FALLTHROUGH): Remove; now in attribute.h. Include attribute.h, for ATTRIBUTE_NONNULL. * src/misc.c (assign_string_or_null): New function, taking over the old role of assign_string. (assign_string): Assume VALUE is non-null. (assign_null): New function, taking over the old role of assign_string when its VALUE was nonnull. All callers of assign_string changed to use these functions. (assign_string_n): Clear *STRING if VALUE is null, to fix a potential double-free. 2021-02-28 Paul Eggert Update gnulib and paxutils from upstream 2021-02-08 Pavel Raiskup xattrs: fix capabilities root test Related discussion in the Fedora pull-request: https://src.fedoraproject.org/rpms/tar/pull-request/8 * tests/capabs_raw01.at: Newer systems (currently e.g. Fedora 34) print getcap output in format CAP=VAL, not CAP+VAL. 2021-02-08 Sergey Poznyakoff Gracefully handle duplicate symlinks when extracting If the archive being extracted contains multiple copies of the same symlink, extract only the first of them and skip the rest. The use case is described in https://lists.gnu.org/archive/html/bug-tar/2021-01/msg00026.html The bug was introduced by 2d3396c3ea. * src/extract.c (create_placeholder_file): If placeholder already exists and is registered in the delayed_link list, return immediately. 2021-02-04 Sergey Poznyakoff Fix savannah bug #60002 Bug was introduced by commit 34d15af1. * src/extract.c (prepare_to_extract): When extracting over pipe, process only regular files. * tests/extrac24.at: New test case. * tests/Makefile.am: Add new test case. * tests/testsuite.at: Likewise. 2021-01-17 Sergey Poznyakoff Fix memory leak in read_header Bug reported in https://savannah.gnu.org/bugs/?59897 * src/list.c (read_header): Don't return directly from the loop. Instead set the status and break. Return the status. Free next_long_name and next_long_link before returning. 2021-01-17 Sergey Poznyakoff Fix improper argument reference. (bug introduced by 1ff0b63f) * src/tar.c (parse_default_options): Pass args as is to the argp_parse. 2021-01-16 Sergey Poznyakoff Fix regression itroduced by 66162927. * src/misc.c (chdir_arg): Initialize the abspath field to NULL. (tar_getcdpath): Actually initialize the abspath field here. 2021-01-14 Sergey Poznyakoff Fixes in the delete_archive_members function * src/delete.c (delete_archive_members): Clean-up the code. Avoid entering the loop from the middle. Free the memory allocated for current_stat_info. 2021-01-08 Sergey Poznyakoff Use stdopen from gnulib * gnulib.modules: Request stdopen * lib/Makefile.am: Remove stdopen.c and stdopen.h * lib/stdopen.c: Remove. * lib/stdopen.h: Remove. * src/tar.c: stdopen returns 0 on success. 2021-01-08 Sergey Poznyakoff Actually prefer /dev/full over /dev/null as a replacement for stdin * lib/stdopen.c (stdopen): Fix improper condition. Avoid leaking extra file descriptor. * src/tar.c (main): Set name of the stdout for diagnostics. Bail out if stdopen fails. 2021-01-07 Sergey Poznyakoff Version 1.33 * NEWS: Update. * configure.ac: Raise version number. Require automake 1.15 and autoconf 2.64. * gnulib: pull v0.1-4333-g30820c2 * src/names.c: Use hash_remove instead of the deprecated hash_delete. 2021-01-06 Sergey Poznyakoff Update copyright years 2020-07-13 Sergey Poznyakoff Fix typo in the manpage * doc/tar.1: Fix description of the --newer option 2020-07-10 Pavel Raiskup Bugfix --sparse --diff mode Originally reported in: https://bugzilla.redhat.com/show_bug.cgi?id=1853469 * src/sparse.c (check_data_region): Only compare the part of buffer really fed by safe_read(), not whole rdsize. 2020-06-24 Sergey Poznyakoff Accept only position-sensitive (file-selection) options in file list files. Using such options as -f, -z, etc. is senseless in the file list file and bypasses the option consistency checks in decode_options. Therefore, only options related to file selection (a.k.a position-sensitive options) are allowed in files. * doc/tar.texi: Document changes. * src/common.h (tar_args): Move from tar.c (TAR_ARGS_INITIALIZER): New macro. * src/names.c: Declare option group identifiers as an enum. (names_parse_opt): Special handling for ARGP_KEY_ERROR. (names_argp): Remove static qualifier. (names_argp_children): Remove. * src/tar.c: Declare option group identifiers as an enum. (parse_opt): Special handling for ARGP_KEY_INIT. (argp_children): New static variable. (args): Remove static variable. (more_options): Allow only options from names_argp. (parse_default_options): Take a pointer to struct tar_args as argument. Replace the loc member during the call to argp_parse and restore it afterwards. (decode_options): Use automatic variable for args. 2020-06-22 Sergey Poznyakoff Fix the logic of prepare_to_extract. * src/extract.c (prepare_to_extract): Return true to proceed with the extraction, and false to skip the current member. If extracting over a pipe, skip unlinking logic. (extract_archive): Update accordingly. 2020-06-15 Sergey Poznyakoff Make sure link counting works for file names supplied with -T * src/common.h (name_count): Remove extern. (files_count): New enum. (filename_args): New extern. * src/names.c (name_count): Remove. (files_count): New variable. (name_add_name,name_add_file): Update filename_args. * src/create.c (create_archive): Set trivial_link_count depending on the filename_args. 2020-06-10 Alfred M. Szmidt Remove freemanuals.texi * doc/Makefile.am (tar_TEXINFOS): Remove freemanuals.texi. * doc/freemanuals.texi: Delete file. * doc/tar.texi (Free Software Needs Free Documentation): Remove appendix. 2020-06-03 Sergey Poznyakoff Fix typo in docs 2020-06-03 Sergey Poznyakoff Bugfix * src/sparse.c (sparse_diff_file): Fix return value. 2020-05-19 Paul Eggert tar: avoid read overrun Problem reported by Timotej Kapus in: https://lists.gnu.org/r/bug-tar/2020-05/msg00001.html * src/transform.c (parse_transform_expr): Diagnose ‘--transform='s'’ instead of continuing past '\0'. 2020-02-15 Sergey Poznyakoff Fix handling of linked rename chains in incremental backups * src/incremen.c: Change the meaning of the DIRF_RENAMED flag. Now it marks a directory which is the last one in a chain of renames. Regular renamed directories are recognized by their orig member being non-NULL. Directories marked with DIRF_RENAMED start encoding of renames. (procdir): Clear DIRF_RENAMED flag on directories which are origins for renames. (makedumpdir): Use the orig member to check if the directory is a result of a rename. (store_rename): Move the check for DIR_IS_RENAMED to the caller. Don't clear the DIRF_RENAMED, it is not needed any more. * tests/rename06.at: New test. * tests/Makefile.am: Add rename06.at * tests/testsuite.at: Likewise. 2020-02-08 Sergey Poznyakoff Update copyright years 2020-02-08 Sergey Poznyakoff Fix the --no-overwrite-dir option Given this option, tar failed to preserve permissions of empty directories and to create files under directories owned by the current user that did not have the S_IWUSR bit set. * src/extract.c (fd_chmod): Rename to fd_i_chmod. (fd_chmod): New function. (safe_dir_mode): New function. (extract_dir): Special handling for existing directories in --no-overwrite-dir mode. * tests/extrac23.at: New file. * tests/Makefile.am: Add new test case. * tests/testsuite.at: Likewise. 2019-12-03 Sergey Poznyakoff Wildcards in exclude-vcs-ignore mode should not match slash * src/exclist.c (info_attach_exclist): Use the FNM_FILE_NAME flag. 2019-11-27 Sergey Poznyakoff Version 1.32.90 2019-11-25 Sergey Poznyakoff Testsuite fixes * tests/sparse06.at: Skip the test if genfile is unable to create sparse files. * tests/sptrcreat.at: Likewise. * tests/sptrdiff00.at: Likewise. * tests/sptrdiff01.at: Likewise. 2019-11-14 Sergey Poznyakoff Another testsuite fix. * tests/extrac11.at: Skip test if ulimit fails. 2019-11-13 Sergey Poznyakoff Testsuite fix. * tests/remfiles10.at: Don't expect EINVAL when trying to remove CWD. 2019-08-25 Sergey Poznyakoff Consistently use x2realloc for buffer reallocation * src/create.c (create_archive): Use x2realloc * src/names.c (copy_name) (add_hierarchy_to_namelist): Use x2realloc 2019-08-18 Sergey Poznyakoff Fix extraction of symbolic links hardlinked to another symbolic links * src/extract.c (create_placeholder_file): Take additional argument: the delayed_link entry after which to the newly created one. (extract_link): Create a placeholder file if the target link name exists in the delayed_link list. 2019-04-11 Sergey Poznyakoff Fix --delay-directory-restore on archives with reversed member ordering. * src/extract.c (find_direct_ancestor): Remove useless test. (delay_set_stat): If the file name being added is already in the list, update stored data instead of creating a new entry. This works for archives with reversed order of members. * tests/extrac22.at: New testcase. * tests/Makefile.am: Add new testcase. * tests/testsuite.at: Include new testcase. 2019-03-28 Sergey Poznyakoff Minor change * scripts/backup.in: Fix typo Typesetting fixes in the manpage 2019-03-28 Zachary Vance POSIX extended format headers do not include PID by default The intent is to make binary-equivalent PAX archives easy to create. If POSIXLY_CORRECT is set, the POSIX standard default is used, which embeds the pid. * src/common.h (posixly_correct): New global. * src/tar.c (decode_options): Detect the POSIXLY_CORRECT environment variable. * src/buffer.c (add_chunk_header): Change filenames of multipart files to omit the pid. * src/xheader.c (HEADER_TEMPLATE): New macro. (xheader_xhdr_name, xheader_ghdr_name): Use HEADER_TEMPLATE to select the template for the POSIX extended header name. * doc/tar.texi: Document the change. 2019-03-03 Sergey Poznyakoff Check return value from xgetcwd * src/misc.c (chdir_arg,tar_getcdpath): Check for non-NULL return from xgetcwd. The function returns NULL for any error originating from getcwd. 2019-02-23 Sergey Poznyakoff Version 1.32 2019-02-04 Sergey Poznyakoff Minor fixes in docs. * doc/tar.1: Remove description of the --preserve option Document verbosity levels. * doc/tar.texi: Fix description of the -o option. 2019-01-15 Daniel Le Fix typos in the documentation Short option "t" was mistranslated to "--test" instead of "--list" in commit 67cad0792b4e6cf22c6cb1b167b149cd176d49f9. 2019-01-15 Sergey Poznyakoff Fix build on AIX * src/unlink.c (flush_deferred_unlinks): Avoid possible duplicate case (if ENOTEMPTY==EEXIST) 2019-01-15 Sergey Poznyakoff Version 1.31.90 2019-01-14 Sergey Poznyakoff Ensure gnu format when running checkpoint tests 2019-01-14 Sergey Poznyakoff Fix compression tests Existing compression tests used tar with compiled-in defaults. However, some of the defaults are sure to create archives that are not byte-to-byte reproducible (e.g. DEFAULT_ARCHIVE_FORMAT=POSIX, because the name field in posix extended headers uses PID of the creating process by default). Moreover, some compressors (e.g. gzip) store current timestamp in the file header when compressing from stdin, so that using cmp on the two created archives as the tests did is error-prone. Another problem is that the tests implicitly assumed that tar uses archive suffix to recognize its format when extracting, which isn't the case. Finally, there's hardly any reason in using sed to create m4 sources, when everything can be achieved by m4 itself. * tests/Makefile.am: Remove generation of compress-*.at files. * tests/compress.at.in: Remove. * tests/compress.m4: New file. * tests/testsuite.at: Include compress.m4, use TAR_CHECK_COMPRESS to check compression options. 2019-01-14 Sergey Poznyakoff Fix possible NULL dereference (savannah bug #55369) * src/sparse.c (pax_decode_header): Check return from find_next_block. 2019-01-14 Sergey Poznyakoff Fix compilation without iconv. 2019-01-14 Sergey Poznyakoff Fix iconv usage. Patch by Christian Weisgerber. * src/utf8.c (utf8_convert): non-zero return from iconv means failure. 2019-01-14 Pavel Raiskup tests: fix numeric.at for BSD While creating file, BSD kernels inherit the group ownership from parent directory. http://lists.gnu.org/archive/html/bug-tar/2016-06/msg00000.html * tests/numeric.at: Attempt to 'chown' the newly created directory to proper group (at least on affected machines that command is expected to succeed). 2019-01-14 Sergey Poznyakoff Fix typo in manpage. 2019-01-14 Sergey Poznyakoff Fix expected output in dirrem tests. In both tests, the "file changed as we read it" warning might be produced for dir/sub, depending on the ctime resolution and timing. The problem was fixed by 64b43fdf70d82c39eb2ca900cd4f8e49, but regressed after e7cd377f7801d42aa8e07addff93d2150666c237, which removed 1 second delays between each pair of checkpoints. Since the presense or absense of this warning is irrelevant for the test, it is now suppressed. * tests/dirrem01.at: Suppress the file-changed warning. * tests/dirrem02.at: Likewise. 2019-01-12 Sergey Poznyakoff Fix the use of --checkpoint without explicit --checkpoint-action * src/checkpoint.c (checkpoint_finish_compile): Set default action, if necessary. * tests/checkpoint/defaults.at: New testcase. * tests/checkpoint/dot-compat.at: New testcase. * tests/checkpoint/dot-int.at: New testcase. * tests/checkpoint/dot.at: New testcase. * tests/checkpoint/interval.at: New testcase. * tests/Makefile.am: Add new testcases. * tests/testsuite.at Include new testcases. 2019-01-10 Sergey Poznyakoff Remove erroneous abort() call The call was introduced by commit ccef8581. It caused tar to abort on perfectly normal operations, like untarring archives containing ./ with the -U option, See http://lists.gnu.org/archive/html/bug-tar/2019-01/msg00019.html for details. * src/extract.c (maybe_recoverable): Remove misplaced call to abort(). 2019-01-02 Sergey Poznyakoff Version 1.31 2018-12-28 Sergey Poznyakoff Fix the difflink test Hardlinking a symlink produces hardlink on BSD and symlink on GNU/Linux. Avoid the ambiguity. * tests/difflink.at: Create hard link from a regular file. 2018-12-28 Sergey Poznyakoff Work over a bug in gnulib error() The error() function from glibc correctly prefixes each message it prints with program_name as set by set_program_name. However, its replacement from gnulib, which is linked in on systems where this function is not available, prints the name returned by getprogname() instead. Due to this messages output by tar subprocess (which sets its program name to 'tar (child)') become indiscernible from those printed by the main process. In particular, this breaks the remfiles01.at and remfiles02.at test cases. * configure.ac: Define ENABLE_ERROR_PRINT_PROGNAME if using gnulib error(). * src/tar.c [ENABLE_ERROR_PRINT_PROGNAME] (tar_print_progname): New function. (main) [ENABLE_ERROR_PRINT_PROGNAME]: Set error_print_progname. 2018-12-28 Sergey Poznyakoff Implement the "wait" checkpoint action. This action instructs tar to pause until given signal is delivered. The newer genfile tool uses this action for communication between genfile and tar in exec mode. This eliminates race conitions and speeds up the tests based on exec mode. * doc/tar.texi: Document changes. * paxutils: Upgrade. * src/checkpoint.c: Implement the wait action. * src/common.h (decode_signal): New proto. * src/tar.c (decode_signal): New function. (set_stat_signal): Rewrite. * tests/dirrem01.at: Adjust genfile and tar command line arguments to use the new feature. * tests/dirrem02.at: Likewise. * tests/filerem01.at: Likewise. * tests/filerem02.at: Likewise. * tests/grow.at: Likewise. * tests/sptrcreat.at: Likewise. * tests/sptrdiff00.at: Likewise. * tests/sptrdiff01.at: Likewise. * tests/truncate.at: Likewise. 2018-12-27 Sergey Poznyakoff Fix CVE-2018-20482 * NEWS: Update. * src/sparse.c (sparse_dump_region): Handle short read condition. (sparse_extract_region,check_data_region): Fix dumped_size calculation. Handle short read condition. (pax_decode_header): Fix dumped_size calculation. * tests/Makefile.am: Add new testcases. * tests/testsuite.at: Likewise. * tests/sptrcreat.at: New file. * tests/sptrdiff00.at: New file. * tests/sptrdiff01.at: New file. 2018-12-21 Sergey Poznyakoff Disallow modifications to the global pax extended header in update mode. Updating global headers in update mode is not possible, because: 1) If the original archive was not in PAX format, writing the global header would overwrite first member header (and eventually data blocks) in the archive. 2) Otherwise, using the --pax-option can make the updated header occupy more blocks than the original one, which would lead to the same effect as in 1. This also fixes http://lists.gnu.org/archive/html/bug-tar/2018-12/msg00007.html * src/xheader.c (xheader_forbid_global): New function. * src/common.h (xheader_forbid_global): New prototype. * src/update.c (update_archive): Use xheader_forbid_global, instead of trying to write global extended header record. 2018-12-21 Sergey Poznyakoff Bugfix Bug reported in http://lists.gnu.org/archive/html/bug-tar/2018-12/msg00014.html * src/names.c (collect_and_sort_names): Fix iteration over namelist. 2018-12-21 Sergey Poznyakoff Fix semantics of -K used together with explicit member names. This also fixes the bug reported in http://lists.gnu.org/archive/html/bug-tar/2018-12/msg00012.html * src/common.h (starting_file_option): Describe the variable. * src/names.c (add_starting_file): New function. (name_match): Ignore everything before the member indicated by the --starting-file option * src/tar.c: Use add_starting_file to handle the -K option. 2018-12-21 Sergey Poznyakoff Fix error handling when reading incremental snapshots Bug reported in http://lists.gnu.org/archive/html/bug-tar/2018-12/msg00008.html * incremen.c (read_incr_db_01): Don't try to continue after errors. 2018-12-21 Sergey Poznyakoff Reject pax options starting with equals sign Bug reported in http://lists.gnu.org/archive/html/bug-tar/2018-12/msg00010.html * xheader.c (xheader_set_keyword_equal): Bail out if the keyword starts with = 2018-12-21 Sergey Poznyakoff Fix buffer overflow Bug reported in http://lists.gnu.org/archive/html/bug-tar/2018-12/msg00011.html * src/xheader.c (xheader_format_name): fix length calculation 2018-12-21 Sergey Poznyakoff Fix improper memory access Bug reported in http://lists.gnu.org/archive/html/bug-tar/2018-12/msg00009.html * src/transform.c (parse_transform_expr): Check if re is not empty before accessing its last byte. 2018-11-24 Sergey Poznyakoff Fix parsing of ACLs Text returned by acl_to_text can contain comments (introduced by #). Strip comments and horizontal tabs prior to storing ACLs in PAX headers. * src/xattrs.c (xattrs_acls_cleanup): New function. (xattrs__acls_get_a,xattrs__acls_get_d): Use xattrs_acls_cleanup. 2018-11-24 Sergey Poznyakoff Don't try to read past the end of header string fields * src/common.h (assign_string_n): New proto. (ASSIGN_STRING_N): New macro. * src/misc.c (assign_string_n): New function. * gnulib.modules: Add strnlen. * src/buffer.c: Use assign_string_n where appropriate. * src/list.c: Likewise. 2018-11-12 Sergey Poznyakoff Fix verbose ACL listing * src/xattrs.c (acls_one_line): Advance pos. (xattrs_print): Insert a comma between ACL and default ACL if both are non-empty. 2018-10-29 Paul Eggert tar: fix numbered backup bug * src/misc.c (maybe_backup_file): Pass chdir_fd, not AT_FDCWD, to find_backup_file_name. This fixes a bug whereby the wrong backup file name was chosen for numbered backups. 2018-10-29 Paul Eggert * src/tar.c (expand_pax_option): Pacify recent GCC. 2018-10-29 Paul Eggert build: update gnulib submodule to latest * src/misc.c (maybe_backup_file): Adjust to Gnulib change. 2018-08-02 Sergey Poznyakoff Minor fixes in wordsplit.c 2018-08-02 Paul Eggert build: update gnulib submodule to latest 2018-07-31 Sergey Poznyakoff Silence gcc warnings in wordsplit 2018-07-31 Sergey Poznyakoff Fix double-free introduced by 577dc345 * src/utf8.c (utf8_convert): Don't store freed value in *output 2018-07-31 Pavel Raiskup Report race on systems without O_DIRECTORY * src/names.c (collect_and_sort_names): Report ENOTDIR after successful fstat() but !S_ISDIR. 2018-07-31 Pavel Raiskup Avoid some resource leaks * src/incremen.c (store_rename): Free temp_name, leaked before for each renamed directory with --listed-incremental. * src/transform.c (add_literal_segment): Tighten arguments by const. (parse_transform_expr): Free 'str', leaked storage for each --transform option before. * src/utf8.c (utf8_convert): Deallocate buffer for failed iconv() call so callers don't have to. 2018-07-31 Sergey Poznyakoff Sync wordsplit and paxutils with the most recent versions 2018-06-14 Paul Eggert * doc/tar.1: Fix font typo noted by esr. 2018-05-16 Paul Eggert * doc/tar.1: Don't refer to nonexistent tar(5). 2018-04-13 Jim Meyering --one-top-level: avoid a heap-buffer-overflow * NEWS: Mention this. * src/suffix.c (strip_compression_suffix): Fix string comparison guard. Without this change, some ASAN-enabled test runs would fail with the following. Also, strip an additional .tar suffix only if the just- stripped suffix did not match /^\.t/". ==30815==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000002ed at pc 0x00000049d1f4 bp 0x7ffeb5906d50 sp 0x7ffeb5906500 READ of size 1 at 0x6020000002ed thread T0 SCARINESS: 12 (1-byte-read-heap-buffer-overflow) #0 0x49d1f3 in __interceptor_strncmp /j/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:407 #1 0x5670f3 in strip_compression_suffix /j/tar/src/suffix.c:107 #2 0x575788 in decode_options /j/tar/src/tar.c:2545 #3 0x5760c0 in main /j/tar/src/tar.c:2708 #4 0x7f105090df29 in __libc_start_main ../csu/libc-start.c:308 #5 0x408629 in _start (/j/tar/src/tar+0x408629) 0x6020000002ed is located 3 bytes to the left of 6-byte region [0x6020000002f0,0x6020000002f6) allocated by thread T0 here: #0 0x4d0710 in __interceptor_malloc /j/gcc/libsanitizer/asan/asan_malloc_linux.cc:86 #1 0x4908ad in __interceptor_strndup /j/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:326 #2 0x5cbcbd in xstrndup /j/tar/gnu/xstrndup.c:32 #3 0x5a325b in base_name /j/tar/gnu/basename.c:57 #4 0x575772 in decode_options /j/tar/src/tar.c:2544 #5 0x5760c0 in main /j/tar/src/tar.c:2708 #6 0x7f105090df29 in __libc_start_main ../csu/libc-start.c:308 2018-04-07 Andrew Hounsell Tiny fix * doc/snapshot.texi: Fix a typo * scripts/tar-snapshot-edit: Fix a typo 2018-04-07 Jim Meyering tests: avoid test failure with non-ancient autoconf Running "make check" would fail with this: T-nonl.at:30: error: m4_divert_push: cannot change diversion to `GROW' inside m4_expand * tests/T-nonl.at: Use printf in place of AS_ECHO_N. These days, printf should work for everyone. 2018-04-07 Jim Meyering maint: avoid -Wstringop-truncation warnings from upcoming GCC8 * src/create.c (start_private_header, start_header): Convert trivial uses of strncpy to memcpy, to avoid warnings like this: In function 'strncpy', inlined from 'start_private_header' at create.c:522:3: /usr/include/bits/string_fortified.h:106:10: warning: \ '__builtin_strncpy' output truncated before terminating nul \ copying 2 bytes from a string of the same length \ [-Wstringop-truncation] 2018-04-07 Jim Meyering maint: avoid -Wstringop-truncation warnings upcoming GCC8 * src/buffer.c (gnu_add_multi_volume_header): Convert a use of strncpy to memcpy, to avoid this warning: In function 'strncpy', inlined from 'gnu_add_multi_volume_header' at buffer.c:1782:3, ... /usr/include/bits/string_fortified.h:106:10: error: '__builtin_strncpy'\ specified bound 100 equals destination size \ [-Werror=stringop-truncation] 2018-04-07 Jim Meyering maint: avoid warnings from upcoming GCC8 * src/transform.c (_single_transform_name_to_obstack): Mark with FALLTHROUGH statement rather than /* FALL THROUGH */ comment. Only the former works with gcc-8. * src/extract.c (maybe_recoverable): Call abort to tell gcc-8 that this code is unreachable. 2018-04-07 Sergey Poznyakoff Rewrite struct tm formatting * src/list.c (tartime): Use strftime instead of manually formatting fields of the struct tm. This should also suppress some gcc warnings. 2018-04-07 Jim Meyering tests: add coverage for new --zstd and all other compression tools * tests/compress.at.in: New file: template from which each per-compression-tool test is derived. * tests/Makefile.am (TESTSUITE_AT): Add it. (EXTRA_DIST): Add compress.at.in. (compress-*.at): New rules to generate a file/tests for each compression tool. * tests/testsuite.at (Compression): Add each of these generated files in a new section. * tests/.gitignore: Ignore the new generated files. 2018-03-18 Aaron Schrab Fix typo 2018-03-18 Sergey Poznyakoff Version 1.30.90 * NEWS: Update. * configure.ac: Update. * THANKS: Add Adam Borowski. 2018-03-18 Adam Borowski Add support for zstd compression * configure.ac (zstd): Register compression program. * doc/tar.1: Mention --zstd. * doc/tar.texi: Document zstd support. * src/buffer.c: Register zstd compression. * src/suffix.c: Add suffixes zst and tzst. * src/tar.c: New compression option --zstd. 2018-03-18 Pavel Raiskup tests: fix race in dirrem01 and dirrem02 Previously the '--checkpoint-action=echo' was triggered after '--checkpoint-action=sleep=1' - so the order of events *usually* was (for --format='gnu'): ... 1. checkpoint handler before write of 'dir/sub' member 2. one-second delay 3. stderr write: 'tar: Write checkpoint 3' 4. write the member 'dir/sub' into the archive 5. check that the member's ctime has not been changed 6. genfile's detecting 'Write checkpoint', doing unlink ... But sometimes, the genfile was fast enough to win the race and unlinked the directory before the member was written into the archive (IOW, the order was 1-2-3-6-4-5). This led to the occasional warning 'tar: dir/sub: file changed as we read it'. Swap the order of 'sleep=1' and 'echo' actions so the genfile utility has (hopefully) enough time to do the unlink before writing the file into the archive (enforce 1-2-3-6-4-5 order). * tests/dirrem01.at: Swap 'sleep=1' and 'echo' actions. * tests/dirrem02.at: Likewise. 2018-03-13 Sergey Poznyakoff Fix typos in the docs 2018-03-13 Sergey Poznyakoff Provide a way to skip tests that create very large files Define environment variable TARTEST_SKIP_LARGE_FILES=1 in order to skip tests that require lots of disk space. * tests/testsuite.at (AT_SKIP_LARGE_FILES): New macro. * tests/sparse03.at: Mark test with AT_SKIP_LARGE_FILES. * tests/sparse05.at: Likewise. * tests/star/pax-big-10g.at: Likewise. * tests/star/ustar-big-2g.at: Likewise. * tests/star/ustar-big-8g.at: Likewise. 2018-03-13 Sergey Poznyakoff Testsuite bugfix * tests/difflink.at: Define order of files within tested archive. 2018-03-13 Sergey Poznyakoff testsuite: account for absolute file names starting with double slash * tests/incr08.at: Absolute file names can start with // * tests/xform03.at: Likewise. 2017-12-17 Sergey Poznyakoff Version 1.30 * configure.ac: Set version 1.30 * NEWS: Update. 2017-11-20 Paul Eggert Fix "concatenating" typo. Problem reported by Rodrigo Queiro in: https://lists.gnu.org/r/bug-tar/2017-11/msg00021.html * doc/intern.texi (Extensions): Fix typo. 2017-11-18 Paul Eggert Port to gcc -Wimplicit-fallthrough=5 * src/common.h (FALLTHROUGH): New macro, for use with gcc -Wimplicit-fallthrough=5, which is now the default when used with Gnulib after commit 2017-05-16T16:23:52!eggert@cs.ucla.edu and with --enable-gcc-warnings 2017-11-18 Paul Eggert Port to Texinfo 6.4 * doc/tar.texi (Sparse Recovery): Omit ‘.’ from anchor name, as ‘makeinfo’ now complains about it. All uses changed. 2017-11-18 Paul Eggert Document base-256 representation in GNU format Problem reported by Rodrigo Queiro in: https://lists.gnu.org/r/bug-tar/2017-11/msg00018.html * doc/intern.texi (Standard, Extensions): Document base-256 representations. 2017-11-18 Paul Eggert build: update gnulib submodule to latest 2017-11-18 Paul Eggert Fix typo caught by GCC 7.2.1 * lib/wordsplit.c (wordsplit_perror): Add missing "break;". 2017-11-16 Sergey Poznyakoff Update docs * doc/Makefile.am: Add recipes.texi * doc/recipes.texi: New file. * doc/tar.texi: New appendix "Recipes" 2017-11-16 Pavel Raiskup tests: more deterministic xattr07 * tests/xattr07.at: Define order of files within tested archive. 2017-11-16 Sergey Poznyakoff Minor improvements in the docs. 2017-11-16 Sergey Poznyakoff New option --warning=failed-read * NEWS: Document the --warning=failed-read option. * doc/tar.texi: Likewise. * doc/tar.1: Likewise. * src/common.h (WARN_FAILED_READ): New constant. (WARNING_ENABLED): New macro. * src/misc.c (close_diag, open_diag) (read_diag_details, readlink_diag) (savedir_diag, seek_diag_details) (stat_diag): Suppress warnings if WARN_FAILED_READ is set. * src/warning.c (failed-read): New keyword. 2017-11-16 Sergey Poznyakoff Fix docs * doc/tar.texi: Fix description of the argument to --xattrs-exclude and --xattrs-include option. It is a globbing pattern, not a regex. Fix a typo (LZOP) 2017-11-16 Sergey Poznyakoff Fix the --delay-directory-restore option * src/extract.c (find_direct_ancestor): New function. (create_placeholder_file): Set after_links member on delayed_set_stat entries starting from the direct ancestor of the placeholder file. * tests/extrac21.at: New testcase. * tests/testsuite.at: Add extrac21 * tests/Makefile.am: Likewise. * NEWS: Update. 2017-11-09 Sergey Poznyakoff Fix reporting of hardlink mismatch during compare * src/common.h (quote_n_colon): New prototype. * src/misc.c (quote_n_colon): New function. * src/compare.c (report_difference, diff_link): Use quote_n_colon. * tests/difflink.at: New file. * tests/Makefile.am: Add difflink.at * tests/testsuite.at: Likewise. 2017-11-09 Sergey Poznyakoff Fix --verbatim-files-from * src/names.c (read_next_name): Don't unquote name read from the file, if --verbatim-files-from option is in effect. (names_options): improve description of --verbatim-files-from * tests/T-null2.at: Test the change. 2017-11-09 Sergey Poznyakoff Fix typo * doc/tar.texi 2017-09-30 Sergey Poznyakoff Fix the effect of --transform over hard link targets without the --absolute-names * src/create.c (file_count_links): Apply safer_name_suffix to the hard link name prior to transforming it. * tests/xform03.at: New test case. * tests/Makefile.am: Add xform03.at * tests/testsuite.at: Likewise. 2017-08-24 Sergey Poznyakoff Bugfix * src/tar.c (tar_help_filter): Add missing break statement 2017-06-29 Troels Thomsen Fix typo 2017-05-29 Pavel Raiskup Fix non-deterministic archive type detection Due to analysis of partly uninitialized read-ahead buffer (short_read call), we sometimes mistakenly classified very small compressed archives as non-compressed; which in turn caused extraction failure. * src/buffer.c (check_compressed_archive): Don't assume that archives smaller than BLOCKSIZE could be non-compressed, as tar header always has at least one block. 2017-05-29 Jonas Julino Sergey Poznyakoff Fix handling of directories removed during incremental tar run * paxutils: Upgrade * src/create.c (create_archive): Use file_removed_diag instead of calling the corresponding *_diag function directly. * tests/dirrem01.at: New testcase. * tests/dirrem02.at: New testcase. * tests/Makefile.am: Add new tests. * tests/testsuite.at: Likewise. 2017-05-29 Sergey Poznyakoff Fix a bug in multi-volume archive creation. When creating multivolume archives, the bufmap code in buffer.c implicitly assumed that the members are stored in the archive contiguously, ignoring the member (and eventual extended) headers between them. This worked until the member header happened to be at the very beginning of the volume, in which case its length was included in the calculation of the stored size and size left to store. Due to this, the GNUFileParts extended header contained invalid GNU.volume.offset value, and the resulting archive failed to extract properly. This patch also eliminates improper listing of file part headers as regular files, when creating multivolume posix archives with -v. * src/buffer.c (bufmap): New member nblocks. Counts number of blocks of file data written since reset. (bufmap_reset): Reset nblocks to 0. (_flush_write): Update nblocks. When computing offset difference for bufmap_reset, count only data blocks, not headers. (close_archive): Flush archive until all blocks are written. (add_chunk_header): Use simple_finish_header instead of finish_header to avoid listing chunk header as regular file in verbose mode. * tests/multiv10.at: New test case. * tests/Makefile.am: Add new test. * tests/testsuite.at: Add new test. 2017-04-07 Paul Eggert --numeric-owner now affects private headers too Problem reported by Daniel Peebles in: http://lists.gnu.org/archive/html/bug-tar/2017-04/msg00004.html * NEWS: Document this. * src/create.c (write_gnu_long_link): If --numeric-owner, leave the user and group empty in a private header. Cache the names for 0. 2017-02-28 Pavel Raiskup Test and document --keep-directory-symlink * doc/tar.1: Document the option. * tests/extrac20.at: New testcase. * tests/Makefile.am: Mention extrac20. * tests/testsuite.at: Likewise. 2017-02-14 Paul Eggert Fix incompatibility with PGI 16.10 * src/tar.c (options): Fix incompatibility with the C standard, which says that arguments to macro calls cannot contain # directives. 2017-01-02 Sergey Poznyakoff Update copyright years 2016-11-12 Sergey Poznyakoff Fix description of the "escape" quoting style 2016-11-12 Sergey Poznyakoff Better error checking in the backup script. * scripts/backup.in: Check exit code of MT_BEGIN * scripts/backup.sh.in (backup_host): Return meaningful code in case of remote execution. See the comment, though. 2016-11-12 Sergey Poznyakoff Minor documentation fix * doc/tar.texi: Fix example about use of --no-recursion with -T 2016-11-12 Sergey Poznyakoff Fix the --add-file option. * src/common.h (name_more_files): New proto. (files_from_option): Remove. * src/names.c (name_more_files): New file. (names_options): Fix declaration of the add-file option. (names_parse_opt): Handle --add-file. * src/tar.c (struct tar_args): Remove the input_files member. Change all uses: use name_more_files() instead. * tests/Makefile.am: Add new test. * tests/add-file.at: New testcase. * tests/testsuite.at: Add new test. 2016-11-11 Sergey Poznyakoff Add missing files 2016-11-11 Pavel Raiskup don't set xattrs when --skip-old-files is used * src/extract.c (set_xattr): Properly handle maybe_recoverable() output. Throw warnings to not complicate caller. (extract_file): Don't handle set_xattr's error. * tests/xattr07.at: New testcase. * tests/Makefile.am: Mention new testcase. * tests/testsuite.at: Likewise. * THANKS: Dawid. 2016-11-11 Sergey Poznyakoff Minor fix * src/tar.h (tar_stat_info): Change type of real_size_set to bool 2016-11-11 Pavel Raiskup 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-10 Pavel Raiskup * tests/xattr06.at: Test include/exclude during archive/exctract. 2016-11-10 Ian McLeod 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-10-30 Paul Eggert When extracting, skip ".." members * NEWS: Document this. * src/extract.c (extract_archive): Skip members whose names contain "..". 2016-09-26 Sergey Poznyakoff Mark all tests related to -C option with the "chdir" keyword 2016-09-26 Sergey Poznyakoff 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-21 Sergey Poznyakoff 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-05-28 Sergey Poznyakoff Tiny bugfix 2016-05-27 Sergey Poznyakoff 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-16 Sergey Poznyakoff Version 1.29 2016-05-16 Sergey Poznyakoff Minor fix * src/names.c (new_name): rename to make_file_name. All uses changed. 2016-04-14 Sergey Poznyakoff 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-06 Sergey Poznyakoff 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-05 Pavel Raiskup 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-03-24 Sergey Poznyakoff Remove --preserve option * src/tar.c: Remove --preserve option * NEWS: Update. * doc/tar.texi: Update. 2016-03-24 Sergey Poznyakoff Fix testcase * tests/time02.at: Sort tar -d output 2016-03-24 Sergey Poznyakoff Update THANKS file 2016-03-24 Jeremy Bobbio 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 for more information. Patch submitted by Jeremy Bobbio and Daniel Kahn Gillmor * 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-21 Sergey Poznyakoff Acknowledgments * THANKS: Add Dagobert Michelsen 2016-03-21 Sergey Poznyakoff 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 Sergey Poznyakoff Fix ckmtime * gnulib.modules: Use timespec-sub * tests/ckmtime.c: Use second resolution. 2016-03-20 Sergey Poznyakoff 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-18 Sergey Poznyakoff 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 Sergey Poznyakoff Revise docs 2016-03-18 Sergey Poznyakoff Fix build with --enable-gcc-warnings * configure.ac: Disable stack-protector warnings 2016-03-17 Sergey Poznyakoff Improve testsuite * tests/iotty.at: Skip test if ttyemu can't do its job 2016-03-16 Sergey Poznyakoff Document xattrs, ACL and SELinux-related options. * doc/tar.1: Document all options. * doc/tar.texi: Likewise. 2016-03-15 Sergey Poznyakoff 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-14 Sergey Poznyakoff Fix coredump on parsing invalid traditional option * src/tar.c (find_argp_option): Fix loop termination condition. 2016-01-20 Sergey Poznyakoff Update copyright years 2016-01-20 Sergey Poznyakoff 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. 2015-12-17 Sergey Poznyakoff Fix eventual dereference of uninitialized pointer. * src/exclist.c (hg_initfn): Initialize hgopt. 2015-12-17 Pavel Raiskup sparse: fix use of indeterminate value * src/xheader.c (sparse_map_decoder): Move 'e' up from loop-block. 2015-12-11 Sergey Poznyakoff fix a typo * doc/tar.texi (Incremental Dumps): Add missing --file to the '--list' example. 2015-12-11 Sergey Poznyakoff 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 Sergey Poznyakoff Minor fix 2015-12-11 Sergey Poznyakoff 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) : Change type. : 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-10 Pavel Raiskup 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-06 Pavel Raiskup 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 Sergey Poznyakoff 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 Sergey Poznyakoff Fix NEWS 2015-12-06 Pavel Raiskup 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 Sergey Poznyakoff 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-05 Sergey Poznyakoff 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 Sergey Poznyakoff Upgrade paxutils 2015-11-29 Sergey Poznyakoff 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-21 Sergey Poznyakoff 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-11 Sergey Poznyakoff 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-10 Sergey Poznyakoff 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-02 Sergey Poznyakoff Use sort in T-dir tests. 2015-11-02 Sergey Poznyakoff Fix distclean in tests/ * tests/Makefile.am: Remove "download" 2015-11-02 Sergey Poznyakoff New options: --owner-map and --group-map. * NEWS: Update. * doc/tar.1: Document --owner-map and --group-map * doc/tar.texi: Likewise. * src/map.c: New file. * src/Makefile.am: Add map.c * src/common.h (owner_map_read, owner_map_translate) (group_map_read, group_map_translate): New protos. * src/create.c (start_header): Use owner_map_translate and group_map_translate to optionally translate user/group names/ids. * src/tar.c: New options --owner-map and --group-map. * tests/map.at: New file. * tests/Makefile.am: Add map.at * tests/testsuite.at: Include map.at. 2015-09-24 Kir Kolyshkin (tiny change) doc: fix font and spelling typos * doc/tar.1: Fix font and spelling typos in man page. 2015-09-24 Paul Eggert Fix problems caught by static checking Most of these can be caught by configuring with --enable-gcc-warnings. Problem reported by Pavel Raiskup in: http://lists.gnu.org/archive/html/bug-tar/2015-09/msg00001.html * src/buffer.c (format_total_stats): Prefer pointer to const when it’s OK to use const. (default_total_format): Now const. * src/buffer.c (default_total_format): * src/exclist.c (excfile_head, excfile_tail, vcs_ignore_files): * src/misc.c (namebuf_add_dir, namebuf_finish): * src/tar.c (verbatim_files_from_option, option_set_in_cl) (optloc_eq, set_old_files_option): Now static. * src/common.h: Adjust to match the other changes described here. * src/exclist.c (info_cleanup_exclist): * src/tar.c (argp_program_version, argp_program_bug_address): Remove; unused. (parse_default_options): Define via prototype instead of old style. (parse_default_options, decode_options): Fill out incomplete initializers. 2015-08-31 Sergey Poznyakoff Improve option sanity checking Any two conflicting options are reported only if they both occur in the command line. Otherwise, options defined in the command line silently override those set in the TAR_OPTIONS environment variable. * src/common.h (option_source): New enum. (option_locus): New struct. * src/names.c (name_elt): New member: line. (name_add_file): Initialize line. (read_name_from_file): Keep track of input line number for diagnostic purposes. (handle_option): Take a pointer to struct name_elt as 2nd parameter; pass locus info to more_options(). * src/tar.c (tar_args): New member: loc. (option_class): New enum. (optloc_save,optloc_lookup) (option_set_in_cl,optloc_eq): New functions. (set_use_compress_program_option): Take into account option location. (set_old_files_option): New function. (parse_opt): Keep track of option locations. (more_options): Improve error reporting. (parse_default_options): New function. (decode_options): Parse TAR_OPTION and command line separately. Options from the latter silently override those from the former. * lib/prepargs.c: Remove. * lib/prepargs.h: Remove. * lib/Makefile.am: Update. 2015-08-24 Sergey Poznyakoff Improve check-full * tests/atlocal.in: Download external archives to $abs_builddir/download. (tarball_prereq): Create destination directory if necessary. * tests/.gitignore: Add download 2015-08-24 Sergey Poznyakoff Fix check-full * tests/atlocal.in (TAR_DATA_URL): Berlios is dead. Get test archives from gnu.org.ua 2015-08-24 Sergey Poznyakoff Include gnulib and paxutils as submodules. * .gitmodules: New file. * README-alpha: Update. * README-hacking: Update. * bootstrap: Install slightly modified version from the gnulib repo. * bootstrap.conf: Add paxutils-related stuff. * .gitignore: Update. * doc/.gitignore: Update. * po/.gitignore: Update. * gnu/Makefile.am 2015-08-24 Sergey Poznyakoff Update docs. * doc/tar.1: Document --verbatim-files-from option. 2015-08-20 Sergey Poznyakoff Add missing VCS files to --exclude-vcs list * src/tar.c (vcs_file_table): Add .gitmodules and .gitattributes * doc/tar.texi: Update. 2015-08-03 Sergey Poznyakoff Options to control option handling in file lists. The --verbatim-files-from option disables option handling in file lists. The --no-verbatim-files-from reverts its effect. The --null option implies --verbatim-files-from. This restores the documented behavior, broken by 26538c9b. * src/common.h (verbatim_files_from_option): New global. * src/names.c (name_elt): New member: file.verbatim (name_add_file): Take 'verbatim' state as its third parameter. (read_next_name): Don't call handle_option if file.verbatim is set. * src/tar.c: New options --verbatim-files-from and --no-verbatim-files-from. * doc/tar.texi: Document --verbatim-files-from and --no-verbatim-files-from options. * NEWS: Update. * configure.ac: Version 1.28.90 * tests/T-null2.at: New testcase. * tests/Makefile.am: Update. * tests/testsuite.at: Update. 2015-07-25 Anders Jonsson (tiny change) Fix typos (preceeded etc.) 2015-07-13 Paul Eggert tar: fix symlink race and symlink transform bug Problem reported by Tobias Stoeckmann in: http://lists.gnu.org/archive/html/bug-tar/2015-07/msg00004.html * gnulib.modules: Add areadlinkat-with-size. * src/create.c: Include areadlink.h. (dump_file0): Use areadlinkat_with_size, rather than trying to do it by hand, incorrectly. This also avoids assumption that the symlink contents fit on the stack. Also, use the transformed link name, not the original link name, when deciding whether the name is long enough to require writing a long link. 2015-07-13 Paul Eggert tar: port -d to longer symlinks * src/compare.c (diff_symlink): Don't use alloca on symlink length; it might be too big for the stack. Don't assume that readlinkat's return value fits in 'int'. Prefer memcmp to strncmp where either will do. 2015-07-13 Paul Eggert tar: port to recent gnulib * gnulib.modules: Remove 'acl' and add 'file-has-acl'. 2015-07-13 Paul Eggert tar: pacify GCC 5.1 -Wformat-signedness * lib/wordsplit.c (struct wordsplit_node.flags): Now unsigned, so that 'printf ("%x", p->flags)' doesn't provoke GCC. * src/incremen.c (read_num, dumpdir_ok): Don't printf an int with %x or %o. 2015-04-16 Sergey Poznyakoff Fix extraction from concatenated incremental archives. * src/common.h (remove_delayed_set_stat): New proto. * src/extract.c (free_delayed_set_stat) (remove_delayed_set_stat): New function. (apply_nonancestor_delayed_set_stat): Use free_delayed_set_stat. * src/misc.c (safer_rmdir): Remove delayed_set_stat entry corresponding to the removed directory. * tests/incr10.at: New test case. * tests/Makefile.am: Add new test. * tests/testsuite.at: Likewise. 2015-04-10 Sergey Poznyakoff Fix make installcheck Make installcheck would fail unless make check had been run before it. Reported by Erik Brangs * tests/Makefile.am (installcheck-local): Depend on $(check_PROGRAMS) 2015-03-18 Paul Eggert tar: don't assume GZIP * Makefile.am (dist-hook): Port to gzip implementations that warn about nontrivial settings in the GZIP environment var. 2015-03-17 Paul Eggert tar: don't suggest GZIP * doc/tar.texi (gzip): Don't suggest using the GZIP environment variable, as it will be deprecated in the next gzip release. 2015-02-19 Sergey Poznyakoff Improve compression format recognition Some comressed archives can pass the checksum test, which makes tar treat them as uncompressed archives. * src/buffer.c (check_compressed_archive): Test the checksum only if the block we read looks like a valid tar header (i.e. has a magic string). 2015-01-06 Paul Eggert tar: port xattr-at.c to Solaris 10 * lib/xattr-at.c (setxattrat, lsetxattrat, getxattrat, lgetxattrat) (listxattrat, llistxattrat): Compile only if HAVE_XATTRS, so that the code doesn't call functions that are not declared. 2015-01-06 Paul Eggert tar: port wordsplit attribute to Sun C Reported by Ted Carr in: http://lists.gnu.org/archive/html/bug-tar/2015-01/msg00002.html * lib/wordsplit.h (__WORDSPLIT_ATTRIBUTE_FORMAT): New macro, taken from Gnulib. (struct wordsplit): Use it. * lib/wordsplit.c (_wsplt_error): Use it. 2014-12-17 Sergey Poznyakoff Silent a cc warning * src/xheader.c (xheader_string_end): Make sure pointer arithmetics applies on char*. 2014-12-12 Paul Eggert tar: port ISFOUND, WASFOUND to C89 Problem reported by Romano Maspero in: http://lists.gnu.org/archive/html/bug-tar/2014-12/msg00010.html * src/common.h (ISFOUND, WASFOUND): Port to C89. 2014-12-10 Sergey Poznyakoff Fix tar -c -l file file When the same file is added several times to the archive, count correctly the number of hard links. See also 37ddfb0b. * src/create.c (dump_hard_link): Don't decrease nlink if it is 0. * tests/link04.at: Test -cl options. 2014-11-07 Sergey Poznyakoff Honor the pax-option overrides when creating archive. Changes proposed by Denis Excoffier. * NEWS: Fix typos. * doc/tar.texi: Fix typos. Improve recipe for creation of binary equivalent archives. * src/create.c (write_extended): Use the value of the --mtime option (if specified) as the default for exthdr.mtime. * src/xheader.c (xheader_store): Create the header if at least one override is supplied in --pax-option. 2014-11-07 Sergey Poznyakoff Add testcase for the previous commit. * tests/sparse05.at: New file. * tests/Makefile.am: Add sparse05.at * tests/testsuite.at: Include sparse05.at 2014-11-07 Pavel Raiskup Fix bug in sparse file listing List posix archives containing sparse files >8GB correctly and do not fail. This fixes also bug in format of listing for sparse files >8GB - now the real size is printed instead of the effective one (this is not strictly posix format related). * src/list.c: Remove redundant assignment. * src/tar.h: Add new 'real_size' and 'real_size_set' fields in tar_stat_info struct. * src/xheader.c: Correctly handle (especially sparse) file sizes directly in xheader_decode(). 2014-10-15 Sergey Poznyakoff Fix a typo 2014-10-01 Sergey Poznyakoff Fix README Remove the reference to PORTS 2014-09-25 Sergey Poznyakoff Bugfixes. * doc/tar.1: Fix typo in font spec. * src/tar.c (sort_mode_arg, sort_mode_flag): Protect "inode" (SAVEDIR_SORT_INODE) with D_INO_IN_DIRENT 2014-09-18 Sergey Poznyakoff Bugfix: entries read from the -T file did not get proper matching_flag. * src/common.h (name_add_file): Change signature. * src/names.c (name_elt_alloc_matflags): New function. (name_add_name): Use name_elt_alloc_matflags. (name_add_file): Take matching flags as third argument. (read_next_name): Remove trailing slashes. * src/tar.c (parse_opt): Pass matching_flags to name_add_file. * tests/T-dir00.at: New file. * tests/T-dir01.at: New file. * tests/Makefile.am: Add new testcases. * tests/testsuite.at: Likewise. 2014-08-16 Sergey Poznyakoff Improve documentation. * doc/tar.1: Document --skip-old-files and --warning=existing-file * doc/tar.texi: Document --warning=existing-file 2014-07-27 Sergey Poznyakoff Version 1.28 2014-07-27 Nathan Stratton Treadway Minor change in docstrings. nor ch# Restructure the remfiles testsuite. 2014-07-22 Sergey Poznyakoff Don't build ttyemu and run tty I/O test if grantpt is not available. * configure.ac (TAR_COND_GRANTPT): Define conditional depending on whether grantpt is available. * gnulib.modules: Remove grantpt. It relies upon a helper binary pt_chown which it installs and which is useless in the testsuite. * tests/Makefile.am [TAR_COND_GRANTPT]: Build ttyemu * tests/iotty.at: Skip test if ttyemu is not build. * tests/ttyemu.c (noecho): Fix error message (main): Use TIOCSCTTY if it is defined. 2014-07-22 Benno Schulenberg Fix a typo and some wordings in the documentation. * doc/tar.texi: Fix some missing articles, and make it clearer that "any" does not mean "anything" but "either of the two". 2014-07-22 Nathan Stratton Treadway Fix the testsuite * tests/incr07.at: Don't assume case-sensitive filesystem. 2014-07-11 Paul Eggert tar: minor fixups related to recent checkpoint.c change * src/checkpoint.c (getwidth, format_checkpoint_string): Use long and strtol, not int, to avoid overflow issues. (getwidth): Don't assume termios.h defines TIOCGWINSZ, as it doesn't on some older hosts. 2014-07-11 Sergey Poznyakoff Bugfixes * gnulib.modules: Add faccessat * src/checkpoint.c: Include termios.h 2014-06-29 Nathan Stratton Treadway tar: document xgetcwd test case better * src/misc.c (normalize_filename): Add commentary for clarity. * tests/extrac09.at: Retitle test case and add comments for clarity. 2014-06-24 Sergey Poznyakoff Fix typos in ChangeLog * ChangeLog.CVS: Fix typos. * ChangeLog.amend: New file. * Makefile.am: Define changelog_amend_file. 2014-04-30 Paul Eggert tar: do not dereference NULL pointer with '--remove-files .' Problem reported by Thorsten Hirsch in: http://lists.gnu.org/archive/html/bug-tar/2014-04/msg00011.html * src/unlink.c (flush_deferred_unlinks): Do not attempt to find the parent of "." when "." is at the top level. * tests/remfiles10.at: New file. * tests/Makefile.am (TESTSUITE_AT): * tests/testsuite.at: Add it. 2014-03-27 Sergey Poznyakoff Refuse to write archive contents to a tty. * NEWS: Update. * src/buffer.c (_open_archive): Refuse to write to a tty. * tests/iotty.at: Test output to a tty. 2014-03-26 Vitezslav Cizek fix an eternal loop in handle_option * src/names.c (handle_option): increment loop counter 2014-03-20 Sergey Poznyakoff Fail if archive comes from a terminal. Based on patch from Pavel Raiskup . * gnulib.modules: Add new modules. * src/buffer.c (_open_archive): Refuse to read archive from a tty. * tests/Makefile.am (TESTSUITE_AT): Add iotty.at (check_PROGRAMS): New program ttyemu * tests/testsuite.at: Include iotty.at * tests/iotty.at: New file. * tests/ttyemu.c: New file. 2014-03-13 Paul Eggert tar: port to Solaris 9 Problem reported by Jesse C in: http://lists.gnu.org/archive/html/bug-tar/2014-03/msg00034.html * gnulib.modules: Add strtoimax and strtoumax, since tar invokes these functions directly and they don't exist on Solaris 9. 2014-02-25 Sergey Poznyakoff Test the --[no-]recursive options (see commit 2bd9c153). * tests/recurs02.at: New test case. * tests/Makefile.am: Add new file. * tests/testsuite.at: Add new file. 2014-02-22 Sergey Poznyakoff Support exclusion patterns from various VCS ignore lists. * src/Makefile.am (tar_SOURCES): Add exclist.c * src/common.h (EXCL_DEFAULT, EXCL_RECURSIVE) (EXCL_NON_RECURSIVE): New flags. (excfile_add, info_attach_exclist) (info_cleanup_exclist,info_free_exclist) (exclude_vcs_ignores): New prototypes. * src/create.c (dump_dir0): Call info_attach_exclist. * src/exclist.c: New file. * src/incremen.c (scan_directory): Call info_attach_exclist. * src/names.c (excluded_name): Moved to exclist.c. Change signature. All uses updated. * src/tar.c: New options: --exclude-ignore, --exclude-ignore-recursive and --exclude-vcs-ignores. (tar_stat_destroy): Free exclist. * src/tar.h (tar_stat_info): New member exclude_list. * NEWS: Document new exclusion options. * doc/tar.texi: Likewise. * doc/tar.1: Likewise. 2014-02-14 Sergey Poznyakoff Fix in testsuite * acls03.at: Fix improper invocation of setfacl. 2014-02-14 Pavel Raiskup testsuite: add test for buggy default ACLs * tests/Makefile.am: Mention acls03.at. * tests/testsuite.at: Likewise. * tests/acls03.at: New testcase. 2014-02-14 Pavel Raiskup acls: bugfix for default ACLs extraction When --acls option is on (regardless of tarball contents or tarball format), we should explicitly set OR delete default ACLs for extracted directories. Prior to this update, we always created arbitrary default ACLs based standard file permissions. * configure.ac (with_posix_acls): Check also for acl_free and acl_delete_def_file to mark IEEE 1003.1e ACLs as supported. * src/xattrs.c (acl_delete_def_file_at): New function. (xattrs__acls_set): Do not treat acls_option at all; Delete default ACLs if appropriate. References: http://www.mail-archive.com/bug-tar@gnu.org/msg04355.html Thanks: Juan J. Martínez and Mark Steinborn 2014-02-14 Pavel Raiskup tar: imply --xattrs when --xattrs-{inc,exc}lude used Options --xattrs-include=MASK and --xattrs-exclude=MASK now turn on the --xattrs option. Fix also bug in printing in xattrs.c - don't print when option is negative. * src/tar.c (set_xattr_option): New static function. (parse_opt): Call new function when --xatrrs, --xattrs-include or --xattrs-exclude option is used. * src/xattrs.c (xattrs_print, xattrs_print_char): Expect positive values in options. 2014-02-14 Sergey Poznyakoff THANKS: Add Anthony G. Basile. 2014-02-14 Sergey Poznyakoff Use correct headers/libraries when providing xattr support See https://savannah.gnu.org/patch/index.php?8252. Patch provided by Anthony G. Basile. * acinclude.m4 (TAR_HEADERS_ATTR_XATTR_H): Look for first and then for . Link against libattr.so if needed. * lib/xattr-at.h: Include sys/xattr.h or attr/xattr.h, depending on which one is detected. * src/Makefile.am [TAR_LIB_ATTR] (tar_LDADD): Link against -lattr. 2014-02-14 Sergey Poznyakoff Minor change * src/tar.c (decode_options): Silently ignore --one-top-level if used with a non-reading command. 2014-02-14 Sergey Poznyakoff New option --sort=ORDER This option makes tar sort the entries of directories that will be added to an archive according to ORDER (none, name, or inode). Based on proposition by Dick Streefland (https://savannah.gnu.org/patch/?7892). * src/common.h (savedir_sort_order): New global. * src/create.c: Pass savedir_sort_order to streamsavedir. * src/misc.c: Likewise. * src/tar.c: New option --sort. * NEWS: Update. * doc/tar.texi: Document the --sort option. * doc/tar.1: Likewise. 2014-02-13 Sergey Poznyakoff Fix the testsuite * tests/opcomp01.at: Update expected error messages. * tests/opcomp03.at: Likewise. 2014-02-13 Sergey Poznyakoff Fix --one-top-level used together with --list. * src/extract.c: Move one_top_level stuff to tar.c (decode_options). * src/tar.c (option_conflict_error): New function. (decode_options): Use option_conflict_error to complain about conflicting options in a uniform manner. Process one_top_level options here. (request_stdin): Fix error message. * tests/onetop04.at: New testcase: check --one-top-level with --list. * tests/Makefile.am: Add new testcase. * tests/testsuite.at: Add new testcase. 2014-02-13 Sergey Poznyakoff Fix NEWS * NEWS: Remove duplicate description of the --one-top-level option. 2014-02-12 Sergey Poznyakoff configure.ac: look for host-prefixed ar See https://savannah.gnu.org/patch/?8183 2014-02-10 Sergey Poznyakoff Bugfix * src/suffix.c (find_compression_suffix): Fix eventual coredump. 2014-02-10 Sergey Poznyakoff Fix docs. 2014-02-10 Sergey Poznyakoff Update docs. * NEWS: Document --one-top-level * THANKS: Mention Connor Behan 2014-01-30 Sergey Poznyakoff Update copyright years. 2014-01-28 Sergey Poznyakoff Improve one-top-level functionality Make sure the changes become visible with --show-transformed-names. * src/common.h (strip_compression_suffix): New function. (one_top_level): Rename to one_top_level_dir. All uses changed. * src/extract.c (extr_init): Use strip_compression_suffix. Bail out if unable to determine top-level directory. (maybe_prepend_name): Remove. All uses removed. * src/tar.c (options): --one-top-level takes optional argument. (parse_opt): Handle it. * src/list.c (enforce_one_top_level): New function. (transform_stat_info): Call enforce_one_top_level if required. * src/suffix.c (compression_suffixes): List "tar" (no compression); terminate with NULL entry. (find_compression_suffix): New static. (strip_compression_suffix): New function. * doc/tar.1: Update. * doc/tar.texi: Update. * tests/onetop01.at: New testcase. * tests/onetop02.at: New testcase. * tests/onetop03.at: New testcase. * tests/Makefile.am: Add new testcases. * tests/testsuite.at: Likewise. 2014-01-27 Connor Behan Detect tarbombs while extracting * src/common.h (one_top_level_option): New global. (one_top_level): New global. * src/extract.c (extr_init): If one_top_level_option is set, determine the name one_top_level that might have to be prepended. (extract_archive): If one_top_level_option is set, prepend one_top_level to all names that don't already start with it. * src/tar.c (ONE_TOP_LEVEL_OPTION): New content. (options): New option --one-top-level. (parse_opt): Handle this option. (decode_options): Make it conflict with --absolute-names. 2014-01-27 Sergey Poznyakoff Don't install rmt.8 if rmt is not built. * doc/Makefile.am [PU_RMT_COND]: Define RMT_8 (dist_man_MANS): use RMT_8 instead of the hardcoded rmt.8 2014-01-27 Sergey Poznyakoff Provide tar(1) and rmt(8) manpages. * NEWS: Update. * doc/Makefile.am: Add manpages. * doc/tar.1: New file. * src/tar.c (tar_help_filter): Handle LZOP_OPTION. 2014-01-23 Sergey Poznyakoff Make sure transformed file names retain trailing slash in listing. * src/list.c (simple_print_header): Print trailing slash if using the transformed name. Use had_trailing_slash instead of analyzing last byte if temp_name 2014-01-22 Sergey Poznyakoff checkpoint actions: further improvements. * NEWS: Update. * doc/tar.texi: Update. * src/buffer.c (print_stats): Avoid use of additional string buffer. Allow for text to be NULL. Call gettext if it is not. (format_total_stats): Don't use gettext when calling print_stats. * src/checkpoint.c (def_format): Change default format. (format_checkpoint_string): Implement optional arguments for T conversion. (finish_checkpoint_actions): Rename to checkpoint_flush_actions, make extern. All uses changed. * src/common.h (checkpoint_flush_actions): New proto. * src/tar.c (main): Set error_hook 2014-01-22 Sergey Poznyakoff Improve checkpoint interface. * src/buffer.c (format_total_stats): The format arg is const All uses updated. (default_total_format): const * src/checkpoint.c (tty, tty_cleanup): New static. (format_checkpoint_string): New "canned" format %c (checkpoint_finish): New function. * src/common.h (checkpoint_finish): New proto. * src/tar.c (main): Call checkpoint_finish.` 2014-01-21 Sergey Poznyakoff Implement statistics display in checkpoint actions. * NEWS: Update. * configure.ac: Version 1.27.90 * gnulib.modules: Add fprintftime. * doc/tar.texi: Document the "totals" action and new format specifiers for echo and ttyout checkpoint actions. * src/buffer.c (compute_duration): Return computed value. (print_stats): Don't print trailing newline. Return number of characters output. (format_total_stats): New function. (print_total_stats): Rewrite via format_total_stats. * src/checkpoint.c (checkpoint_opcode) : New opcode. (checkpoint_compile_action): Handle cop_totals. (expand_checkpoint_string): Remove. (format_checkpoint_string): New function to be used instead of expand_checkpoint_string. All callers updated. * src/common.h (TF_READ,TF_WRITE) (TF_DELETED): New constants. (format_total_stats,print_total_stats): New protos. 2014-01-10 Sergey Poznyakoff Remove shar archives from distribution. These are going to phase out in automake 2.0 2014-01-10 Sergey Poznyakoff Fix the use of --no-recursion and --recursion options. Each option remains in effect until cancelled by the next occurrence of its counterpart, as stated in the documentation. * src/names.c (name_next_elt): Restore recursion_option from the value of matching_flags. 2014-01-09 Sergey Poznyakoff Minor bugfixes * src/compare.c (diff_dumpdir): Close descriptor if fstat failed. (diff_multivol): Make sure the descriptor is closed and eventual errors reported if lseek fails. Both reported by Jiri Kukacka. 2014-01-07 Paul Eggert tar: work around IBM XL C bug * src/incremen.c (show_snapshot_field_ranges) (write_directory_file_entry): Use simpler array size expression, one that evaluates to the same value. This works around a compiler bug with IBM XL C. Problem reported by Yannick Bergeron in . 2014-01-03 Paul Eggert tar: update ancient configure cruft * configure.ac: Use AC_PROG_CC_STDC, not just AC_PROG_CC. Remove obsolete macros AC_ISC_POSIX, AC_HEADER_SYS_WAIT, AC_HEADER_DIRENT, AC_HEADER_STAT, AC_HEADER_STDC, AC_TYPE_SIGNAL, AC_TYPE_SIZE_T. * lib/prepargs.c (IN_CTYPE_DOMAIN): Remove. All uses removed. * src/list.c (from_header): Use isspace, not ISSPACE. * src/system.c (pipe_handler, sys_exec_info_script): * src/tar.c (sigstat): Use void, not RETSIGTYPE. 2013-11-17 Sergey Poznyakoff Version 1.27.1 2013-11-17 Sergey Poznyakoff Fix star compatibility (sparse headers) * src/sparse.c (star_get_sparse_info): Update file->dumped_size 2013-11-17 Sergey Poznyakoff Fix GNU long link header. * src/create.c (write_gnu_long_link): Set timestamp to 0 for backward compatibility. Bug reported by David Barri. * THANKS: Update. 2013-11-17 Sergey Poznyakoff Fix unquoting of input file names. * src/names.c (read_next_name): Unquote file names coming from the -T argument. Bug reported by Nicolas Dudebout. * THANKS: Update. 2013-10-24 Paul Eggert build: fix bug where 'configure --with-posix-acls' disables ACLs Reported by Lars Wendler in . * configure.ac (with_posix_acls): Fix typo. 2013-10-23 Paul Eggert Fix core dump on Solaris 10 when "." isn't readable. Reported by Peter Kruse in . This doesn't fix all the Solaris 10 test failures, just the core dump. * src/common.h, src/misc.c (tar_getcdpath): Now static. * src/misc.c (normalize_filename): Report a fatal error if cdpath is null, since we don't know the absolute name of the working directory in that case. FIXME: there should be no need to know absolute file names. (chdir_arg): Simplify wd allocation. Don't assume that xgetcwd returns non-null. 2013-10-06 Sergey Poznyakoff Version 1.27 * NEWS: Update. * configure.ac: Update. 2013-10-06 Sergey Poznyakoff Minor fixes. * src/names.c: Include argp.h * tests/testsuite.at (AT_XATTRS_UTILS_PREREQ) (AT_SELINUX_UTILS_PREREQ,AT_ACLS_UTILS_PREREQ) (AT_CAPABILITIES_UTILS_PREREQ) (AT_XATTRS_PREREQ,AT_SELINUX_PREREQ) (AT_ACLS_PREREQ): Use POSIX-compatible syntax for mktemp. * tests/incr08.at: Fix find usage. 2013-10-05 Sergey Poznyakoff Xfail the remfiles09b test. * tests/remfiles09b.at: Turn into expected failure. 2013-10-05 Nathan Stratton Treadway Tiny change * scripts/tar-snapshot-edit: Mention --show-snapshot-field-ranges option 2013-10-05 Pavel Raiskup Tiny change * configure.ac (RSH): Define as AC_ARG_VAR. 2013-10-05 Sergey Poznyakoff Fix namespace contamination in testsuite. * tests/append01.at: Use m4_pushdef/m4_popdef to define local macros. * tests/delete03.at: Likewise. * tests/exclude06.at: Likewise. * tests/incr04.at: Likewise. * tests/link03.at: Likewise. * tests/long01.at: Likewise. * tests/longv7.at: Likewise. * tests/lustar01.at: Likewise. * tests/lustar02.at: Likewise. * tests/lustar03.at: Likewise. * tests/multiv05.at: Likewise. * tests/sparse04.at: Likewise. 2013-10-05 Nathan Stratton Treadway Provide comprehensive testcases for various file removal modes. * tests/Makefile.am: Add new testcases. * tests/testsuite.at: Likewise. * tests/incr09.at: Add description. * tests/remfiles04a.at: New file. * tests/remfiles05.at: Rename to ... * tests/remfiles04b.at: ... this. * tests/remfiles04.at: Rename to ... * tests/remfiles04c.at: ... this. * tests/remfiles05a.at: New file. * tests/remfiles05b.at: New file. * tests/remfiles06.at: Rename to ... * tests/remfiles05c.at: ... this. * tests/remfiles06a.at: New file. * tests/remfiles06b.at: New file. * tests/remfiles06c.at: New file. * tests/remfiles07a.at: New file. * tests/remfiles07b.at: New file. * tests/remfiles07c.at: New file. * tests/remfiles08a.at: New file. * tests/remfiles08b.at: New file. * tests/remfiles08c.at: New file. * tests/remfiles08.at: Rename to ... * tests/remfiles09a.at: ... this. * tests/remfiles09b.at: New file. * tests/remfiles07.at: Rename to ... * tests/remfiles09c.at: ... this. 2013-10-03 Sergey Poznyakoff Tiny changes. * src/misc.c: Fix comments, rename wd.cwd to wd.abspath (Nathan Stratton Treadway); * src/tar.c (options): Reword description of the --starting-file and --preserve-order options. (decode_options): Both --starting-file and --preserve-order have meaning only when used together with an archive reading command. (Pavel Raiskup). 2013-10-01 Sergey Poznyakoff Revamp tar_getcwd/normalize_filename stuff. The changes are based on the discussion with Nathan. * src/common.h (normalize_filename): Take two arguments. All callers updated. (tar_getcwd): Replaced with .. (tar_getcdpath): New proto. * src/misc.c (normalize_filename): Take two arguments. (chdir_arg): Populate cwd along with creating the structure. (tar_getcwd): Removed. (tar_getcdpath): New function. * tests/incr09.at: New test case. * tests/Makefile.am: Add new tests. * tests/testsuite.at: Likewise. 2013-09-27 Sergey Poznyakoff Bugfix * tests/remfiles08.at: Restore missing find 2013-09-26 Sergey Poznyakoff Use relative addressing in deferred unlinks. * src/common.h (tar_dirname): New function. * src/misc.c (normalize_filename_x): Make extern. (tar_dirname): New function. (tar_getcwd): Take into account absolute pathnames. * src/unlink.c (deferred_unlink) : New member; keeps the value of chdir_current at the moment of structure allocation. (flush_deferred_unlinks): Use chdir_do and relative addressing. (queue_deferred_unlink): Initialize dir_idx. * tests/Makefile.am: Add new tests. * tests/testsuite.at: Add new tests. * tests/remfiles06.at: Fix description. * tests/remfiles07.at: Fix description. * tests/remfiles08.at: New test case. 2013-09-25 Nathan Stratton Treadway Improve tar-snapshot-edit Support architecture-specific field ranges for the "-c" function. Better handle negative or larger-than-32-bit field values even when running in 32-bit Perl (for the default "print a summary" function) 2013-09-25 Sergey Poznyakoff Improve tar_getcwd * src/common.h (tar_getcwd): Return pointer is const. * src/misc.c (wd) : New member. (chdir_arg): Initialize cwd. (tar_getcwd): Use cwd member to cache the result. Take into account absolute pathnames, (normalize_filename): Don't free the value returned from tar_getcwd. * src/names.c (name_next_elt): Remove leftover call chdir(). * tests/Makefile.am: Add new tests. * tests/testsuite.at: Likewise. * tests/incr08.at: New testcase. * tests/remfiles04.at: New testcase. * tests/remfiles05.at: New testcase. * tests/remfiles06.at: New testcase. * tests/remfiles07.at: New testcase. 2013-09-24 Sergey Poznyakoff Fix normalize_filename. The function did not take into account eventual -C options, which in particular led to various problems when using -C and --remove-files together. * src/common.h (namebuf_add_dir,namebuf_finish) (tar_getcwd): New prototypes. * src/misc.c (namebuf_add_dir,namebuf_finish) (tar_getcwd): New functions. (normalize_filename): Use tar_getcwd. 2013-09-23 Sergey Poznyakoff Changes for compatibility with Slackware installation scripts. * src/buffer.c (short_read): the "Record size" message is controlled by the WARN_RECORD_SIZE warning_option bit. * src/common.h (keep_directory_symlink_option): New global. (WARN_RECORD_SIZE): New constant. (WARN_VERBOSE_WARNINGS): Add WARN_RECORD_SIZE. * src/extract.c (extract_dir): If keep_directory_symlink_option is set, follow symlinks to directories. * src/suffix.c (compression_suffixes): Add support for txz suffix. * src/tar.c (KEEP_DIRECTORY_SYMLINK_OPTION): New constant. (options): New option --keep-directory-symlink. (parse_opt): Handle this option. * src/warning.c: Implement "record-size" warning control. * NEWS: Update. * doc/tar.texi: Document new features. 2013-09-21 Sergey Poznyakoff Fix error message (complements 0ea6e686) * src/tar.c (set_subcommand_option): Mention --delete in the error message. 2013-09-15 Sergey Poznyakoff Improve the incr07 test 2013-09-15 Nathan Stratton Treadway Implement the --show-snapshot-field-ranges option * src/common.h (show_snapshot_field_ranges): New prototype. * src/incremen.c (show_snapshot_field_ranges): New function. * src/tar.c: New option --show-snapshot-field-ranges. * doc/snapshot.texi: Document the --show-snapshot-field-ranges option. * doc/tar.texi: Likewise. 2013-09-15 Sergey Poznyakoff Take into account chdir_fd when extracting from incremental dumps. * src/common.h (tar_savedir): New prototype. * src/misc.c (tar_savedir): New function. (remove_any_file): Use tar_savedir. * src/incremen.c (try_purge_directory): Use tar_savedir. * src/update.c (update_archive): Use tar_savedir. * tests/incr07.at: New testcase. * tests/Makefile.am (TESTSUITE_AT): Add new test. * tests/testsuite.at: Likewise. * THANKS: Updated. 2013-09-15 Sergey Poznyakoff Minor fix * src/tar.c (main): Mention --delete in the error message. * THANKS: Update 2013-09-13 Paul Eggert * src/names.c (file_list_name): Properly prototype. 2013-09-13 Paul Eggert tar: don't warn about zero timestamps * src/extract.c (check_time): Suppress warning when t.tv_sec == 0. Problem reported by Denis Excoffier. 2013-08-19 Pavel Raiskup Minor fix in the testsuite. * tests/T-cd.at: sort the 'tar cf' output. 2013-08-17 Sergey Poznyakoff Improve error diagnostics * src/names.c (file_list_name): New static function. (add_file_id): If a filelist is being read twice, print the names of the files that caused it. * tests/T-rec.at: New test case. * tests/Makefile.am: Add new file. * tests/testsuite.at: Include new file. 2013-08-16 Sergey Poznyakoff Revamp initial name collection functions to ensure proper argument ordering. * src/names.c (NELT_NOOP): New constant (name_elt) : New members. (name_array,allocated_entries,entries,scanned): Remove. (check_name_alloc): Remove function. (name_elt_alloc): New static. (name_list_adjust,name_list_advance): New functions. (name_add_name,name_add_dir) (name_add_file): Use new allocation functions. (read_next_name): Advance list head pointer as necessary before returning. (name_next_elt): Read elements from list. * tests/T-cd.at: New file. * tests/T-mult.at: New file. * tests/T-nest.at: New file. * tests/Makefile.am: Add new testcases. * tests/testsuite.at: Likewise. 2013-08-16 Sergey Poznyakoff Don't treat attempts to read an already read file list as fatal errors. * src/names.c (add_file_id): Report error and return 1 if the file has already been read. (read_next_name): Don't try to open file if add_file_id returns 1. (name_next_elt): Simplify conditional. 2013-08-16 Sergey Poznyakoff Minor change. * src/names.c (name_next_elt): Simplify conditional. 2013-08-15 Pavel Raiskup Fix use of uninitialized memory * src/names.c (name_add_file): Initialize the ep->v.file.fp pointer after structure allocation. 2013-08-05 Sergey Poznyakoff Minor changes * src/names.c (handle_option): Use program_invocation_short_name instead of the constant string. (read_next_name): Remove unused variable. 2013-08-04 Sergey Poznyakoff Update the docs. * doc/tar.texi: Parsing of the options found in the file list follows the same rules as for command line. Remove the obsolete description. This complements 26538c9b. 2013-08-04 Sergey Poznyakoff Fix interaction of --verbose and --append. * src/buffer.c (_open_archive): don't overwrite existing archive if given the --verify option. * tests/append04.at: New file. * tests/Makefile.am: Add new testcase. * tests/testsuite.at: Add new testcase. * THANKS: Update. 2013-08-04 Sergey Poznyakoff Bugfix. * src/names.c (read_name_from_file): Fix a typo. Remove unused variable. 2013-08-04 Sergey Poznyakoff Reduce memory consumption when handling the -T option. The commit cdb27293 made the -T option more flexible, but incurred a very considerable memory overhead by storing all file names in the argument array. In case of very big file lists this caused tar to run out of memory. This was reported by Christian Wetzel on March 14, 2013 (http://lists.gnu.org/archive/html/bug-tar/2013-03/msg00018.html). On the other hand, Michal Žeidl discovered that tar malfunctioned when given empty file lists or lists with the trailing newline missing in the last entry. This was reported by Pavel Raiskup on July 23 (http://lists.gnu.org/archive/html/bug-tar/2013-07/msg00009.html and msg00010.html). This change fixes both issues. * src/common.h (name_add_file,request_stdin): New prototype. (more_options): New prototype. * src/names.c (NELT_FILE): New entry type. (name_elt) : New union member. (name_add_file): New function. (read_name_from_file): New function, a rewrite of the same function from tar.c (read_next_name,copy_name): New static functions. (name_next_elt): Handle NELT_FILE entries. * src/tar.c (request_stdin): Make extern. (read_name_from_file,add_file_id) (update_argv): Removed. (parse_opt): Change handling of the -T option. (more_options): New function. * tests/T-null.at: Rewrite test. * tests/T-zfile.at: New file. * tests/T-nonl.at: New file. * tests/Makefile.am: Add new testcases. * tests/testsuite.at: Likewise. * THANKS: Update. 2013-06-29 Sergey Poznyakoff Fix the compatibility check for the --occurrence option. * src/tar.c (SUBCL_OCCUR): New class. (subcommand_class): Update. (decode_options): Accept the --occurrence option with any subcommand from the SUBCL_OCCUR class. 2013-06-29 Pavel Raiskup testsuite: do not resist on file order in archive On my Fedora 19 box, the exclude08 & exclude11 tests failed before this fix. The reason was that the directory traversing chosen the file order differently than the testsuite expected. * tests/exclude08.at: Sort the tarball content output. * tests/exclude09.at: Likewise. * tests/exclude10.at: Likewise. * tests/exclude11.at: Likewise. * tests/exclude12.at: Likewise. * tests/exclude13.at: Likewise. * tests/exclude14.at: Likewise. * tests/exclude15.at: Likewise. * tests/exclude16.at: Likewise. 2013-06-29 Sergey Poznyakoff Improve checks for incompatible options. * src/common.h (READ_LIKE_SUBCOMMAND): Remove define. * src/tar.c (IS_SUBCOMMAND_CLASS): New macro. (decode_options): Use IS_SUBCOMMAND_CLASS in checking option compatibility. Accept the --verify option only with subcommands that write to the archive. * tests/opcomp01.at: New test case. * tests/opcomp02.at: New test case. * tests/opcomp03.at: New test case. * tests/opcomp04.at: New test case. * tests/opcomp05.at: New test case. * tests/opcomp06.at: New test case. * tests/Makefile.am: Add new testcases. * tests/testsuite.at: Likewise. 2013-06-28 Paul Eggert tar: port to Mingw Shell * src/extract.c (extract_symlink) [!HAVE_SYMLINK]: Fix typo by replacing WARN_SYMBOLIC_CAST with WARN_SYMLINK_CAST. Problem reported by kaka in . 2013-05-06 Paul Eggert maint: revert previous change It wasn't actually needed. Reported by Stefano Lattarini in . * configure.ac (AM_GNU_GETTEXT_VERSION): Decrease from 0.18.2 back to 0.16. 2013-04-25 Paul Eggert maint: port to bleeding-edge Automake by assuming Gettext 0.18.2 Reported by Stefano Lattarini in . * configure.ac (AM_GNU_GETTEXT_VERSION): Increase from 0.16 to 0.18.2. README-alpha says that we do not make any efforts to accommodate older versions of Gettext. 2013-04-25 Paul Eggert tar: port to --without-xattrs --enable-gcc-warnings Reported by Pavel Raiskup in . * src/xattrs.c (xattrs__fd_set) [!HAVE_XATTRS]: Omit. 2013-04-25 Paul Eggert doc: port to texinfo 5 * doc/tar.texi (Reports, assumptions, Mixing): Put FIXMEs at line start. 2013-03-12 Sergey Poznyakoff Continue extracting from a separate volume after skipping a partial member. Reported by Göran Udeborg on 2013-03-09. * src/extract.c (extract_skip): New function. (prepare_to_extract): Set extractor to extract_skip if starting at a partial member. 2013-03-12 Sergey Poznyakoff Fix interaction of various --exclude-tag options with --listed-incremental. * src/incremen.c (procdir): Set directory->tagfile in the exclusion_tag_contents case. (makedumpdir): Mark all entries as ignored if directory->tagfile is set. Free new_dump before returning. (maketagdumpdir): New function. (scan_directory): If directory->children is set to NO_CHILDREN and directory->tagfile is set, create a dumpdir consisting of the tagfile only. * tests/exclude08.at: New testcase. * tests/exclude09.at: New testcase. * tests/exclude10.at: New testcase. * tests/exclude11.at: New testcase. * tests/exclude12.at: New testcase. * tests/exclude13.at: New testcase. * tests/exclude14.at: New testcase. * tests/exclude15.at: New testcase. * tests/exclude16.at: New testcase. * tests/Makefile.am: Add new tests. * tests/testsuite.at: Include new tests. * tests/atlocal.in (mkexcltest): New function. * tests/chtype.at: Update keywords. * tests/filerem01.at: Likewise. * tests/filerem02.at: Likewise. * tests/incremental.at: Likewise. * tests/multiv04.at: Likewise. 2013-02-20 Paul Eggert tar: remove lint * lib/wordsplit.c (_wsplit_error): Mark with printf attribute. (expvar): "Use" defstr to pacify GCC. * src/system.c (xexec): Now _Noreturn, to pacify GCC. (run_decompress_program): Add cast to pacify GCC. (sys_exec_command, sys_exec_info_script, sys_exec_checkpoint_script): Remove unused variables. 2013-02-10 Sergey Poznyakoff Pass command line arguments to external commands. Any option taking a command name as its argument accepts additional arguments as well. * lib/wordsplit.c: New file. * lib/wordsplit.h: New file. * lib/Makefile.am: Add new files. * src/system.c (xexec): New function. (run_decompress_program): Use wordsplit. (sys_child_open_for_compress,sys_exec_command) (sys_exec_info_script) (sys_exec_checkpoint_script): Use xexec to invoke external command. * NEWS: Update. * doc/tar.texi: Update. 2013-01-29 Nathan Stratton Treadway tar: improve compile-time diagnostics * src/misc.c (sysinttostr, strtosysint): Improve #error wording. 2013-01-27 Paul Eggert tar: improve quality of diagnostics with incrementals Inspired by a prototype by Nathan Stratton Treadway in . * src/incremen.c (read_num): Rewrite by merging read_negative_num and read_unsigned_num. Use strtosysint rather than rolling this stuff ourselves. Change return type to bool. All uses changed. (read_negative_num, read_unsigned_num): Remove. (read_num, read_timespec, read_incr_db_2): Improve quality of diagnostics, e.g., by supplying byte offset of error. 2013-01-26 Paul Eggert tar: fix bug with sparse files with effective size of 8 GiB or more Reported by Pavel Raiskup in . * NEWS: Document the fix. * src/sparse.c (pax_start_header): New function. (pax_dump_header_0, pax_dump_header_1): Use it. 2012-12-31 Paul Eggert maint: update copyrights for 2013 and as per current GNU standards 2012-12-31 Paul Eggert maint: remove unnecessary file * src/configure.in: Remove. This file has been obsolete for a while. 2012-12-24 Paul Eggert maint: don't enable warnings by default unless GCC 4.6 or later * configure.ac (gl_GCC_VERSION_IFELSE): New macro, from coreutils. (gl_gcc_warnings): By default, disable warnings for GCC versions before 4.6. This works around a failure when building from git on Ubuntu 10, reported privately by Nathan Stratton Treadway. 2012-12-23 Paul Eggert Handle incremental format 2 with negative numbers, too. * src/incremen.c (read_unsigned_num): Last arg is intmax_t *, not uintmax_t, for consistency with other readers. All callers changed. Avoid signed integer overflow. (read_num): 2012-12-23 Paul Eggert Fix some problems with negative and out-of-range integers. Original problem reported for HP-UX LVM v2.2 by Michael White in . This patch fixes some other gotchas that I noticed. * gnulib.modules: Add extern-inline. * src/common.h: Use _GL_INLINE_HEADER_BEGIN, _GL_INLINE_HEADER_END. (COMMON_INLINE, max, min): New macros. (represent_uintmax, valid_timespec): New inline functions. (SYSINT_BUFSIZE): New constant. (sysinttostr, strtosysint, decode_timespec): New decls. * src/create.c (start_private_header): Silently bring the time_t value into range; it is now the caller's responsibility to deal with any overflow error. Use uid 0 and gid 0 rather than the user's uid/gid, since the faked header isn't "owned" by the user and the uid/gid could in theory be out of range. Leave major and minor zeroed. (FILL): Remove. (write_gnu_long_link): Let start_private_header zero things out. * src/create.c (write_gnu_long_link, write_extended): * src/xheader.c (xheader_write_global): Use start_time, not current time; no point hammering on the clock. * src/compare.c (diff_multivol): Check that offset, size are in range. * src/incremen.c (read_incr_db_01, write_directory_file_entry): Allow negative time_t, dev_t, and ino_t. * src/list.c (max): Remove (moved to common.h). (read_header): Check that size is in range. (from_header): Return intmax_t, not uintmax_t, to allow negative. All callers changed. At compile time, check assumptions about intmax_t and uintmax_t. Use bool for booleans. Avoid overflow hassles on picky hosts. (mode_from_header): Last arg is now bool *, not unsigned *. All callers changed. (simple_print_header): Do not assume UID, GID fit in 'long'. * src/list.c (from_header): * src/xheader.c (out_of_range_header): Arg is now a plain minimum value, not minus minval converted to uintmax_t. All callers changed. * src/misc.c (COMMON_INLINE): New macro. (sysinttostr, strtosysint, decode_timespec): New functions. * src/sparse.c (oldgnu_add_sparse, oldgnu_fixup_header) (star_fixup_header): Check for offset overflow. (decode_num): Clear errno before calling strtoumax. * src/tar.c (expand_pax_option): Don't discard nanoseconds. * src/xheader.c (assign_time_option): Allow negative time_t. (decode_record): Simplify, since out-of-range string is guaranteed to produce a value exceeding len_max. (xheader_read): Last arg is off_t, not size_t. Caller should diagnose negative arg, as needed. Check that it's in range. (enum decode_time_status): Remove. (_decode_time): Remove, folding into decode_time. (decode_time): Return bool, not enum decode_time_status. Rely on decode_timespec to do most of the work. (code_signed_num): New function. (code_num): Use it. (decode_signed_num): New function. (decode_num): Use it. (gid_coder, gid_decoder, uid_coder, uid_decoder, sparse_map_decoder) (sparse_map_decoder): Code and decode negative values. (sparse_map_decoder): Improve check for out-of-range values. * tests/time01.at: New file. * tests/Makefile.am (TESTSUITE_AT): Add it. * tests/testsuite.at: Include it. 2012-12-22 Paul Eggert Port use of mkdirat etc. to Solaris 10. * gnulib.modules (fchmodat, fchownat, fstatat, mkdirat, unlinkat): Add. These were split out in gnulib, so we now need to request them separately. mkdirat, for example, is not in Solaris 10. 2012-12-22 Paul Eggert Port ACL configuration to Solaris 10. * configure.ac (with_posix_acls): Fix misspellings. Stop checking at the first failure, to speed up 'configure'. 2012-12-19 Paul Eggert tar: remove unused externs, or make them static * src/buffer.c (record_buffer_aligned, flush_write_ptr, flush_read_ptr) (duration): * src/list.c (recent_global_header): * src/unlink.c (deferred_unlink_delay): * src/transform.c (transform_flags): * src/xattrs.c (acl_get_file_at, acl_set_file_at, file_has_acl_at): Now static. * src/common.h (rmt_command_option): Remove; unused. * src/tar.c (check_links_option, allocated_archive_names): Move decls here from common.h; these are now static. 2012-12-19 Paul Eggert * .gitignore: Regenerate. 2012-12-19 Paul Eggert build: new configure option --enable-gcc-warnings This has a similar meaning as in other GNU applications such as coreutils and Emacs. * NEWS: Document it. * .gitignore: Remove redundant build-aux. Remove gnu, since gnu/Makefile.am is now in git. Add gnu/.gitignore, gnu/charset.alias, gnu/*.h, gnu/*/ to cover autogenerated files. * bootstrap.conf (gnulib_mk): Remove. * configure.ac: Add support for --enable-gcc-warnings, taken from coreutils and simplified. * gnu/Makefile.am: New file. Formerly this was autogenerated, but the autogenerated file has been renamed to gnulib.mk, its usual name when bootstrapping from gnulib. This way, AM_CFLAGS can incorporate warning options. * gnulib.modules: Add manywarnings. * lib/Makefile.am, src/Makefile.am (AM_CFLAGS): New macro, incorporating warning options. * lib/attr-xattr.in.h (ENOATTR): New macro, if not already defined. * src/buffer.c (magic): Don't rely on incomplete initializers. * src/common.h (report_difference): Add printf format attribute. * src/system.c (sys_exec_command, sys_exec_info_script) (sys_exec_checkpoint_script): * src/tar.c (update_argv): Add casts to char * to pacify GCC warnings about using string literals in a char * context. * src/xattrs.c, src/xattrs.h (xattrs_clear_setup): Declare parameters as (void), not (). * src/xheader.c (xheader_format_name): Initialize pptr to null, to pacify GCC. Remove unnecessary test of nptr versus null. 2012-12-19 Paul Eggert tar: don't truncate diagnostic * src/list.c (from_header): Fix buffer size calculation when generating a diagnostic. 2012-12-03 Sergey Poznyakoff Bugfix. * tests/Makefile.am: Fix double AM_CPPFLAGS 2012-12-01 Sergey Poznyakoff Use AM_CPPFLAGS instead of INCLUDES. 2012-11-19 Sergey Poznyakoff Housekeeping. * NEWS: Mention the support for POSIX ACLs, extended attributes and SELinux context. * THANKS: List James Antill and Pavel Raiskup. 2012-11-19 Sergey Poznyakoff Fix indentation. 2012-11-19 Pavel Raiskup Allow to store/extract '=' character in xattr keyword * src/xheader.c (xattr_decode_keyword) (xattr_encode_keyword): New functions. (xheader_print_n,xattr_decoder): Use them. * tests/xattr05.at: New test case. * tests/Makefile.am: Add new test case. * tests/testsuite.at: Likewise. 2012-11-19 Pavel Raiskup Bugfixes. * configure.ac: Avoid linking against -lacl when --without-posix-acls is given. * tests/selacl01.at: Call restorecon * tests/selnx01.at: Likewise. * tests/testsuite.at (AT_SELINUX_UTILS_PREREQ): Likewise. (AT_SELINUX_PREREQ,AT_ACLS_PREREQ): Use the right _PREREQ macros. 2012-11-19 Pavel Raiskup Fix bootstrapping. * bootstrap (gnulib_extra_files): Remove $build_aux/missing 2012-11-19 Sergey Poznyakoff Various fixes. * src/xattrs.c: Don't mix variable declarations and statements. Use proper data types. Remove improper use of const qualifiers. Use x2nrealloc to reallocate memory buffers. 2012-11-18 Sergey Poznyakoff Minor change. * src/xattrs.c: Fix indentation. Fix copyleft statement, promote to GPLv3+. * src/xattrs.h: Likewise 2012-11-18 Pavel Raiskup Add SELinux context store/restore/list support. * gnulib.modules: Add selinux-at. * src/Makefile.am (tar_LDADD): Add LIB_SELINUX. * src/create.c (start_header, dump_file0): Handle selinux contexts. * src/extract.c (delayed_set_stat) : New member. (delayed_link) : New member. (set_stat, delay_set_stat) (apply_nonancestor_delayed_set_stat): Handle selinux contexts. * src/tar.c: New options: "--selinux", "--no-selinux". (tar_stat_destroy): Free cntx_name. * src/tar.h (tar_stat_info) : New member. * src/xattrs.c (xattrs_selinux_get) (xattrs_selinux_set): New functions. (xattrs_print_char): Honor selinux_context_option. (xattrs_print): Print selinux context. * src/xheader.c: Handle new keyword "RHT.security.selinux". * tests/Makefile.am: Add new tests. * tests/testsuite.at: Likewise. * tests/selacl01.at: New test. * tests/selnx01.at: New test. 2012-11-18 Pavel Raiskup Support for POSIX ACLs * configure.ac: Check whether ACLs are available on the host system. * gnulib.modules: Add acl * src/create.c (start_header): Store ACLs when creating a POSIX archive. (dump_file0): Handle ACLs. * src/extract.c (delayed_set_stat) : New members. (delayed_link): Likewise. (set_stat,delay_set_stat) (apply_nonancestor_delayed_set_stat): Set ACLs. * src/tar.c: New options: "--acls", "--no-acls" (tar_stat_destroy): Free acls_a_ptr and acls_d_ptr fields. * src/tar.h (tar_stat_info) : New members. * src/xattrs.c (xattrs_acls_get, xattrs_acls_set): New functions. * src/xheader.c: Support new keywors: "SCHILY.acl.access" and "SCHILY.acl.default". * tests/Makefile.am: Add new tests. * tests/testsuite.at: Likewise. * tests/acls01.at: New test. * tests/acls02.at: New test. 2012-11-18 Pavel Raiskup Add basic support for extended attributes. * src/Makefile.am: Add xattrs.[ch] * src/xattrs.c: New file. * src/xattrs.h: New file. * src/common.h (READ_LIKE_SUBCOMMAND): New define. (selinux_context_option, acls_option, xattrs_option): New globals. (xheader_xattr_init, xheader_xattr_free) (xheader_xattr_copy, xheader_xattr_add): New protos. (WARN_XATTR_WRITE): New mask. * src/create.c (start_header): Handle xattrs pairs if in POSIX format. (dump_file0): Handle extended attributes. * src/extract.c (delayed_set_stat,delayed_link) : New members. (set_xattr): New static function. (open_output_file): Accept an additional argument indicating whether the file has already been created. (set_stat,delay_set_stat) (apply_nonancestor_delayed_set_stat) (extract_file): Handle extended attributes. * src/list.c (decode_header, simple_print_header): Display extended attributes. * src/tar.c: New options --xattrs, --no-xattrs, --xattrs-include, --xattrs-exclude (tar_stat_destroy): Free the xattr_map storage. * src/tar.h (xattr_array): New struct. (tar_stat_info) : New members. * src/warning.c: New warning control keyword "xattr-write". * src/xheader.c (xheader_xattr_init) (xheader_xattr_free, xheader_xattr_add) (xheader_xattr_copy): New functions. (struct xhdr_tab) : New member. (locate_handler): Permit selecting the keyword based on its prefix. (xheader_protected_pattern_p) (xheader_protected_keyword_p): Likewise. (xattr_coder, xattr_decoder): New functions. (xhdr_tab): Reflect the changes to struct xhdr_tab. New keyword "SCHILY.xattr". * tests/Makefile.am: Add new tests. * tests/testsuite.at: Likewise. (AT_CHECK_UTIL, AT_XATTRS_UTILS_PREREQ) (AT_CAPABILITIES_UTILS_PREREQ, AT_XATTRS_PREREQ): New defuns. * tests/xattr01.at: New test. * tests/xattr02.at: New test. * tests/xattr03.at: New test. * tests/xattr04.at: New test. * tests/capabs_raw01.at: New test. 2012-11-18 Sergey Poznyakoff Prepare for implementing extended attribute support. This patch adds *xattr() stubs in case extended attribute support is not present and implements the *attrat() family of functions. Based on the patch by Pavel Raiskup for gnulib. * acinclude.m4 (TAR_HEADERS_ATTR_XATTR_H): New defun. * configure.ac: Call TAR_HEADERS_ATTR_XATTR_H * lib/Makefile.am: Add xattr-at.[ch], distribute attr-xattr.in.h [!TAR_COND_XATTR_H]: Build attr/xattr.h * lib/attr-xattr.in.h: New file. * lib/xattr-at.c: New file. * lib/xattr-at.h: New file. 2012-11-14 Sergey Poznyakoff Fix creation of incremental archives when a subdirectory becomes a mountpoint. When used with --listed-incremental and --one-file-system, tar was unable to cope with directories that had once been part of the dumped system and became separate mount points afterward. The bug has been reported and a fix proposed by Nathan Stratton Treadway. * src/incremen.c (procdir): If one_file_system_option is in effect, clear out dumpdir info from the directory. * tests/Makefile.am: Add new testcase. * tests/listed05.at: New testcase. * tests/testsuite.at (AT_PRIVILEGED_PREREQ): New macro. include listed05.at. * THANKS: Update. 2012-07-27 Jim Meyering maint: try to avoid unwanted chatter in ChangeLog * bootstrap.conf: Do not alter ChangeLog if it already exists. 2012-07-26 Paul Eggert doc: improve discussion of compressed archives * doc/tar.texi (gzip): Don't claim that -I 'gzip --best' works. Problem reported by Davide Brini in . Also, improve some of the surrounding text. 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. 2012-06-27 Paul Eggert tests: fix permissions-assumption bug in test * tests/owner.at: Don't assume umask is 022. Reported by Pavel Raiskup in . 2012-06-27 Paul Eggert tar: don't assume root is uid 0 This is not true for Tandem NonStop Kernel. See Joachim Schmitz's comment in . * gnulib.modules: Add root-uid. * src/extract.c: Include . (extr_init): Don't assume root is uid 0. 2012-04-25 Paul Eggert * src/compare.c (diff_dumpdir): Omit useless 'stat'. 2012-04-25 Paul Eggert * doc/tar.texi (Option Summary): Fix xref typo. Reported by Nathan Stratton Treadway in . 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. 2012-03-29 Sergey Poznyakoff Fix unrecognized option. * src/tar.c (parse_opt): Handle OLD_ARCHIVE_OPTION. 2012-03-11 Paul Eggert tar: remove lint This lint was found by GCC 4.6.2 on Fedora 15 x86-64. * src/buffer.c (buffer_write_global_xheader, mv_end, set_start_time) (compute_duration, print_total_stats, flush_read, flush_write): * src/checkpoint.c (checkpoint_finish_compile): * src/list.c (test_archive_label): * src/misc.c (chdir_count): * src/names.c (const): * src/unlink.c (finish_deferred_unlinks): Define with (void) instead of with (), for slightly-better C type checking and to avoid a GCC warning. * src/compare.c (diff_dumpdir): * src/tar.c (parse_owner_group): Remove unused local. * src/misc.c (chdir_do): * src/tar.c (add_exclude_array): Rename local to avoid shadowing. (LOW_DENSITY_NUM, MID_DENSITY_NUM, HIGH_DENSITY_NUM): Define only if needed. * src/update.c (update_archive): Initialize a local; this fixes what appears to be a real bug. 2012-02-14 Paul Eggert doc: suggest Bash for large-fd script * doc/tar.texi (Multi-Volume Archives): Suggest Bash for shell script that might use >&10. Problem reported by Edward F Eaglehouse in . 2012-01-18 Paul Eggert tar: quote 'like this', not `like this' This fixes some test failures recently introduced by gnulib updates prompted by recent changes to the GNU coding standards, which now advise to use quotes 'like this' or "like this" rather than `like this'. * NEWS: Document this. * README, README-hacking, doc/Makefile.am, scripts/backup.in: * scripts/backup.sh.in, scripts/dump-remind.in: * src/buffer.c, src/checkpoint.c, src/create.c, src/incremen.c: * src/misc.c, src/names.c, src/sparse.c, src/transform.c: * tests/incr02.at, tests/incremental.at, tests/multiv08.at: * tests/sparse04.at, tests/star/README, tests/update01.at: Quote 'like this' in comments. * src/tar.h: Quote "like this" in comments, when quoting English phrases rather than code. * configure.ac: * scripts/xsparse.c (get_var, read_xheader, main): * src/compare.c (diff_archive): * src/extract.c (prepare_to_extract): * src/tar.c (request_stdin, tar_set_quoting_style, doc, options) (set_subcommand_option, report_textual_dates, parse_opt) (decode_options, main): * src/xheader.c (decx): Quote 'like this' in diagnostics. * doc/tar.texi (list, warnings, override) (Selecting Archive Members, quoting styles, after, hard links) (Sparse Recovery, Multi-Volume Archives, label): Adjust documentation to match new output. * tests/backup01.at, tests/incr01.at, tests/incr04.at: * tests/label04.at, tests/label05.at, tests/link03.at: * tests/listed02.at, tests/multiv03.at, tests/multiv05.at: * tests/rename01.at, tests/rename02.at, tests/rename03.at: * tests/volume.at: Adjust tests to match new quoting behavior. 2012-01-18 Paul Eggert tar: port --overwrite symlink test to GNU/Hurd Problem reported by Pino Toscano in . * 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. 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. 2012-01-11 Paul Eggert tar: fix core dump with --index-file=bad_path * src/tar.c (decode_options): Exit cleanly if index file won't open. Problem reported by Khanh-Dang Nguyen Thu Lam in . 2012-01-06 Paul Eggert tar: don't assume O_NONBLOCK is benign on regular files On Data Migration Facility (DMF), High Performance Storage System (HPSS), and presumably other file systems based on hierarchical storage, opening a regular file with O_NONBLOCK can cause later reads to fail with errno == EAGAIN. We need the O_NONBLOCK to avoid some security races. Work around the problem by using fcntl to clear the O_NONBLOCK flag if I/O fails with that errno value. Problem reported by Vitezslav Cizek in . * src/common.h (blocking_read, blocking_write): New decls. * src/misc.c (blocking_read, blocking_write): New functions. * src/compare.c (process_rawdata): * src/create.c (dump_regular_file): * src/extract.c (extract_file): * src/sparse.c (sparse_scan_file, sparse_extract_region): 2011-11-26 Sergey Poznyakoff Fix --keep-old-files option. The regression was introduced by 8f390db9. This patch implements additional option --skip-old-files, which silently skips members which would cause writing over existing files, and restores --keep-old-files to its traditional behavior. * NEWS: Update. * configure.ac: Update. * doc/tar.texi: Document the changes. * src/common.h (SKIP_OLD_FILES): New old_files mode. * src/extract.c (maybe_recoverable): Restore KEEP_OLD_FILES behavior. Handle SKIP_OLD_FILES. * src/tar.c: New option --skip-old-files. * tests/extrac18.at: New file. * tests/extrac19.at: New file. * tests/Makefile.am: Add new test cases. * tests/testsuite.at: Likewise. 2011-11-17 Sergey Poznyakoff Warn about existing files in keep-old-files mode (complements 8f390db9). This is controlled by "existing-file" warning code, which is off by default. * src/common.h (WARN_EXISTING_FILE): New warning code. (WARN_VERBOSE_WARNINGS): Add WARN_EXISTING_FILE. * src/extract.c (maybe_recoverable): warn about existing file if WARN_EXISTING_FILE is set. * src/warning.c: New warning type: "existing-file" 2011-11-17 Sergey Poznyakoff Fix the "Creating directory:" output * src/list.c (print_for_mkdir): don't use unquoted name length for computing its output width. 2011-11-15 Sergey Poznyakoff Fix operation of --verify in conjunction with --listed-incremental * src/common.h (clear_directory_table): New proto. * src/incremen.c (clear_directory_table): New function. * src/compare.c (diff_dumpdir): Take a pointer to struct tar_stat_info as argument. Initialize its fd. (diff_archive): Update call to diff_dumpdir. (verify_volume): Call clear_directory_table. 2011-10-18 Paul Eggert * doc/tar.texi (Option Summary, absolute): Document -P better, by describing how it deals with symbolic links on extraction. 2011-09-28 Paul Eggert 2011-09-27 Paul Eggert * src/tar.c (stat_on_signal): Use SA_RESTART if available. 2011-09-20 Paul Eggert * doc/tar.texi: Remove front- and back-cover texts. These are no longer needed for this manual, according to the GNU maintainers guide. Update copyright date to 2011. 2011-09-19 Sergey Poznyakoff Minor changes. * scripts/tar-snapshot-edit: License under GPLv3+. Remove trailing whitespace. 2011-09-19 Nathan Stratton Treadway Minor changes. * doc/snapshot.texi: Clarify the use of nfs field in 0 and 1 formats. Give more precise information about which versions of tar used each format. 2011-09-19 Nathan Stratton Treadway Upgrade tar-snapshot-edit script. * scripts/tar-snapshot-edit: Update Perl syntax to work correctly with more recent versions of Perl. (The original code worked with in the v5.8 timeframe but not with Perl v5.10.1 and later.) Add a "-c" option to check the snapshot file for invalid field values. Handle NFS indicator character ("+") in version 0 and 1 files. Preserve the original header/version line when editing version 1 or 2 files. Tweak output formatting. * doc/tar-snapshot-edit.texi: Update documentation. 2011-08-13 Paul Eggert tar: --owner and --group names and numbers The --owner and --group options now accept operands of the form NAME:NUM, so that you can specify both symbolic name and numeric ID for owner and group. Also, in these options, NAME no longer needs to be present in the current host's user and group databases; this implements Debian enhancement request 136231 reported by Mark W. Eichin, communicated by Thayne Harbaugh to bug-tar in . * NEWS, doc/tar.texi (Option Summary, override): Document enhancement. * src/common.h (group_name_option, owner_name_option): New decls. * src/create.c (start_header): Don't assume owner and group names are in current host database. * src/tar.c (parse_owner_group): New function, for parsing NAME:NUM. (parse_opt): Use it. (decode_options): Initialize owner_name_option, group_name_option. * tests/owner.at: New file, to test this enhancement. * tests/Makefile.am (TESTSUITE_AT): Add it. * tests/testsuite.at: Include it. 2011-08-13 Paul Eggert .gitignore: update * .gitignore: Add rmt. * lib/.gitignore: New file. 2011-07-30 Sergey Poznyakoff Fix the --exclude-backups option. * src/tar.c (add_exclude_array): Take exclude option flags in its second argument. (parse_opt): Register backup_file_table with the EXCLUDE_WILDCARDS flag. * tests/exclude07.at: New testcase. * tests/Makefile.am (TESTSUITE_AT): Add testsuite.at. * tests/testsuite.at: Include exclude07.at. 2011-06-08 Paul Eggert tar: simplify birthtime calculations * src/extract.c (same_birthtime): Remove. (extract_link, apply_delayed_links): Go back to using timestamp_cmp instead of same_birthtime, as this is a bit simpler. This fix relies on an up-to-date gnulib. 2011-06-08 Paul Eggert tar: use birthtime rather than ctime when checking identity Without this fix, tar would sometimes mishandle the extraction of hard links to symbolic links. Problem reported in by Andreas Stolcke. * src/extract.c (struct delayed_link): Change ctime member to birthtime. (same_birthtime): New function. (create_placeholder_file, extract_link, apply_delayed_links): Use it to compare birthtimes (when available) instead of ctime. 2011-05-26 Paul Eggert * doc/tar.texi (Old Options): Clarify distinction from short options. Adjust other parts of the manual to use examples that parse the same regardless of whether "-" is in front of the option clump. See . 2011-03-12 Sergey Poznyakoff Testsuite fix. * tests/sparse04.at: Use the -f option. 2011-03-12 Sergey Poznyakoff Version 1.26 * NEWS, configure.ac: Update. * po/POTFILES.in: Remove paxexit.c (see bb971a1e). 2011-03-08 Paul Eggert --atime-preserve=replace: fix correctness and performance bugs reported by Eric Blake in . * 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 * doc/tar.texi: Adjust example commands and output for accuracy. The original problem was reported by Michael Witten in . 2011-02-16 Paul Eggert 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 . * 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 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 tests: make the truncate test smaller and less buggy (tiny change) Reported by Solar Designer in . * tests/truncate.at: Use a smaller test case, and make its race condition less likely. 2010-11-27 Paul Eggert tests: skip SIGPIPE-dependent tests in environments ignoring SIGPIPE Problem reported by Sven Joachim in . * tests/remfiles01.at: Use AT_SIGPIPE_PREREQ. * tests/sigpipe.at: Likewise. * tests/testsuite.at (AT_SIGPIPE_PREREQ): New macro. 2010-11-25 Paul Eggert tar: work around NetBSD and Tru64 symlink incompatibility with POSIX Problem reported by Bruno Haible in . * src/extract.c (maybe_recoverable): Also treat EFTYPE (if defined) and ENOTSUP like ELOOP. 2010-11-24 Paul Eggert tar: adjust to paxutils change: paxexit.c -> paxexit-status.c * lib/Makefile.am (libtar_a_SOURCES): paxexit.c renamed to paxexit-status.c. 2010-11-24 Paul Eggert 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 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 . 2010-11-23 Paul Eggert * src/names.c: tar: fix bug with --one-file-system --listed-incremental Problem (and idea for fix) reported by Martin Weigel . * 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. 2010-11-23 Paul Eggert 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. 2010-11-23 Paul Eggert scripts: fix option parsing Problem reported by Dennis Wydra in . * 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 Issue a warning if the archive being compared contains 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. 2010-11-15 Sergey Poznyakoff Minor change. * doc/tar.texi: Reword the description of decompress-program. 2010-11-15 Paul Eggert 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 Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/tar 2010-11-08 Jim Meyering 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 Version 1.25 * configure.ac: Version 1.25 * NEWS: Describe the changes. 2010-11-05 Sergey Poznyakoff 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 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 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 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 . * src/list.c (decode_header): Likewise. 2010-10-28 Paul Eggert 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 ; solution suggested by Jilles Tjoelker in . * tests/extrac11.at (scarce file descriptors): Close file descriptors before invoking ulimit -n. 2010-10-27 Sergey Poznyakoff Transform file names when updating and appending 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 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 encountered". 2010-10-27 Paul Eggert 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. 2010-10-27 Paul Eggert 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 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 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 Further fixes in bootstrap. * bootstrap: Restore the default for gnulib_path (symlink_to_dir): Re-apply 67cad07. 2010-10-26 Paul Eggert tar: fix bug with -C and extracting directories Problem reported by Denis Excoffier in . * 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 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 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 . * 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. 2010-10-16 Paul Eggert 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 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 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. 2010-09-24 Paul Eggert 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 tar: do not crash with --listed-incremental Problem reported by Frantisek Hanzlik in via Kamil Dudka in . 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 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 ; 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 tar: add utimens.h includes * src/extract.c: Include , needed for fdutimens prototype. * src/misc.c: Likewise. 2010-09-18 Paul Eggert 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 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. 2010-09-17 Paul Eggert 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. 2010-09-17 Paul Eggert 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 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. 2010-09-16 Paul Eggert 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. 2010-09-16 Paul Eggert 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 inadvertently. * 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 * 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 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 and gnulib commit 970c9038e4cca46e1b037ae0a6d574dfae6a7327. 2010-09-13 Paul Eggert * NEWS: Fix wording typo in previous change. Reported by Jim Meyering. 2010-09-13 Paul Eggert 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 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 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 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 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 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 Fix --remove-files in update/append mode. * src/update.c (update_archive): Call finish_deferred_unlinks when done. 2010-08-26 Paul Eggert 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. 2010-08-26 Paul Eggert 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 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 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 . Also, omit unnecessary lseek at start of file. 2010-08-25 Paul Eggert 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 , 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. 2010-08-25 Paul Eggert 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 tar: add comment to link04.at test * tests/link04.at: Add explanatory comment at head. 2010-08-24 Paul Eggert 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. 2010-08-24 Paul Eggert 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 tar: use nlink_t for link counts * src/create.c (struct link): nlink is now of type nlink_t, not size_t. 2010-08-23 Paul Eggert 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. 2010-08-23 Paul Eggert 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 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. 2010-08-20 Paul Eggert 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 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 * src/misc.c (struct wd): Fix comment to match code. 2010-07-18 Paul R. Eggert 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. 2010-07-18 Paul R. Eggert 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 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 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 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. 2010-07-11 Sergey Poznyakoff Version 1.23.90 * NEWS, configure.ac: Version 1.23.90 * doc/tar.texi: Document the use of lbzip2. 2010-06-28 Sergey Poznyakoff 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. 2010-06-28 Sergey Poznyakoff 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 Minor fix. * src/buffer.c (magic): Fix xz magic. 2010-06-16 Paul Eggert 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 Bugfix. * src/incremen.c (make_directory): Retain the slash if it is the only character in a filename. 2010-04-02 Sergey Poznyakoff Recode NEWS back to UTF-8 2010-04-01 Sergey Poznyakoff 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 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 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. 2010-03-27 Sergey Poznyakoff Fix coredump. * src/names.c (collect_and_sort_names): Remove entry from the table before freeing it. 2010-03-27 Sergey Poznyakoff 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 . * NEWS: Update. 2010-03-20 Sergey Poznyakoff 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 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 , 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 Bugfixes. * src/buffer.c (check_label_pattern): Initialize result. * tests/remfiles01.at: Skip if run with root privileges. 2010-03-11 Sergey Poznyakoff 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. 2010-03-11 Sergey Poznyakoff Doc fixes. * doc/tar.texi: Consistently use lowercase `see' within sentences. More fixes spotted by Denis Excoffier. * THANKS: Update. 2010-03-11 Sergey Poznyakoff 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. 2010-03-11 Sergey Poznyakoff Bugfix. * src/names.c (collect_and_sort_names): Initialize prev_name. Reported by Dmitry V. Levin. 2010-03-10 Sergey Poznyakoff Version 1.23 * configure.ac, NEWS: Update version number. 2010-03-10 Sergey Poznyakoff Doc changes. * NEWS: Update. * THANKS: Update. * doc/snapshot.texi, doc/snapshot.texi, doc/sparse.texi, doc/tar-snapshot-edit.texi, doc/tar.texi: Spellchecked and proof-read. Thanks to Denis Excoffier. * gnulib.modules: Remove utime. 2010-03-08 Kamil Dudka Fix possible overflow in code_timespec (tiny change) * src/misc.c (code_timespec): ignore invalid values of ns 2010-03-08 Sergey Poznyakoff Minor fix in the testsuite. * tests/extrac05.at: Skip test if creating sparse file fails. 2010-03-08 Sergey Poznyakoff 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. (dump_file0): Close fd before returning without dumping the directory. 2010-03-02 Sergey Poznyakoff Minor change. * doc/tar.texi: Improve some wording. 2010-03-02 Antonio Diaz Diaz Add Lzip support * configure.ac: Add TAR_COMPR_PROGRAM(lzip) * doc/tar.texi: Reflect lzip support. * src/buffer.c (compress_type) : New constant. (magic): Add magic for lzip. * src/suffix.c (compression_suffixes): Add lz. * src/tar.c: New option --lzip. 2010-03-02 Sergey Poznyakoff Minor fix. * tests/exclude05.at: Rewrite awk invocation to avoid overflowing awk's file table on Solaris. 2010-03-02 Eric Blake Fix large file support. * scripts/xsparse.c (read_map): Use fseeko. * src/incremen.c (write_directory_file): Likewise. 2010-03-02 Sergey Poznyakoff Bugfix * src/buffer.c (seek_archive): Rewrite size computation to prevent it from reaching negative values. Based on report by Denis Excoffier . 2010-02-25 Sergey Poznyakoff Supply more information to the --to-command script. * src/system.c (stat_to_env): Pass information about the current volume in variables TAR_ARCHIVE, TAR_VOLUME, TAR_BLOCKING_FACTOR, TAR_FORMAT. * doc/tar.texi: Document new environment variables. * NEWS: Likewise. * configure.ac: Version number 1.22.91. 2010-02-17 Sergey Poznyakoff Minor change. * src/names.c (regex_usage_warning): Fix warning message. 2010-02-05 Sergey Poznyakoff Update THANKS 2010-02-05 Ondřej Vašík Bugfix (tiny change) * src/xheader.c (xheader_read): Remove unnecessary call to xheader_init. 2010-01-26 Sergey Poznyakoff Enable silent build mode. * configure.ac: Require automake 1.11, autoconf 2.63. Enable silent rules. * NEWS: Update. * lib/Makefile.am (rmt-command.h): Silent the rule. 2010-01-25 Sergey Poznyakoff Read POSIX multivolume archives split at the header boundary. * src/common.h (read_header_mode): New enum. (read_header): Change type of the 3rd argument. * src/list.c (read_header): Change type of the 3rd argument. All callers updated. * src/buffer.c (try_new_volume): Allow for volumes split at the extended/ustar header boundary. This is against POSIX specs, but we must be able to read such archives anyway. * tests/multiv07.at: New test case. * tests/Makefile.am: Add multiv07.at * tests/testsuite.at: Likewise. * src/compare.c: Update calls to read_header. * src/delete.c: Likewise. * src/update.c: Likewise. 2010-01-24 Sergey Poznyakoff Minor change. * NEWS: Update. * doc/tar.texi: Update. * src/create.c (finish_header): Minor change. 2010-01-24 Rob Vermaas Bugfix (tiny change). * src/tar.c (format_default_settings)[REMOTE_SHELL]: Fix misplaced comma. 2010-01-24 Sergey Poznyakoff Minor fix. * src/incremen.c (read_incr_db_01) (read_directory_file): Initialize bufsize to 0. Suggested by noordsij@cs.helsinki.fi. 2010-01-24 Sergey Poznyakoff Improve handling of --test-label. * src/list.c (print_volume_label): New function. (print_header): Call print_volume_label. (test_archive_label): New function. * src/buffer.c (VOLUME_LABEL_APPEND): Remove. (VOLUME_TEXT, VOLUME_TEXT_LEN): New macros (drop_volume_label_suffix): New function. (check_label_pattern): Use drop_volume_label_suffix. * src/common.h (subcommand): New constant TEST_LABEL_SUBCOMMAND. (test_label_option): Remove. (drop_volume_label_suffix): New proto. (test_archive_label): New proto. * src/names.c (all_names_found): Remove test for test_label_option. * src/tar.c (subcommand_string): Handle TEST_LABEL_SUBCOMMAND. (set_subcommand_option): Improve diagnostics. (parse_opt): Set subcommand if --test-label is given. (main): Handle TEST_LABEL_SUBCOMMAND. 2010-01-24 Sergey Poznyakoff Fix listing of volume labels (in particular in PAX archives). * src/buffer.c (match_volume_label): Call set_volume_label. (check_label_pattern): Get label string as argument. (match_volume_label): Handle volume labels stored in global PAX headers. * src/common.c (print_header,read_header): Change signature. (read_header_primitive): Remove prototype. * src/list.c (recent_global_header): New static. (list_archive): Always print volume labels. (read_header_primitive): Remove. (read_header): Change the signature (all callers updated) Save the recent global header. (volume_label_printed): New static. (simple_print_header): New function (ex-print_header). (print_header): Change the signature (all callers updated). For POSIX formats, print first volume header (if set). * src/xheader.c (xheader_write_global): Write the data accumulated in xhdr->stk even if keyword_global_override_list is empty. (xheader_read): On unexpected EOF, report error instead of coredumping. (XHDR_PROTECTED, XHDR_GLOBAL): New defines. (struct xhdr_tab): Remove `protected' with `flags'. All uses updated. (decg): If XHDR_GLOBAL bit is set, call the keyword's decode method instead of adding it to `kwl'. * src/compare.c: Update calls to read_header. * src/create.c: Likewise. * src/delete.c: Likewise. * src/update.c: Likewise. * src/extract.c: Likewise. (extract_volhdr): Do not print "Reading