]> git.ipfire.org Git - thirdparty/tar.git/blobdiff - NEWS
Avoid quadratic behavior with delayed links
[thirdparty/tar.git] / NEWS
diff --git a/NEWS b/NEWS
index 29b4486a0c573ca072cc9ff395d6e20913799c97..1378dbe59dc9552ecd66a9335b10c919346023ce 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,363 @@
-GNU tar NEWS - User visible changes. 2013-01-26
+GNU tar NEWS - User visible changes. 2022-07-24
 Please send GNU tar bug reports to <bug-tar@gnu.org>
+\f
+version 1.34.90 (git)
+
+* Fail when building GNU tar, if the platform supports 64-bit time_t
+  but the build uses only 32-bit time_t.
+
+* Leave the devmajor and devminor fields empty (rather than zero) for
+  non-special files, as this is more compatible with traditional tar.
+
+* New build scripts ./autopull.sh and ./autogen.sh, to separate
+  fetching from autogenerating source files.  See README-hacking.
+
+* Bug fixes
+
+** Warn "file changed as we read it" less often.
+   Formerly, tar warned if the file's size or ctime changed.
+   However, this generated a false positive if tar read a file
+   while another process hard-linked to it, changing its ctime.
+   Now, tar warns if the file's size, mtime, user ID, group ID,
+   or mode changes.  Although neither heuristic is perfect,
+   the new one should work better in practice.
+
+** Fix --ignore-failed-read to ignore file-changed read errors
+   as far as exit status is concerned.  You can now suppress file-changed
+   issues entirely with --ignore-failed-read --warning=no-file-changed.
+
+** Fix --remove-files to not remove a file that changed while we read it.
+
+** Fix --atime-preserve=replace to not fail if there was no need to replace,
+   either because we did not read the file, or the atime did not change.
+
+** Fix race when creating a parent directory while another process is
+   also doing so.
+
+** Fix handling of prefix keywords not followed by "." in pax headers.
+
+** Fix handling of out-of-range sparse entries in pax headers.
+
+** Fix handling of --transform='s/s/@/2'.
+
+** Fix treatment of options ending in / in files-from list.
+
+** Fix crash on 'tar --checkpoint-action exec=\"'.
+
+** Fix low-memory crash when reading incremental dumps.
 
 \f
-version 1.26.90 (Git)
+version 1.34 - Sergey Poznyakoff, 2021-02-13
+
+* Fix extraction over pipe (savannah bug #60002)
+
+* Fix memory leak in read_header (savannah bug #59897)
+
+* Fix extraction when . and .. are unreadable
+
+See https://lists.gnu.org/archive/html/bug-tar/2021-01/msg00012.html
+
+* Gracefully handle duplicate symlinks when extracting
+
+See https://lists.gnu.org/archive/html/bug-tar/2021-01/msg00026.html
+
+* Re-initialize supplementary groups when switching to user privileges
+\f
+version 1.33 - Sergey Poznyakoff, 2021-01-07
+
+* 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.
+
+* --delay-directory-restore works for archives with reversed member ordering
+
+* Fix extraction of a symbolic link hardlinked to another symbolic link
+
+* Wildcards in exclude-vcs-ignore mode don't match slash
+
+* Fix the --no-overwrite-dir option
+
+Given this option, previous versions of 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.
+
+* Fix handling of chained renames in incremental backups
+
+* Link counting works for file names supplied with -T
+
+* Accept only position-sensitive (file-selection) options in file list files.
+
+Using such options as -f, -z, etc. is senseless in a file list file and
+bypasses option consistency checks in decode_options.  Therefore,
+only options related to file selection (a.k.a position-sensitive options)
+are allowed in file list files.
+
+\f
+version 1.32 - Sergey Poznyakoff, 2019-02-23
+
+* Fix the use of --checkpoint without explicit --checkpoint-action
+
+* Fix extraction with the -U option
+
+See http://lists.gnu.org/archive/html/bug-tar/2019-01/msg00015.html,
+for details
+
+* Fix iconv usage on BSD-based systems
+
+* Fix possible NULL dereference (savannah bug #55369)
+
+* Improve the testsuite
+
+\f
+version 1.31 - Sergey Poznyakoff, 2019-01-02
+
+* Fix heap-buffer-overrun with --one-top-level.
+Bug introduced with the addition of that option in 1.28.
+
+* Support for zstd compression
+
+New option '--zstd' instructs tar to use zstd as compression program.
+When listing, extractng and comparing, zstd compressed archives are
+recognized automatically.
+When '-a' option is in effect, zstd compression is selected if the
+destination archive name ends in '.zst' or '.tzst'.
+
+* The -K option interacts properly with member names given in the command line
+
+Names of members to extract can be specified along with the "-K NAME"
+option. In this case, tar will extract NAME and those of named members
+that appear in the archive after it, which is consistent with the
+semantics of the option.
+
+Previous versions of tar extracted NAME, those of named members that
+appeared before it, and everything after it.
+
+* Fix CVE-2018-20482
+
+When creating archives with the --sparse option, previous versions of
+tar would loop endlessly if a sparse file had been truncated while
+being archived.
+
+\f
+version 1.30 - Sergey Poznyakoff, 2017-12-17
+
+* Member names containing '..' components are now skipped when extracting.
+
+This fixes tar's behavior to match its documentation, and is a bit
+safer when extracting untrusted archives over old files (an unsafe
+practice that the tar manual has long recommended against).
+
+* Report erroneous use of position-sensitive options.
+
+During archive creation or update, tar keeps track of positional
+options (see the manual, subsection 3.4.4 "Position-Sensitive
+Options"), and reports those that had no effect.  For example, when
+invoked as
+
+   tar -cf a.tar . --exclude '*.o'
+
+tar will create the archive, but will exit with status 2, having
+issued the following error message
+
+   tar: The following options were used after non-optional
+   arguments in archive create or update mode.  These options are
+   positional and affect only arguments that follow them.  Please,
+   rearrange them properly.
+   tar: --exclude '*.o' has no effect
+   tar: Exiting with failure status due to previous errors
+
+* --numeric-owner now affects private headers too.
+
+This helps the output of 'tar' to be more deterministic.
+
+* Fixed the --delay-directory-restore option
+
+In some cases tar would restore the directory permissions too early,
+causing subsequent link extractions in that directory to fail.
+
+* The --warnings=failed-read option
+
+This new warning control option suppresses warning messages about
+unreadable files and directories. It has effect only if used together
+with the --ignore-failed-read option.
+
+* The --warnings=none option now suppresses all warnings
+
+This includes warnings about unreadable files produced when
+--ignore-failed-read is in effect. To output these, use
+--warnings=none --warnings=no-failed-read.
+
+* Fix reporting of hardlink mismatches during compare
+
+Tar reported incorrect target file name in the 'Not linked to'
+diagnostic message.
+
+\f
+version 1.29 - Sergey Poznyakoff, 2016-05-16
+
+* New options: --verbatim-files-from, --no-verbatim-files-from
+
+The --verbatim-files-from option instructs tar to treat each line read
+from a file list as a file name, even if it starts with a dash.
+
+File lists are supplied with the --files-from (-T) option.  By
+default, each line read from a file list is first stripped off the
+leading and trailing whitespace and, if the result begins with a dash,
+it is treated as tar command line option.
+
+Use the --verbatim-files-from option to disable this special handling.
+This facilitates the use of tar with file lists created automatically
+(e.g. by find(1) command).
+
+This option affects all --files-from options that occur after it in
+the command line.  Its effect is reverted by the
+--no-verbatim-files-from option.
+
+* --null option reads file names verbatim
+
+The --null option implies --verbatim-files-from.  I.e. each line
+read from null-delimited file lists is treated as a file name.
+
+This restores the documented behavior, which was broken in version
+1.27.
+
+* New options: --owner-map=FILE and --group-map=FILE
+
+These two options provide fine-grained control over what user/group
+names (or IDs) should be mapped when adding files to archive.
+
+For both options, FILE is a plain text file with user or group
+mappings.  Empty lines are ignored.  Comments are introduced with
+# sign (unless quoted) and extend to the end of the corresponding
+line.  Each non-empty line defines translation for a single UID (GID).
+It must consist of two fields, delimited by any amount of whitespace:
+
+     OLDNAME NEWNAME[:NEWID]
+
+OLDNAME is either a valid user (group) name or a ID prefixed with +.  Unless
+NEWID is supplied, NEWNAME must also be either a valid name or a
++ID.  Otherwise, both NEWNAME and NEWID need not be listed in the
+system user database.
+
+* New option --clamp-mtime
+
+The new --clamp-mtime option changes 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
+reference (and thus reproducible) timestamps for the latter is good
+enough.
+
+See <https://wiki.debian.org/ReproducibleBuilds> for more information.
+
+* Deprecated --preserve option removed
+
+* Sparse file detection
+
+Tar now uses SEEK_DATA/SEEK_HOLE on systems that support it.  This
+allows for considerable speed-up in sparse-file detection.
+
+New option --hole-detection is provided, that allows the user to
+select the algorithm used for hole detection.  Available arguments
+are:
+
+  --hole-detection=seek
+     Use lseek(2) SEEK_DATA and SEEK_HOLE "whence" parameters.
+
+  --hole-detection=raw
+     Scan entire file before storing it to determine where holes
+     are located.
+
+The default is to use "seek" whenever possible, and fall back to
+"raw" otherwise.
+
+\f
+version 1.28, 2014-07-28
+
+* New checkpoint action: totals
+
+The --checkpoint-action=totals option instructs tar to output the
+total number of bytes transferred at each checkpoint.
+
+* Extended checkpoint format specification.
+
+New conversion specifiers are implemented.  Some of them take
+optional arguments, supplied in curly braces between the percent
+sign and the specifier letter.
+
+  %d        -  Number of seconds since tar started.
+  %{r,w,d}T -  I/O totals; optional arguments supply prefixes
+               to be used before number of bytes read, written and
+              deleted, correspondingly.
+  %{FMT}t   -  Current local time using FMT as strftime(3) format.
+               If {FMT} is omitted, use %c.
+  %{N}*     -  Pad output with spaces to the Nth column, or to the
+               current screen width, if {N} is not given.
+  %c        -  A shortcut for "%{%Y-%m-%d %H:%M:%S}t: %ds, %{read,wrote}T%*\r"
+
+* New option --one-top-level
+
+The option --one-top-level tells tar to extract all files into a
+subdirectory named by the base name of the archive (minus standard
+compression suffixes recognizable by --auto-compress).  When used with
+an argument, as in --one-top-level=DIR, the files are extracted into the
+supplied DIRectory.  This ensures that no archive members are
+extracted outside of the specified directory, even if the archive is
+crafted so as to put them elsewhere.
+
+* New option --sort
+
+The --sort=ORDER option instructs tar to sort directory entries
+according to ORDER.  It takes effect when creating archives.
+Available ORDERs are: none (the default), name and inode.  The
+latter may be absent, if the underlying system does not provide
+the necessary information.
+
+Using --sort=name ensures the member ordering in the created archive
+is uniform and reproducible.  Using --sort=inode reduces the number
+of disk seeks made when creating the archive and thus can considerably
+speed up archivation.
+
+* New exclusion options
+
+  --exclude-ignore=FILE   Before dumping a directory check if it
+                          contains FILE, and if so read exclude
+                          patterns for this directory from FILE.
+  --exclude-ignore-recursive=FILE
+                          Same as above, but the exclusion patterns
+                          read from FILE remain in effect for any
+                         subdirectory, recursively.
+  --exclude-vcs-ignores   Read exclude tags from VCS ignore files,
+                          where such files exist.  Supported VCS's
+                          are: CVS, Git, Bazaar, Mercurial.
+
+
+* Tar refuses to read input from and write output to a tty device.
+
+* Manpages
+
+This release includes official tar(1) and rmt(8) manpages.
+Distribution maintainers are kindly asked to use these instead of the
+home-made pages they have been providing so far.
+
+\f
+version 1.27.1 - Sergey Poznyakoff, 2013-11-17
+
+* Bug fixes
+
+* Fix unquoting of file names obtained via the -T option.
+
+* Fix GNU long link header timestamp (backward compatibility).
+
+* Fix extracting sparse members from star archives.
+
+\f
+version 1.27 - Sergey Poznyakoff, 2013-10-05
 
 * Bug fixes
 
@@ -50,8 +405,43 @@ Additionally, the options --xattrs-include and --xattrs-exclude allow
 you to selectively control for which files to store (or extract) the
 extended attributes.
 
+* Passing command line arguments to external commands.
+
+Any option taking a command name as its argument now accepts a full
+command line as well.  Thus, it is now possible to pass additional
+arguments to invoked programs.  The affected options are:
+
+  --checkpoint-action=exec
+  -I, --use-compress-program
+  -F, --info-script
+  --to-command
+
+Furthermore, if any additional information is supplied to such a
+command via environment variables, these variables can now be used in
+the command line itself.  Care should be taken to escape them, to
+prevent from being expanded too early, for example:
+
+  tar -x -f a.tar --info-script='changevol $TAR_ARCHIVE $TAR_VOLUME'
+
 * New configure option --enable-gcc-warnings, intended for debugging.
 
+* New warning control option --warning=[no-]record-size
+
+On extraction, this option controls whether to display actual record
+size, if it differs from the default.
+
+* New command line option --keep-directory-symlink
+
+By default, if trying to extract a directory from the archive,
+tar discovers that the corresponding file name already exists and is a
+symbolic link, it first unlinks the entry, and then extracts the directory.
+
+This option disables this behavior and instructs tar to follow
+symlinks to directories when extracting from the archive.
+
+It is mainly intended to provide compatibility with the Slackware
+installation scripts.
+
 \f
 version 1.26 - Sergey Poznyakoff, 2011-03-12
 
@@ -254,7 +644,7 @@ Modification times in ustar header blocks of extended headers
 are set to mtimes of the corresponding archive members.  This
 can be overridden by the
 
-  --pax-opion='exthdr.mtime=STRING'
+  --pax-option='exthdr.mtime=STRING'
 
 command line option.  The STRING is either number of seconds since
 the Epoch or a "Time reference" (see below).
@@ -264,7 +654,7 @@ headers are set to the time when tar was invoked.
 
 This can be overridden by the
 
-  --pax-opion='globexthdr.mtime=STRING'
+  --pax-option='globexthdr.mtime=STRING'
 
 command line option.  The STRING is either number of seconds since
 the Epoch or a "Time reference" (see below).
@@ -1390,7 +1780,7 @@ Versions 1.07 back to 1.00 by Jay Fenlason.
 
 \f
 
-Copyright 1994-2001, 2003-2010, 2013 Free Software Foundation, Inc.
+Copyright 1994-2022 Free Software Foundation, Inc.
 
 This file is part of GNU tar.
 
@@ -1410,7 +1800,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 Local variables:
 mode: outline
 paragraph-separate: "[ \f]*$"
-eval: (add-hook 'write-file-hooks 'time-stamp)
+eval: (add-hook 'write-file-functions #'time-stamp nil t)
 time-stamp-start: "changes. "
 time-stamp-format: "%:y-%02m-%02d"
 time-stamp-end: "\n"