diff options
author | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 13:49:04 -0700 |
---|---|---|
committer | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 17:38:18 -0700 |
commit | 56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch) | |
tree | 3f91093cdb475e565ae857f1c5a7fd339e2d781e /app-arch/tar/files | |
download | gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2 gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip |
proj/gentoo: Initial commit
This commit represents a new era for Gentoo:
Storing the gentoo-x86 tree in Git, as converted from CVS.
This commit is the start of the NEW history.
Any historical data is intended to be grafted onto this point.
Creation process:
1. Take final CVS checkout snapshot
2. Remove ALL ChangeLog* files
3. Transform all Manifests to thin
4. Remove empty Manifests
5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$
5.1. Do not touch files with -kb/-ko keyword flags.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests
X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project
X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration
X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn
X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts
X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration
X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging
X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'app-arch/tar/files')
-rw-r--r-- | app-arch/tar/files/rmt | 8 | ||||
-rw-r--r-- | app-arch/tar/files/tar-1.26-no-gets.patch | 22 | ||||
-rw-r--r-- | app-arch/tar/files/tar-1.26-xattr.patch | 931 | ||||
-rw-r--r-- | app-arch/tar/files/tar-1.27.1-recursion_norecursion.patch | 25 | ||||
-rw-r--r-- | app-arch/tar/files/tar-1.27.1-xattr_build_fix.patch | 196 | ||||
-rw-r--r-- | app-arch/tar/files/tar-1.28-concat-listed.patch | 117 | ||||
-rw-r--r-- | app-arch/tar/files/tar-1.28-xattr.patch | 36 | ||||
-rw-r--r-- | app-arch/tar/files/tar.1 | 813 | ||||
-rw-r--r-- | app-arch/tar/files/tar.1-1.27 | 388 |
9 files changed, 2536 insertions, 0 deletions
diff --git a/app-arch/tar/files/rmt b/app-arch/tar/files/rmt new file mode 100644 index 000000000000..15ed6aa91fad --- /dev/null +++ b/app-arch/tar/files/rmt @@ -0,0 +1,8 @@ +#!/bin/sh +# +# This is not a mistake. This shell script (/etc/rmt) has been provided +# for compatibility with other Unix-like systems, some of which have +# utilities that expect to find (and execute) rmt in the /etc directory +# on remote systems. +# +exec rmt "$@" diff --git a/app-arch/tar/files/tar-1.26-no-gets.patch b/app-arch/tar/files/tar-1.26-no-gets.patch new file mode 100644 index 000000000000..a677af11d370 --- /dev/null +++ b/app-arch/tar/files/tar-1.26-no-gets.patch @@ -0,0 +1,22 @@ +hack until gzip pulls a newer gnulib version + +From 66712c23388e93e5c518ebc8515140fa0c807348 Mon Sep 17 00:00:00 2001 +From: Eric Blake <eblake@redhat.com> +Date: Thu, 29 Mar 2012 13:30:41 -0600 +Subject: [PATCH] stdio: don't assume gets any more + +Gnulib intentionally does not have a gets module, and now that C11 +and glibc have dropped it, we should be more proactive about warning +any user on a platform that still has a declaration of this dangerous +interface. + +--- a/gnu/stdio.in.h ++++ b/gnu/stdio.in.h +@@ -125,7 +125,6 @@ + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ + #undef gets +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); + + #if @GNULIB_FOPEN@ + # if @REPLACE_FOPEN@ diff --git a/app-arch/tar/files/tar-1.26-xattr.patch b/app-arch/tar/files/tar-1.26-xattr.patch new file mode 100644 index 000000000000..7986828ef519 --- /dev/null +++ b/app-arch/tar/files/tar-1.26-xattr.patch @@ -0,0 +1,931 @@ +https://bugs.gentoo.org/382067 + +add optional xattr support + +--- a/configure.ac ++++ b/configure.ac +@@ -223,6 +223,20 @@ AC_CHECK_TYPE(iconv_t,:, + #endif + ]) + ++AC_ARG_ENABLE(xattr, ++ AC_HELP_STRING([--enable-xattr], ++ [enable Extended Attribute support (disabled by default)]), ++ [xattr_enabled=$enableval], ++ [xattr_enabled=no]) ++ ++if test "x$xattr_enabled" = xyes; then ++ AC_CHECK_HEADERS(attr/xattr.h) ++ AC_CHECK_FUNCS(getxattr fgetxattr lgetxattr \ ++ setxattr fsetxattr lsetxattr \ ++ listxattr flistxattr llistxattr, ++ AC_DEFINE(HAVE_XATTRS,1,[Define if we have a working extended attributes]),) ++fi ++ + # Gettext. + AM_GNU_GETTEXT([external], [need-formatstring-macros]) + AM_GNU_GETTEXT_VERSION([0.16]) +--- a/doc/tar.texi ++++ b/doc/tar.texi +@@ -3002,6 +3002,10 @@ mechanism. + Treat all input file or member names literally, do not interpret + escape sequences. @xref{input name quoting}. + ++@opsummary{no-xattrs} ++@item --no-xattrs ++Causes @command{tar} not to store and not to extract xattrs. @xref{Attributes}. ++ + @opsummary{no-wildcards} + @item --no-wildcards + Do not use wildcards. +@@ -3447,6 +3451,10 @@ Enable or disable warning messages identified by @var{keyword}. The + messages are suppressed if @var{keyword} is prefixed with @samp{no-}. + @xref{warnings}. + ++@opsummary{xattrs} ++@item --xattrs ++Causes @command{tar} to store xattrs. @xref{Attributes}. ++ + @opsummary{wildcards} + @item --wildcards + Use wildcards when matching member names with patterns. +@@ -8659,6 +8667,8 @@ implementation able to read @samp{ustar} archives will be able to read + most @samp{posix} archives as well, with the only exception that any + additional information (such as long file names etc.) will in such + case be extracted as plain text files along with the files it refers to. ++This is the only format that can store ACLs, SELinux context and extended ++attributes. + + This archive format will be the default format for future versions + of @GNUTAR{}. +@@ -9293,6 +9303,20 @@ Same as both @option{--same-permissions} and @option{--same-order}. + + This option is deprecated, and will be removed in @GNUTAR{} version 1.23. + ++@opindex xattrs ++@item --xattrs ++This option causes @command{tar} to store the current extended attributes in ++the archive. ++ ++The @option{--xattrs} option has no equivalent short option name. ++ ++@opindex no-xattrs ++@item --no-xattrs ++This option causes @command{tar} not to store the current extended attributes in ++the archive and not to extract any extended attributes in an archive. ++ ++The @option{--no-xattrs} option has no equivalent short option name. ++ + @end table + + @node Portability +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -20,7 +20,7 @@ + + bin_PROGRAMS = tar + +-noinst_HEADERS = arith.h common.h tar.h ++noinst_HEADERS = arith.h common.h tar.h xattrs.h + tar_SOURCES = \ + buffer.c\ + checkpoint.c\ +@@ -42,10 +42,11 @@ tar_SOURCES = \ + unlink.c\ + update.c\ + utf8.c\ +- warning.c ++ warning.c\ ++ xattrs.c + + INCLUDES = -I$(top_srcdir)/gnu -I../ -I../gnu -I$(top_srcdir)/lib -I../lib + + LDADD = ../lib/libtar.a ../gnu/libgnu.a $(LIBINTL) $(LIBICONV) + +-tar_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) ++tar_LDADD = $(LIBS) $(LDADD) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) +--- a/src/common.h ++++ b/src/common.h +@@ -253,6 +253,9 @@ GLOBAL int same_owner_option; + /* If positive, preserve permissions when extracting. */ + GLOBAL int same_permissions_option; + ++/* If positive, save the user and root xattrs. */ ++GLOBAL int xattrs_option; ++ + /* When set, strip the given number of file name components from the file name + before extracting */ + GLOBAL size_t strip_name_components; +@@ -707,6 +710,9 @@ extern char *output_start; + + void update_archive (void); + ++/* Module attrs.c. */ ++#include "xattrs.h" ++ + /* Module xheader.c. */ + + void xheader_decode (struct tar_stat_info *stat); +@@ -727,6 +733,12 @@ bool xheader_string_end (struct xheader *xhdr, char const *keyword); + bool xheader_keyword_deleted_p (const char *kw); + char *xheader_format_name (struct tar_stat_info *st, const char *fmt, + size_t n); ++void xheader_xattr_init (struct tar_stat_info *st); ++void xheader_xattr_free (struct xattr_array *vals, size_t sz); ++void xheader_xattr_copy (const struct tar_stat_info *st, ++ struct xattr_array **vals, size_t *sz); ++void xheader_xattr_add (struct tar_stat_info *st, ++ const char *key, const char *val, size_t len); + + /* Module system.c */ + +--- a/src/create.c ++++ b/src/create.c +@@ -936,6 +936,21 @@ start_header (struct tar_stat_info *st) + GNAME_TO_CHARS (st->gname, header->header.gname); + } + ++ if (archive_format == POSIX_FORMAT) ++ { ++ if (xattrs_option > 0) ++ { ++ size_t scan_xattr = 0; ++ struct xattr_array *xattr_map = st->xattr_map; ++ ++ while (scan_xattr < st->xattr_map_size) ++ { ++ xheader_store (xattr_map[scan_xattr].xkey, st, &scan_xattr); ++ ++scan_xattr; ++ } ++ } ++ } ++ + return header; + } + +@@ -1711,6 +1726,11 @@ dump_file0 (struct tar_stat_info *st, char const *name, char const *p) + bool ok; + struct stat final_stat; + ++ if (fd == 0) ++ xattrs_xattrs_get (st, p, -1); ++ else ++ xattrs_xattrs_get (st, p, fd); ++ + if (is_dir) + { + const char *tag_file_name; +@@ -1829,6 +1849,8 @@ dump_file0 (struct tar_stat_info *st, char const *name, char const *p) + if (NAME_FIELD_SIZE - (archive_format == OLDGNU_FORMAT) < size) + write_long_link (st); + ++ xattrs_xattrs_get (st, p, -1); ++ + block_ordinal = current_block_ordinal (); + st->stat.st_size = 0; /* force 0 size on symlink */ + header = start_header (st); +@@ -1847,11 +1869,20 @@ dump_file0 (struct tar_stat_info *st, char const *name, char const *p) + } + #endif + else if (S_ISCHR (st->stat.st_mode)) +- type = CHRTYPE; ++ { ++ type = CHRTYPE; ++ xattrs_xattrs_get (st, p, -1); ++ } + else if (S_ISBLK (st->stat.st_mode)) +- type = BLKTYPE; ++ { ++ type = BLKTYPE; ++ xattrs_xattrs_get (st, p, -1); ++ } + else if (S_ISFIFO (st->stat.st_mode)) +- type = FIFOTYPE; ++ { ++ type = FIFOTYPE; ++ xattrs_xattrs_get (st, p, -1); ++ } + else if (S_ISSOCK (st->stat.st_mode)) + { + WARNOPT (WARN_FILE_IGNORED, +--- a/src/extract.c ++++ b/src/extract.c +@@ -97,6 +97,9 @@ struct delayed_set_stat + /* Directory that the name is relative to. */ + int change_dir; + ++ /* extended attributes*/ ++ size_t xattr_map_size; /* Size of the xattr map */ ++ struct xattr_array *xattr_map; + /* Length and contents of name. */ + size_t file_name_len; + char file_name[1]; +@@ -134,6 +137,9 @@ struct delayed_link + hard-linked together. */ + struct string_list *sources; + ++ size_t xattr_map_size; /* Size of the xattr map */ ++ struct xattr_array *xattr_map; ++ + /* The desired target of the desired link. */ + char target[1]; + }; +@@ -335,6 +341,8 @@ set_stat (char const *file_name, + utime_error (file_name); + } + ++ xattrs_xattrs_set (st, file_name, typeflag); ++ + if (0 < same_owner_option && ! interdir) + { + /* Some systems allow non-root users to give files away. Once this +@@ -431,6 +439,13 @@ delay_set_stat (char const *file_name, struct tar_stat_info const *st, + data->atflag = atflag; + data->after_links = 0; + data->change_dir = chdir_current; ++ if (st) ++ xheader_xattr_copy (st, &data->xattr_map, &data->xattr_map_size); ++ else ++ { ++ data->xattr_map = NULL; ++ data->xattr_map_size = 0; ++ } + strcpy (data->file_name, file_name); + delayed_set_stat_head = data; + if (must_be_dot_or_slash (file_name)) +@@ -673,6 +688,31 @@ maybe_recoverable (char *file_name, bool regular, bool *interdir_made) + return RECOVER_NO; + } + ++/* Restore stat extended attributes (xattr) for FILE_NAME, using information ++ given in *ST. Restore before extraction because they may affect layout. ++ If not restoring permissions, invert the ++ INVERT_PERMISSIONS bits from the file's current permissions. ++ TYPEFLAG specifies the type of the file. ++ FILE_CREATED indicates set_xattr has created the file */ ++static int ++set_xattr (char const *file_name, struct tar_stat_info const *st, ++ mode_t invert_permissions, char typeflag, int *file_created) ++{ ++ int status = 0; ++ bool interdir_made = false; ++ ++ if ((xattrs_option >= 0) && st->xattr_map_size) { ++ mode_t mode = current_stat_info.stat.st_mode & MODE_RWX & ~ current_umask; ++ ++ do ++ status = mknod (file_name, mode ^ invert_permissions, 0); ++ while (status && maybe_recoverable ((char *)file_name, false, &interdir_made)); ++ xattrs_xattrs_set (st, file_name, typeflag); ++ *file_created = 1; ++ } ++ return(status); ++} ++ + /* Fix the statuses of all directories whose statuses need fixing, and + which are not ancestors of FILE_NAME. If AFTER_LINKS is + nonzero, do this for all such directories; otherwise, stop at the +@@ -733,12 +773,15 @@ apply_nonancestor_delayed_set_stat (char const *file_name, bool after_links) + sb.stat.st_gid = data->gid; + sb.atime = data->atime; + sb.mtime = data->mtime; ++ sb.xattr_map = data->xattr_map; ++ sb.xattr_map_size = data->xattr_map_size; + set_stat (data->file_name, &sb, + -1, current_mode, current_mode_mask, + DIRTYPE, data->interdir, data->atflag); + } + + delayed_set_stat_head = data->next; ++ xheader_xattr_free (data->xattr_map, data->xattr_map_size); + free (data); + } + } +@@ -854,6 +897,7 @@ extract_dir (char *file_name, int typeflag) + + static int + open_output_file (char const *file_name, int typeflag, mode_t mode, ++ int file_created, + mode_t *current_mode, mode_t *current_mode_mask) + { + int fd; +@@ -864,6 +908,10 @@ open_output_file (char const *file_name, int typeflag, mode_t mode, + ? O_TRUNC | (dereference_option ? 0 : O_NOFOLLOW) + : O_EXCL)); + ++ /* File might be created in set_xattr. So clear O_EXCL to avoid open() failure */ ++ if (file_created) ++ openflag = openflag & ~O_EXCL; ++ + if (typeflag == CONTTYPE) + { + static int conttype_diagnosed; +@@ -934,6 +982,7 @@ extract_file (char *file_name, int typeflag) + bool interdir_made = false; + mode_t mode = (current_stat_info.stat.st_mode & MODE_RWX + & ~ (0 < same_owner_option ? S_IRWXG | S_IRWXO : 0)); ++ mode_t invert_permissions = 0 < same_owner_option ? mode & (S_IRWXG | S_IRWXO) : 0; + mode_t current_mode = 0; + mode_t current_mode_mask = 0; + +@@ -950,7 +999,17 @@ extract_file (char *file_name, int typeflag) + } + else + { ++ int file_created = 0; ++ if (set_xattr (file_name, ¤t_stat_info, invert_permissions, ++ typeflag, &file_created)) ++ { ++ skip_member (); ++ open_error (file_name); ++ return 1; ++ } ++ + while ((fd = open_output_file (file_name, typeflag, mode, ++ file_created, + ¤t_mode, ¤t_mode_mask)) + < 0) + { +@@ -1091,6 +1150,7 @@ create_placeholder_file (char *file_name, bool is_symlink, bool *interdir_made) + + strlen (file_name) + 1); + p->sources->next = 0; + strcpy (p->sources->string, file_name); ++ xheader_xattr_copy (¤t_stat_info, &p->xattr_map, &p->xattr_map_size); + strcpy (p->target, current_stat_info.link_name); + + h = delayed_set_stat_head; +@@ -1525,6 +1585,8 @@ apply_delayed_links (void) + st1.stat.st_gid = ds->gid; + st1.atime = ds->atime; + st1.mtime = ds->mtime; ++ st1.xattr_map = ds->xattr_map; ++ st1.xattr_map_size = ds->xattr_map_size; + set_stat (source, &st1, -1, 0, 0, SYMTYPE, + false, AT_SYMLINK_NOFOLLOW); + valid_source = source; +@@ -1539,6 +1601,8 @@ apply_delayed_links (void) + sources = next; + } + ++ xheader_xattr_free (ds->xattr_map, ds->xattr_map_size); ++ + { + struct delayed_link *next = ds->next; + free (ds); +--- a/src/list.c ++++ b/src/list.c +@@ -604,6 +604,8 @@ decode_header (union block *header, struct tar_stat_info *stat_info, + assign_string (&stat_info->gname, + header->header.gname[0] ? header->header.gname : NULL); + ++ xheader_xattr_init (stat_info); ++ + if (format == OLDGNU_FORMAT && incremental_option) + { + stat_info->atime.tv_sec = TIME_FROM_HEADER (header->oldgnu_header.atime); +--- a/src/tar.c ++++ b/src/tar.c +@@ -304,6 +304,7 @@ enum + NO_UNQUOTE_OPTION, + NO_WILDCARDS_MATCH_SLASH_OPTION, + NO_WILDCARDS_OPTION, ++ NO_XATTR_OPTION, + NULL_OPTION, + NUMERIC_OWNER_OPTION, + OCCURRENCE_OPTION, +@@ -340,7 +341,8 @@ enum + VOLNO_FILE_OPTION, + WARNING_OPTION, + WILDCARDS_MATCH_SLASH_OPTION, +- WILDCARDS_OPTION ++ WILDCARDS_OPTION, ++ XATTR_OPTION + }; + + const char *argp_program_version = "tar (" PACKAGE_NAME ") " VERSION; +@@ -516,6 +518,10 @@ static struct argp_option options[] = { + {"preserve-order", 's', 0, 0, + N_("sort names to extract to match archive"), GRID+1 }, + {"same-order", 0, 0, OPTION_ALIAS, NULL, GRID+1 }, ++ {"xattrs", XATTR_OPTION, 0, 0, ++ N_("Save the user/root xattrs to the archive"), GRID+1 }, ++ {"no-xattrs", NO_XATTR_OPTION, 0, 0, ++ N_("Don't extract the user/root xattrs from the archive"), GRID+1 }, + {"preserve", PRESERVE_OPTION, 0, 0, + N_("same as both -p and -s"), GRID+1 }, + {"delay-directory-restore", DELAY_DIRECTORY_RESTORE_OPTION, 0, 0, +@@ -2079,6 +2085,15 @@ parse_opt (int key, char *arg, struct argp_state *state) + same_permissions_option = -1; + break; + ++ case XATTR_OPTION: ++ set_archive_format ("posix"); ++ xattrs_option = 1; ++ break; ++ ++ case NO_XATTR_OPTION: ++ xattrs_option = -1; ++ break; ++ + case RECURSION_OPTION: + recursion_option = FNM_LEADING_DIR; + break; +@@ -2461,6 +2476,15 @@ decode_options (int argc, char **argv) + || subcommand_option != LIST_SUBCOMMAND)) + USAGE_ERROR ((0, 0, _("--pax-option can be used only on POSIX archives"))); + ++ /* star create's non-POSIX typed archives with xattr support, so allow the ++ extra headers */ ++ if ((xattrs_option > 0) ++ && archive_format != POSIX_FORMAT ++ && (subcommand_option != EXTRACT_SUBCOMMAND ++ || subcommand_option != DIFF_SUBCOMMAND ++ || subcommand_option != LIST_SUBCOMMAND)) ++ USAGE_ERROR ((0, 0, _("--xattrs can be used only on POSIX archives"))); ++ + /* If ready to unlink hierarchies, so we are for simpler files. */ + if (recursive_unlink_option) + old_files_option = UNLINK_FIRST_OLD_FILES; +@@ -2713,6 +2737,7 @@ void + tar_stat_destroy (struct tar_stat_info *st) + { + tar_stat_close (st); ++ xheader_xattr_free (st->xattr_map, st->xattr_map_size); + free (st->orig_file_name); + free (st->file_name); + free (st->link_name); +--- a/src/tar.h ++++ b/src/tar.h +@@ -276,6 +276,14 @@ struct xheader + uintmax_t string_length; + }; + ++/* Information about xattrs for a file. */ ++struct xattr_array ++ { ++ char *xkey; ++ char *xval_ptr; ++ size_t xval_len; ++ }; ++ + struct tar_stat_info + { + char *orig_file_name; /* name of file read from the archive header */ +@@ -287,6 +295,7 @@ struct tar_stat_info + + char *uname; /* user name of owner */ + char *gname; /* group name of owner */ ++ + struct stat stat; /* regular filesystem stat */ + + /* STAT doesn't always have access, data modification, and status +@@ -309,6 +318,9 @@ struct tar_stat_info + size_t sparse_map_size; /* Size of the sparse map */ + struct sp_array *sparse_map; + ++ size_t xattr_map_size; /* Size of the xattr map */ ++ struct xattr_array *xattr_map; ++ + /* Extended headers */ + struct xheader xhdr; + +--- /dev/null ++++ b/src/xattrs.c +@@ -0,0 +1,181 @@ ++/* Create a tar archive. ++ ++ Copyright (C) 2006 Free Software Foundation, Inc. ++ ++ Written by James Antill, on 2006-07-27. ++ ++ This program is free software; you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published by the ++ Free Software Foundation; either version 2, or (at your option) any later ++ version. ++ ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General ++ Public License for more details. ++ ++ You should have received a copy of the GNU General Public License along ++ with this program; if not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ ++ ++#include <system.h> ++ ++#include <quotearg.h> ++ ++#include "common.h" ++ ++ ++#ifndef HAVE_ATTR_XATTR_H ++# undef HAVE_XATTRS ++#endif ++ ++#ifdef HAVE_ATTR_XATTR_H ++# include <attr/xattr.h> ++#endif ++ ++ ++void xattrs_xattrs_get (struct tar_stat_info *st, char const *file_name, int fd) ++{ ++ if (xattrs_option > 0) ++ { /* get all xattrs ... this include security.* and system.* if ++ available. We filter them here, but we have to filter them ++ in xattrs_xattrs_set() anyway. ++ */ ++ static ssize_t xsz = 1024; ++ static char *xatrs = NULL; ++ ssize_t xret = -1; ++ ++#ifndef HAVE_XATTRS ++ static int done = 0; ++ if ((xattrs_option > 0) && !done) ++ WARN ((0, 0, _("Xattr support requested, but not available"))); ++ done = 1; ++#else ++ ++ if (!xatrs) xatrs = xmalloc (xsz); ++ ++ while (((fd == -1) ? ++ ((xret = llistxattr (file_name, xatrs, xsz)) == -1) : ++ ((xret = flistxattr (fd, xatrs, xsz)) == -1)) && ++ (errno == ERANGE)) ++ { ++ xsz <<= 1; ++ xatrs = xrealloc (xatrs, xsz); ++ } ++ ++ if (xret == -1) ++ call_arg_warn ((fd == -1) ? "llistxattrs" : "flistxattrs", file_name); ++ else ++ { ++ const char *attr = xatrs; ++ static ssize_t asz = 1024; ++ static char *val = NULL; ++ ++ if (!val) val = xmalloc (asz); ++ ++ while (xret > 0) ++ { ++ size_t len = strlen (attr); ++ ssize_t aret = 0; ++ ++ /* Archive all xattrs during creation, decide at extraction time ++ * which ones are of interest/use for the target filesystem. */ ++ while (((fd == -1) ? ++ ((aret = lgetxattr (file_name, attr, val, asz)) == -1) : ++ ((aret = fgetxattr (fd, attr, val, asz)) == -1)) && ++ (errno == ERANGE)) ++ { ++ asz <<= 1; ++ val = xrealloc (val, asz); ++ } ++ ++ if (aret != -1) ++ xheader_xattr_add (st, attr, val, aret); ++ else if (errno != ENOATTR) ++ call_arg_warn ((fd==-1) ? "lgetxattr" : "fgetxattr", file_name); ++ ++ attr += len + 1; ++ xret -= len + 1; ++ } ++ } ++#endif ++ } ++} ++ ++static void xattrs__fd_set (struct tar_stat_info const *st, ++ char const *file_name, char typeflag, ++ const char *attr, ++ const char *ptr, size_t len) ++{ ++#ifdef HAVE_XATTRS ++ if (ptr) ++ { ++ const char *sysname = "setxattr"; ++ int ret = -1; ++ ++ if (typeflag != SYMTYPE) ++ ret = setxattr (file_name, attr, ptr, len, 0); ++ else ++ { ++ sysname = "lsetxattr"; ++ ret = lsetxattr (file_name, attr, ptr, len, 0); ++ } ++ ++ /* do not print warnings when SELinux is disabled */ ++ if ((ret == -1) && (errno != EPERM) && (errno != ENOTSUP)) ++ call_arg_error (sysname, file_name); ++ } ++#endif ++} ++ ++static char *skip_to_ext_fields (char *ptr) ++{ ++ ptr += strcspn (ptr, ":,\n"); /* skip tag name. Ie. user/group/default/mask */ ++ ++ if (*ptr != ':') ++ return (ptr); /* error? no user/group field */ ++ ++ptr; ++ ++ ptr += strcspn (ptr, ":,\n"); /* skip user/group name */ ++ ++ if (*ptr != ':') ++ return (ptr); /* error? no perms field */ ++ ++ptr; ++ ++ ptr += strcspn (ptr, ":,\n"); /* skip perms */ ++ ++ if (*ptr != ':') ++ return (ptr); /* no extra fields */ ++ ++ return (ptr); ++} ++ ++void xattrs_xattrs_set (struct tar_stat_info const *st, ++ char const *file_name, char typeflag) ++{ ++ if ((xattrs_option >= 0) && st->xattr_map_size) ++ { ++ size_t scan = 0; ++ ++#ifndef HAVE_XATTRS ++ static int done = 0; ++ if (!done) ++ WARN ((0, 0, _("Xattr support requested, but not available"))); ++ done = 1; ++#else ++ while (scan < st->xattr_map_size) ++ { ++ char *keyword = st->xattr_map[scan].xkey; ++ ++ /* assert (!memcpy (keyword, "SCHILY.xattr.", strlen("SCHILY.xattr."))); */ ++ keyword += strlen ("SCHILY.xattr."); ++ ++ xattrs__fd_set (st, file_name, typeflag, keyword, ++ st->xattr_map[scan].xval_ptr, ++ st->xattr_map[scan].xval_len); ++ ++ ++scan; ++ } ++#endif ++ } ++} +--- /dev/null ++++ b/src/xattrs.h +@@ -0,0 +1,6 @@ ++ ++extern void xattrs_xattrs_get (struct tar_stat_info *st, ++ char const *file_name, int fd); ++ ++extern void xattrs_xattrs_set (struct tar_stat_info const *st, ++ char const *file_name, char typeflag); +--- a/src/xheader.c ++++ b/src/xheader.c +@@ -460,6 +460,74 @@ xheader_write_global (struct xheader *xhdr) + } + } + ++void xheader_xattr_init (struct tar_stat_info *st) ++{ ++ st->xattr_map = NULL; ++ st->xattr_map_size = 0; ++} ++ ++void xheader_xattr_free (struct xattr_array *xattr_map, size_t xattr_map_size) ++{ ++ size_t scan = 0; ++ ++ while (scan < xattr_map_size) ++ { ++ free (xattr_map[scan].xkey); ++ free (xattr_map[scan].xval_ptr); ++ ++ ++scan; ++ } ++ free (xattr_map); ++} ++ ++static void xheader_xattr__add (struct xattr_array **xattr_map, ++ size_t *xattr_map_size, ++ const char *key, const char *val, size_t len) ++{ ++ size_t pos = (*xattr_map_size)++; ++ ++ *xattr_map = xrealloc (*xattr_map, ++ *xattr_map_size * sizeof (struct xattr_array)); ++ (*xattr_map)[pos].xkey = xstrdup (key); ++ (*xattr_map)[pos].xval_ptr = xmemdup (val, len + 1); ++ (*xattr_map)[pos].xval_len = len; ++} ++ ++void xheader_xattr_add (struct tar_stat_info *st, ++ const char *key, const char *val, size_t len) ++{ ++ size_t klen = strlen (key); ++ char *xkey = xmalloc (strlen("SCHILY.xattr.") + klen + 1); ++ char *tmp = xkey; ++ ++ tmp = stpcpy (tmp, "SCHILY.xattr."); ++ tmp = stpcpy (tmp, key); ++ ++ xheader_xattr__add (&st->xattr_map, &st->xattr_map_size, xkey, val, len); ++ ++ free (xkey); ++} ++ ++void xheader_xattr_copy (const struct tar_stat_info *st, ++ struct xattr_array **xattr_map, size_t *xattr_map_size) ++{ ++ size_t scan = 0; ++ ++ *xattr_map = NULL; ++ *xattr_map_size = 0; ++ ++ while (scan < st->xattr_map_size) ++ { ++ char *key = st->xattr_map[scan].xkey; ++ char *val = st->xattr_map[scan].xval_ptr; ++ size_t len = st->xattr_map[scan].xval_len; ++ ++ xheader_xattr__add (xattr_map, xattr_map_size, key, val, len); ++ ++ ++scan; ++ } ++} ++ + + /* General Interface */ + +@@ -473,6 +541,7 @@ struct xhdr_tab + struct xheader *, void const *data); + void (*decoder) (struct tar_stat_info *, char const *, char const *, size_t); + int flags; ++ bool prefix; + }; + + /* This declaration must be extern, because ISO C99 section 6.9.2 +@@ -489,8 +558,17 @@ locate_handler (char const *keyword) + struct xhdr_tab const *p; + + for (p = xhdr_tab; p->keyword; p++) +- if (strcmp (p->keyword, keyword) == 0) +- return p; ++ if (p->prefix) ++ { ++ if (strncmp (p->keyword, keyword, strlen(p->keyword)) == 0) ++ return p; ++ } ++ else ++ { ++ if (strcmp (p->keyword, keyword) == 0) ++ return p; ++ } ++ + return NULL; + } + +@@ -500,7 +578,7 @@ xheader_protected_pattern_p (const char *pattern) + struct xhdr_tab const *p; + + for (p = xhdr_tab; p->keyword; p++) +- if ((p->flags & XHDR_PROTECTED) && fnmatch (pattern, p->keyword, 0) == 0) ++ if (!p->prefix && (p->flags & XHDR_PROTECTED) && fnmatch (pattern, p->keyword, 0) == 0) + return true; + return false; + } +@@ -511,7 +589,7 @@ xheader_protected_keyword_p (const char *keyword) + struct xhdr_tab const *p; + + for (p = xhdr_tab; p->keyword; p++) +- if ((p->flags & XHDR_PROTECTED) && strcmp (p->keyword, keyword) == 0) ++ if (!p->prefix && (p->flags & XHDR_PROTECTED) && strcmp (p->keyword, keyword) == 0) + return true; + return false; + } +@@ -1470,6 +1548,27 @@ volume_filename_decoder (struct tar_stat_info *st, + } + + static void ++xattr_coder (struct tar_stat_info const *st , char const *keyword, ++ struct xheader *xhdr, void const *data) ++{ ++ struct xattr_array *xattr_map = st->xattr_map; ++ const size_t *off = data; ++ xheader_print_n (xhdr, keyword, ++ xattr_map[*off].xval_ptr, xattr_map[*off].xval_len); ++} ++ ++static void ++xattr_decoder (struct tar_stat_info *st, ++ char const *keyword, char const *arg, size_t size) ++{ ++ char *xstr = NULL; ++ ++ xstr = xmemdup (arg, size + 1); ++ xheader_xattr_add (st, keyword + strlen("SCHILY.xattr."), xstr, size); ++ free (xstr); ++} ++ ++static void + sparse_major_coder (struct tar_stat_info const *st, char const *keyword, + struct xheader *xhdr, void const *data) + { +@@ -1506,53 +1605,53 @@ sparse_minor_decoder (struct tar_stat_info *st, + } + + struct xhdr_tab const xhdr_tab[] = { +- { "atime", atime_coder, atime_decoder, 0 }, +- { "comment", dummy_coder, dummy_decoder, 0 }, +- { "charset", dummy_coder, dummy_decoder, 0 }, +- { "ctime", ctime_coder, ctime_decoder, 0 }, +- { "gid", gid_coder, gid_decoder, 0 }, +- { "gname", gname_coder, gname_decoder, 0 }, +- { "linkpath", linkpath_coder, linkpath_decoder, 0 }, +- { "mtime", mtime_coder, mtime_decoder, 0 }, +- { "path", path_coder, path_decoder, 0 }, +- { "size", size_coder, size_decoder, 0 }, +- { "uid", uid_coder, uid_decoder, 0 }, +- { "uname", uname_coder, uname_decoder, 0 }, ++ { "atime", atime_coder, atime_decoder, 0, false }, ++ { "comment", dummy_coder, dummy_decoder, 0, false }, ++ { "charset", dummy_coder, dummy_decoder, 0, false }, ++ { "ctime", ctime_coder, ctime_decoder, 0, false }, ++ { "gid", gid_coder, gid_decoder, 0, false }, ++ { "gname", gname_coder, gname_decoder, 0, false }, ++ { "linkpath", linkpath_coder, linkpath_decoder, 0, false }, ++ { "mtime", mtime_coder, mtime_decoder, 0, false }, ++ { "path", path_coder, path_decoder, 0, false }, ++ { "size", size_coder, size_decoder, 0, false }, ++ { "uid", uid_coder, uid_decoder, 0, false }, ++ { "uname", uname_coder, uname_decoder, 0, false }, + + /* Sparse file handling */ + { "GNU.sparse.name", path_coder, path_decoder, +- XHDR_PROTECTED }, ++ XHDR_PROTECTED, false }, + { "GNU.sparse.major", sparse_major_coder, sparse_major_decoder, +- XHDR_PROTECTED }, ++ XHDR_PROTECTED, false }, + { "GNU.sparse.minor", sparse_minor_coder, sparse_minor_decoder, +- XHDR_PROTECTED }, ++ XHDR_PROTECTED, false }, + { "GNU.sparse.realsize", sparse_size_coder, sparse_size_decoder, +- XHDR_PROTECTED }, ++ XHDR_PROTECTED, false }, + { "GNU.sparse.numblocks", sparse_numblocks_coder, sparse_numblocks_decoder, +- XHDR_PROTECTED }, ++ XHDR_PROTECTED, false }, + + /* tar 1.14 - 1.15.90 keywords. */ + { "GNU.sparse.size", sparse_size_coder, sparse_size_decoder, +- XHDR_PROTECTED }, ++ XHDR_PROTECTED, false }, + /* tar 1.14 - 1.15.1 keywords. Multiple instances of these appeared in 'x' + headers, and each of them was meaningful. It confilcted with POSIX specs, + which requires that "when extended header records conflict, the last one + given in the header shall take precedence." */ + { "GNU.sparse.offset", sparse_offset_coder, sparse_offset_decoder, +- XHDR_PROTECTED }, ++ XHDR_PROTECTED, false }, + { "GNU.sparse.numbytes", sparse_numbytes_coder, sparse_numbytes_decoder, +- XHDR_PROTECTED }, ++ XHDR_PROTECTED, false }, + /* tar 1.15.90 keyword, introduced to remove the above-mentioned conflict. */ + { "GNU.sparse.map", NULL /* Unused, see pax_dump_header() */, +- sparse_map_decoder, 0 }, ++ sparse_map_decoder, 0, false }, + + { "GNU.dumpdir", dumpdir_coder, dumpdir_decoder, +- XHDR_PROTECTED }, ++ XHDR_PROTECTED, false }, + + /* Keeps the tape/volume label. May be present only in the global headers. + Equivalent to GNUTYPE_VOLHDR. */ + { "GNU.volume.label", volume_label_coder, volume_label_decoder, +- XHDR_PROTECTED | XHDR_GLOBAL }, ++ XHDR_PROTECTED | XHDR_GLOBAL, false }, + + /* These may be present in a first global header of the archive. + They provide the same functionality as GNUTYPE_MULTIVOL header. +@@ -1561,11 +1660,14 @@ struct xhdr_tab const xhdr_tab[] = { + GNU.volume.offset keeps the offset of the start of this volume, + otherwise kept in oldgnu_header.offset. */ + { "GNU.volume.filename", volume_label_coder, volume_filename_decoder, +- XHDR_PROTECTED | XHDR_GLOBAL }, ++ XHDR_PROTECTED | XHDR_GLOBAL, false }, + { "GNU.volume.size", volume_size_coder, volume_size_decoder, +- XHDR_PROTECTED | XHDR_GLOBAL }, ++ XHDR_PROTECTED | XHDR_GLOBAL, false }, + { "GNU.volume.offset", volume_offset_coder, volume_offset_decoder, +- XHDR_PROTECTED | XHDR_GLOBAL }, ++ XHDR_PROTECTED | XHDR_GLOBAL, false }, ++ ++ /* xattrs use the star format. note we only save some variants... */ ++ { "SCHILY.xattr", xattr_coder, xattr_decoder, 0, true }, + +- { NULL, NULL, NULL, 0 } ++ { NULL, NULL, NULL, 0, false } + }; diff --git a/app-arch/tar/files/tar-1.27.1-recursion_norecursion.patch b/app-arch/tar/files/tar-1.27.1-recursion_norecursion.patch new file mode 100644 index 000000000000..47973c394baf --- /dev/null +++ b/app-arch/tar/files/tar-1.27.1-recursion_norecursion.patch @@ -0,0 +1,25 @@ +From 2bd9c15391b0bd6ef0bff76aebf09cfb53003199 Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff <gray@gnu.org> +Date: Thu, 09 Jan 2014 22:13:15 +0000 +Subject: Fix the use of --no-recursion and --recursion options. + +Each option remains in effect until cancelled by the next ocurrence +of its counterpart, as stated in the documentation. + +* src/names.c (name_next_elt): Restore recursion_option from the +value of matching_flags. +--- +diff --git a/src/names.c b/src/names.c +index fc9841e..7777dc1 100644 +--- a/src/names.c ++++ b/src/names.c +@@ -570,6 +570,7 @@ name_next_elt (int change_dirs) + + case NELT_FMASK: + matching_flags = ep->v.matching_flags; ++ recursion_option = matching_flags & FNM_LEADING_DIR; + name_list_advance (); + continue; + +-- +cgit v0.9.0.2 diff --git a/app-arch/tar/files/tar-1.27.1-xattr_build_fix.patch b/app-arch/tar/files/tar-1.27.1-xattr_build_fix.patch new file mode 100644 index 000000000000..14cf90a5f4cc --- /dev/null +++ b/app-arch/tar/files/tar-1.27.1-xattr_build_fix.patch @@ -0,0 +1,196 @@ +http://lists.gnu.org/archive/html/bug-tar/2013-12/msg00023.html +https://bugs.gentoo.org/489170 + +--- tar-1.27.1/configure 2013-11-17 17:18:39.000000000 +0100 ++++ tar-1.27.1/configure 2013-11-17 17:18:39.000000000 +0100 +@@ -33619,19 +33619,20 @@ + fi + + +- for ac_header in attr/xattr.h ++ for ac_header in sys/xattr.h attr/xattr.h + do : +- ac_fn_c_check_header_mongrel "$LINENO" "attr/xattr.h" "ac_cv_header_attr_xattr_h" "$ac_includes_default" +-if test "x$ac_cv_header_attr_xattr_h" = xyes; then : ++ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ++ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" ++if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +-#define HAVE_ATTR_XATTR_H 1 ++#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 + _ACEOF + + fi + + done + +- if test "$ac_cv_header_attr_xattr_h" = yes; then ++ if test "$ac_cv_header_sys_xattr_h" = yes -o "$ac_cv_header_attr_xattr_h" = yes; then + TAR_COND_XATTR_H_TRUE= + TAR_COND_XATTR_H_FALSE='#' + else +@@ -33639,30 +33640,130 @@ + TAR_COND_XATTR_H_FALSE= + fi + +- if test "$ac_cv_header_attr_xattr_h" = yes; then +- for ac_func in getxattr fgetxattr lgetxattr \ +- setxattr fsetxattr lsetxattr \ +- listxattr flistxattr llistxattr +-do : +- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +-if eval test \"x\$"$as_ac_var"\" = x"yes"; then : ++ ++ if test "$with_xattrs" != no; then ++ # If <sys/xattr.h> doesn't exist and <attr/xattr.h> does, ++ # then link against libattr.so and not libc ++ if test "$ac_cv_header_sys_xattr_h" = no -a "$ac_cv_header_attr_xattr_h" = yes; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgetxattr in -lattr" >&5 ++$as_echo_n "checking for fgetxattr in -lattr... " >&6; } ++if ${ac_cv_lib_attr_fgetxattr+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_check_lib_save_LIBS=$LIBS ++LIBS="-lattr $LIBS" ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char fgetxattr (); ++int ++main () ++{ ++return fgetxattr (); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_lib_attr_fgetxattr=yes ++else ++ ac_cv_lib_attr_fgetxattr=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++LIBS=$ac_check_lib_save_LIBS ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_attr_fgetxattr" >&5 ++$as_echo "$ac_cv_lib_attr_fgetxattr" >&6; } ++if test "x$ac_cv_lib_attr_fgetxattr" = xyes; then : + cat >>confdefs.h <<_ACEOF +-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 ++#define HAVE_LIBATTR 1 + _ACEOF +- # only when functions are present + +-$as_echo "#define HAVE_ATTR_XATTR_H 1" >>confdefs.h ++ LIBS="-lattr $LIBS" + +- if test "$with_xattrs" != no; then ++fi + +-$as_echo "#define HAVE_XATTRS /**/" >>confdefs.h ++ fi ++ have_functions=yes ++ for xattr_func in getxattr fgetxattr lgetxattr \ ++ setxattr fsetxattr lsetxattr \ ++ listxattr flistxattr llistxattr; do \ ++ as_ac_Search=`$as_echo "ac_cv_search_$xattr_func" | $as_tr_sh` ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing $xattr_func" >&5 ++$as_echo_n "checking for library containing $xattr_func... " >&6; } ++if eval \${$as_ac_Search+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_func_search_save_LIBS=$LIBS ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char $xattr_func (); ++int ++main () ++{ ++return $xattr_func (); ++ ; ++ return 0; ++} ++_ACEOF ++for ac_lib in '' attr; do ++ if test -z "$ac_lib"; then ++ ac_res="none required" ++ else ++ ac_res=-l$ac_lib ++ LIBS="-l$ac_lib $ac_func_search_save_LIBS" ++ fi ++ if ac_fn_c_try_link "$LINENO"; then : ++ eval "$as_ac_Search=\$ac_res" ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext ++ if eval \${$as_ac_Search+:} false; then : ++ break ++fi ++done ++if eval \${$as_ac_Search+:} false; then : + +- fi ++else ++ eval "$as_ac_Search=no" ++fi ++rm conftest.$ac_ext ++LIBS=$ac_func_search_save_LIBS ++fi ++eval ac_res=\$$as_ac_Search ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 ++$as_echo "$ac_res" >&6; } ++eval ac_res=\$$as_ac_Search ++if test "$ac_res" != no; then : ++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + ++else ++ have_functions=no + fi +-done + ++ test $have_functions = no && break ++ done ++ if test $have_functions = yes; then ++ ++$as_echo "#define HAVE_XATTRS 1" >>confdefs.h ++ ++ else ++ test "$with_xattrs" = yes && as_fn_error $? "xattr support requested but not found." "$LINENO" 5 ++ fi + fi + + +--- tar-1.27.1/lib/xattr-at.h 2013-03-14 21:18:10.000000000 +0100 ++++ tar-1.27.1/lib/xattr-at.h 2013-03-14 21:18:10.000000000 +0100 +@@ -20,7 +20,15 @@ + #define XATTRS_AT_H + + #include <sys/types.h> +-#include <attr/xattr.h> ++#if defined(HAVE_SYS_XATTR_H) ++# include <sys/xattr.h> ++#elif defined(HAVE_ATTR_XATTR_H) ++# include <attr/xattr.h> ++#endif ++ ++#ifndef ENOATTR ++# define ENOATTR ENODATA /* No such attribute */ ++#endif + + /* These are the dir-fd-relative variants of the functions without the + "at" suffix. For example, setxattrat (AT_FDCWD, path, name, value, size, diff --git a/app-arch/tar/files/tar-1.28-concat-listed.patch b/app-arch/tar/files/tar-1.28-concat-listed.patch new file mode 100644 index 000000000000..28dc57824155 --- /dev/null +++ b/app-arch/tar/files/tar-1.28-concat-listed.patch @@ -0,0 +1,117 @@ +https://bugs.gentoo.org/546294 +https://lists.gnu.org/archive/html/bug-tar/2015-04/msg00006.html + +From 15c02c2b9d383446b3ea35dbea5a048e136b020d Mon Sep 17 00:00:00 2001 +From: Sergey Poznyakoff <gray@gnu.org.ua> +Date: Thu, 16 Apr 2015 13:02:10 +0300 +Subject: [PATCH] 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. +--- + src/common.h | 2 ++ + src/extract.c | 38 +++++++++++++++++++++++++++----- + src/misc.c | 7 +++++- + tests/Makefile.am | 1 + + tests/incr10.at | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ + tests/testsuite.at | 1 + + 6 files changed, 107 insertions(+), 6 deletions(-) + create mode 100644 tests/incr10.at + +diff --git a/src/common.h b/src/common.h +index 20cbb64..2904183 100644 +--- a/src/common.h ++++ b/src/common.h +@@ -523,6 +523,8 @@ void extract_archive (void); + void extract_finish (void); + bool rename_directory (char *src, char *dst); + ++void remove_delayed_set_stat (const char *fname); ++ + /* Module delete.c. */ + + void delete_archive_members (void); +diff --git a/src/extract.c b/src/extract.c +index ca25603..5aaeb1b 100644 +--- a/src/extract.c ++++ b/src/extract.c +@@ -537,6 +537,38 @@ repair_delayed_set_stat (char const *dir, + quotearg_colon (dir))); + } + ++static void ++free_delayed_set_stat (struct delayed_set_stat *data) ++{ ++ xheader_xattr_free (data->xattr_map, data->xattr_map_size); ++ free (data->cntx_name); ++ free (data->acls_a_ptr); ++ free (data->acls_d_ptr); ++ free (data); ++} ++ ++void ++remove_delayed_set_stat (const char *fname) ++{ ++ struct delayed_set_stat *data, *next, *prev = NULL; ++ for (data = delayed_set_stat_head; data; data = next) ++ { ++ next = data->next; ++ if (chdir_current == data->change_dir ++ && strcmp (data->file_name, fname) == 0) ++ { ++ free_delayed_set_stat (data); ++ if (prev) ++ prev->next = next; ++ else ++ delayed_set_stat_head = next; ++ return; ++ } ++ else ++ prev = data; ++ } ++} ++ + /* After a file/link/directory creation has failed, see if + it's because some required directory was not present, and if so, + create all required directories. Return zero if all the required +@@ -846,11 +878,7 @@ apply_nonancestor_delayed_set_stat (char const *file_name, bool after_links) + } + + delayed_set_stat_head = data->next; +- xheader_xattr_free (data->xattr_map, data->xattr_map_size); +- free (data->cntx_name); +- free (data->acls_a_ptr); +- free (data->acls_d_ptr); +- free (data); ++ free_delayed_set_stat (data); + } + } + +diff --git a/src/misc.c b/src/misc.c +index 8e66643..d263c07 100644 +--- a/src/misc.c ++++ b/src/misc.c +@@ -586,7 +586,12 @@ safer_rmdir (const char *file_name) + return -1; + } + +- return unlinkat (chdir_fd, file_name, AT_REMOVEDIR); ++ if (unlinkat (chdir_fd, file_name, AT_REMOVEDIR) == 0) ++ { ++ remove_delayed_set_stat (file_name); ++ return 0; ++ } ++ return -1; + } + + /* Remove FILE_NAME, returning 1 on success. If FILE_NAME is a directory, +-- +2.3.5 + diff --git a/app-arch/tar/files/tar-1.28-xattr.patch b/app-arch/tar/files/tar-1.28-xattr.patch new file mode 100644 index 000000000000..a8f91fd8b200 --- /dev/null +++ b/app-arch/tar/files/tar-1.28-xattr.patch @@ -0,0 +1,36 @@ +https://bugs.gentoo.org/548024 + +From 9c2b57232e3bc2e5ba85387560bcdd851849a128 Mon Sep 17 00:00:00 2001 +From: Paul Eggert <eggert@cs.ucla.edu> +Date: Mon, 5 Jan 2015 20:24:18 -0800 +Subject: [PATCH] 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. +--- + lib/xattr-at.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/lib/xattr-at.c b/lib/xattr-at.c +index 443ccae..66427e9 100644 +--- a/lib/xattr-at.c ++++ b/lib/xattr-at.c +@@ -31,6 +31,8 @@ + + #include "openat-priv.h" + ++#ifdef HAVE_XATTRS ++ + /* setxattrat */ + #define AT_FUNC_NAME setxattrat + #define AT_FUNC_F1 setxattr +@@ -108,3 +110,5 @@ + #undef AT_FUNC_RESULT + #undef AT_FUNC_POST_FILE_PARAM_DECLS + #undef AT_FUNC_POST_FILE_ARGS ++ ++#endif /* HAVE_XATTRS */ +-- +2.4.0 + diff --git a/app-arch/tar/files/tar.1 b/app-arch/tar/files/tar.1 new file mode 100644 index 000000000000..5d6012728c68 --- /dev/null +++ b/app-arch/tar/files/tar.1 @@ -0,0 +1,813 @@ +.TH TAR 1 "Mar 2010" "GNU" "tar" +.SH NAME +tar \- The GNU version of the tape archiver (tar) utility +.SH SYNOPSIS +.B tar +.I <operation> [options] + +.I Operations: +.nf +.B [-]A --catenate --concatenate +.B [-]c --create +.B [-]d --diff --compare +.B [-]r --append +.B [-]t --list +.B [-]u --update +.B [-]x --extract --get +.B --delete +.fi + +.I Common Options: +.nf +.BR -C ", " --directory " DIR" +.BR -f ", " --file " FILE" +.BR -j ", " --bzip2 +.BR -J ", " --xz +.BR -p ", " --preserve-permissions +.BR -v ", " --verbose +.BR -z ", " --gzip +.fi + +.I All Options: +.br +[ +.BR -a ", " --auto-compress +] +[ +.BR --add-file " FILE" +] +[ +.BR --anchored +] +[ +.BR --atime-preserve +] +[ +.BR -b ", " --blocking-factor " N" +] +[ +.BR -B ", " --read-full-records +] +[ +.BR --backup " BACKUP-TYPE" +] +[ +.BR --block-compress +] +[ +.BR -C ", " --directory " DIR" +] +[ +.BR --checkpoint +] +[ +.BR --delay-directory-restore +] +[ +.BR --exclude " PATTERN" +] +[ +.BR --exclude-caches +] +[ +.BR --exclude-caches-all +] +[ +.BR --exclude-caches-under +] +[ +.BR --exclude-tag " FILE" +] +[ +.BR --exclude-tag-all " FILE" +] +[ +.BR --exclude-tag-under " FILE" +] +[ +.BR -f ", " --file " [HOSTNAME:]FILE" +] +[ +.BR -F ", " --info-script " FILE, " --new-volume-script " FILE" +] +[ +.BR --force-local +] +[ +.BR --format " FORMAT" +] +[ +.BR -g ", " --listed-incremental " SNAPSHOT" +] +[ +.BR -G ", " --incremental +] +[ +.BR --group " GROUP" +] +[ +.BR -h ", " --dereference +] +[ +.BR --help +] +[ +.BR -i ", " --ignore-zeros +] +[ +.BR -I ", " --use-compress-program " PROG" +] +[ +.BR --ignore-case +] +[ +.BR --ignore-command-error +] +[ +.BR --ignore-failed-read +] +[ +.BR --index-file " FILE" +] +[ +.BR -j ", " --bzip2 +] +[ +.BR -J ", " --xz +] +[ +.BR -k ", " --keep-old-files +] +[ +.BR -K ", " --starting-file " FILE" +] +[ +.BR --keep-newer-files +] +[ +.BR -l ", " --check-links +] +[ +.BR -L ", " --tape-length " N" +] +[ +.BR --lzip +] +[ +.BR --lzma +] +[ +.BR --lzop +] +[ +.BR -m ", " --touch ", " --modification-time +] +[ +.BR -M ", " --multi-volume +] +[ +.BR --mode " PERMISSIONS" +] +[ +.BR --mtime " DATE" +] +[ +.BR -N ", " --after-date " DATE, " --newer " DATE" +] +[ +.BR --newer-mtime " DATE" +] +[ +.BR --no-anchored +] +[ +.BR --no-auto-compress +] +[ +.BR --no-delay-directory-restore +] +[ +.BR --no-ignore-case +] +[ +.BR --no-ignore-command-error +] +[ +.BR --no-overwrite-dir +] +[ +.BR --no-quote-chars +] +[ +.BR --no-recursion +] +[ +.BR --no-same-permissions +] +[ +.BR --no-unquote +] +[ +.BR --no-wildcards +] +[ +.BR --no-wildcards-match-slash +] +[ +.BR --null +] +[ +.BR --numeric-owner +] +[ +.BR -o ", " --old-archive ", " --portability ", " --no-same-owner +] +[ +.BR -O ", " --to-stdout +] +[ +.BR --occurrence " NUM" +] +[ +.BR --one-file-system +] +[ +.BR --overwrite +] +[ +.BR --overwrite-dir +] +[ +.BR --owner " USER" +] +[ +.BR -p ", " --same-permissions ", " --preserve-permissions +] +[ +.BR -P ", " --absolute-names +] +[ +.BR --pax-option " KEYWORD-LIST" +] +[ +.BR --posix +] +[ +.BR --preserve +] +[ +.BR --quote-chars " STRING" +] +[ +.BR --quote-style " STYLE" +] +[ +.BR -R ", " --block-number +] +[ +.BR --record-size " SIZE" +] +[ +.BR --recursion +] +[ +.BR --recursive-unlink +] +[ +.BR --remove-files +] +[ +.BR --restrict +] +[ +.BR --rmt-command " CMD" +] +[ +.BR --rsh-command " CMD" +] +[ +.BR -s ", " --same-order ", " --preserve-order +] +[ +.BR -S ", " --sparse +] +[ +.BR --same-owner +] +[ +.BR --show-defaults +] +[ +.BR --show-omitted-dirs +] +[ +.BR --show-transformed-names ", " --show-stored-names +] +[ +.BR --strip-components " NUMBER" +] +[ +.BR --suffix " SUFFIX" +] +[ +.BR -T ", " --files-from " FILE" +] +[ +.BR --test-label +] +[ +.BR --to-command " COMMAND" +] +[ +.BR --transform " EXPRESSION" +] +[ +.BR --totals +] +[ +.BR -U ", " --unlink-first +] +[ +.BR --unquote +] +[ +.BR --utc +] +[ +.BR -v ", " --verbose +] +[ +.BR -V ", " --label " NAME" +] +[ +.BR --version +] +[ +.BR --volno-file " FILE" +] +[ +.BR -w ", " --interactive ", " --confirmation +] +[ +.BR -W ", " --verify +] +[ +.BR --wildcards +] +[ +.BR --wildcards-match-slash +] +[ +.BR -X ", " --exclude-from " FILE" +] +[ +.BR -z ", " --gzip ", " --gunzip ", " --ungzip +] +[ +.BR -Z ", " --compress ", " --uncompress +] +[ +.BR -[0-7][lmh] +] +.SH DESCRIPTION +This manual page documents the GNU version of \fBtar\fR, an archiving +program designed to store and extract files from an archive file known +as a \fItarfile\fR. A \fItarfile\fR may be made on a tape drive, +however, it is also common to write a \fItarfile\fR to a normal file. +The first argument to \fBtar\fR must be one of the options \fBAcdrtux\fR, +followed by any optional functions. The final arguments to \fBtar\fR +are the names of the files or directories which should be archived. The +use of a directory name always implies that the subdirectories below +should be included in the archive. +.SH EXAMPLES +.TP +.B tar -xvf foo.tar +verbosely extract foo.tar +.TP +.B tar -xzf foo.tar.gz +extract gzipped foo.tar.gz +.TP +.B tar -cjf foo.tar.bz2 bar/ +create bzipped tar archive of the directory bar called foo.tar.bz2 +.TP +.B tar -xjf foo.tar.bz2 -C bar/ +extract bzipped foo.tar.bz2 after changing directory to bar +.TP +.B tar -xzf foo.tar.gz blah.txt +extract the file blah.txt from foo.tar.gz +.P +Note: When working with archives, specifying the compression option is often +times unnecessary as \fBtar\fR will automatically detect the compression type +based on the suffix of the archive. +.SH "FUNCTION LETTERS" +.TP +.B One of the following options must be used: +.TP +.BR -A ", " --catenate ", " --concatenate +append tar files to an archive +.TP +.BR -c ", " --create +create a new archive +.TP +.BR -d ", " --diff ", " --compare +find differences between archive and file system +.TP +.BR -r ", " --append +append files to the end of an archive +.TP +.BR -t ", " --list +list the contents of an archive +.TP +.BR -u ", " --update +only append files that are newer than the existing in archive +.TP +.BR -x ", " --extract ", " --get +extract files from an archive +.TP +.BR --delete +delete from the archive (not for use on magnetic tapes!) +.SH "COMMON OPTIONS" +.TP +.BR -C ", " --directory " DIR" +change to directory DIR +.TP +.BR -f ", " --file " [HOSTNAME:]FILE" +use archive file or device FILE (default is "-", meaning stdin/stdout) +.TP +.BR -j ", " --bzip2 +filter archive through bzip2; use to decompress .bz2 files +.TP +.BR -J ", " --xz +filter archive through xz; use to decompress .xz files +.TP +.BR -p ", " --preserve-permissions +extract all protection information +.TP +.BR -v ", " --verbose +verbosely list files processed +.TP +.BR -z ", " --gzip ", " --ungzip +filter the archive through gzip +.SH "ALL OPTIONS" +.TP +.BR -a ", " --auto-compress +use archive suffix to determine the compression program +.TP +.BR --add-file " FILE" +add specified FILE to the archive (useful if FILE starts with a dash) +.TP +.BR --anchored +patterns will match the start of file names +.TP +.BR --atime-preserve +don't change access times of files that are archived +.TP +.BR -b ", " --blocking-factor " N" +block size of Nx512 bytes (default N=20) +.TP +.BR -B ", " --read-full-blocks +reblock as we read (for reading 4.2BSD pipes) +.TP +.BR --backup " BACKUP-TYPE" +backup files instead of deleting them using BACKUP-TYPE simple or +numbered +.TP +.BR --block-compress +block the output of compression program for tapes +.TP +.BR -C ", " --directory " DIR" +change to directory DIR +.TP +.BR --checkpoint +print directory names while reading the archive +.TP +.BR --delay-directory-restore +delay setting modification times and permissions of extracted directories +until the end of extraction +.TP +.BR --exclude " PATTERN" +exclude files based upon PATTERN +.TP +.BR --exclude-caches +exclude directories that contain a cache directory tag +.TP +.BR --exclude-tag " FILE" +exclude directories that contain a file named FILE +.TP +.BR -f ", " --file " [HOSTNAME:]FILE" +use archive file or device FILE (default "-", meaning stdin/stdout) +.TP +.BR -F ", " --info-script " FILE, " --new-volume-script " FILE" +run script at end of each tape (implies \fI--multi-volume\fR) +.TP +.BR --force-local +archive file is local even if its name contains a colon +.TP +.BR --format " FORMAT" +selects the format of the created archive +.nf +\fIv7\fR - Unix V7 +\fIoldgnu\fR - GNU tar <=1.12 +\fIgnu\fR - GNU tar 1.13 +\fIustar\fR - POSIX.1-1988 +\fIposix\fR - POSIX.1-2001 +.fi +.TP +.BR -g ", " --listed-incremental " SNAPSHOT" +create/list/extract new GNU-format incremental backup +.TP +.BR --group " GROUP" +give files added to the archive a group id of GROUP instead of the group id +of the source file; this option does not affect extraction +.TP +.BR -G ", " --incremental +create/list/extract old GNU-format incremental backup +.TP +.BR -h ", " --dereference +don't archive symlinks; archive the files they point to +.TP +.BR --help +like this manpage, but not as cool +.TP +.BR -i ", " --ignore-zeros +ignore blocks of zeros in archive (normally mean EOF) +.TP +.BR -I ", " --use-compress-program " PROG" +access the archive through PROG (which is generally a compression program; +it must accept the \fI-d\fR option) +.TP +.BR --ignore-case +ignore case when excluding files +.TP +.BR --ignore-command-error +ignore exit codes of subprocesses +.TP +.BR --ignore-failed-read +don't exit with non-zero status on unreadable files +.TP +.BR --index-file " FILE" +send verbose output to FILE instead of stdout +.TP +.BR -j ", " --bzip2 +filter archive through bzip2, use to decompress .bz2 files +.TP +.BR -J ", " --xz +filter archive through xz; use to decompress .xz files +.TP +.BR -k ", " --keep-old-files +keep existing files; don't overwrite them from archive +.TP +.BR -K ", " --starting-file " FILE" +begin at file FILE in the archive +.TP +.BR --keep-newer-files +do not overwrite files which are newer than the archive +.TP +.BR -l ", " --check-links +warn if number of hard links to the file on the filesystem mismatchs +the number of links recorded in the archive +.TP +.BR -L ", " --tape-length " N" +change tapes after writing N*1024 bytes +.TP +.BR -m ", " --touch ", " --modification-time +don't extract file modified time +.TP +.BR -M ", " --multi-volume +create/list/extract multi-volume archive +.TP +.BR --mode " PERMISSIONS" +apply PERMISSIONS while adding files (see \fBchmod\fR(1)) +.TP +.BR --mtime " DATE" +when creating archives, use DATE as the modification time of the members, +instead of their actual modification times +.TP +.BR -N ", " --after-date " DATE, " --newer " DATE" +only store files that were modified or had status updates (permissions, +ACLs, extended attributes, ...) since DATE +.TP +.BR --newer-mtime " DATE" +like \fI--newer\fR, but only store files that were modified since DATE +.TP +.BR --no-anchored +match any subsequenceof the name's components with \fI--exclude\fR +.TP +.BR --no-auto-compress +do not use archive suffix to determine the compression program +.TP +.BR --no-delay-directory-restore +modification times and permissions of extracted directories are set when +all files from this directory have been extracted; this is the default +.TP +.BR --no-ignore-command-error +print warnings about subprocesses that terminated with a non-zero exit code +.TP +.BR --no-ignore-case +use case-sensitive matching with \fI--exclude\fR +.TP +.BR --no-overwrite-dir +preserve metadata of existing directories when extracting files from an +archive +.TP +.BR --no-quote-chars " STRING" +remove characters listed in STRING from the list of quoted characters +set by a previous \fI--quote-chars\fR option +.TP +.BR --no-recursion +don't recurse into directories +.TP +.BR --no-same-permissions +apply user's umask when extracting files instead of recorded permissions +.TP +.BR --no-unquote +treat all input file or member names literally, do not interpret +escape sequences +.TP +.BR --no-wildcards +don't use wildcards with \fI--exclude\fR +.TP +.BR --no-wildcards-match-slash +wildcards do not match slashes (/) with \fI--exclude\fR +.TP +.BR --null +\fI--files-from\fR reads null-terminated names, disable \fI--directory\fR +.TP +.BR --numeric-owner +always use numbers for user/group names +.TP +.BR -o ", " --old-archive ", " --portability +like \fI--format=v7\fR; \fI-o\fR exhibits this behavior when creating an +archive (deprecated behavior) +.TP +.BR -o ", " --no-same-owner +do not attempt to restore ownership when extracting; \fI-o\fR exhibits +this behavior when extracting an archive +.TP +.BR -O ", " --to-stdout +extract files to standard output +.TP +.BR --occurrence " NUM" +process only NUM occurrences of each named file; used with +\fI--delete\fR, \fI--diff\fR, \fI--extract\fR, or \fI--list\fR +.TP +.BR --one-file-system +stay in local file system when creating an archive +.TP +.BR --overwrite +overwrite existing files and directory metadata when extracting +.TP +.BR --overwrite-dir +overwrite directory metadata when extracting +.TP +.BR --owner " USER" +give files added to the archive a user id of USER instead of the user id +of the source file; this option does not affect extraction +.TP +.BR -p ", " --preserve-permissions ", " --same-permissions +extract all protection information +.TP +.BR -P ", " --absolute-names +don't strip leading `/'s from file names +.TP +.BR --pax-option " KEYWORD-LIST" +used only with POSIX.1-2001 archives to modify the way \fBtar\fR handles +extended header keywords +.TP +.BR --posix +like \fI--format=posix\fR +.TP +.BR --preserve +like \fI--preserve-permissions\fR plus \fI--same-order\fR +.TP +.BR --quote-chars " STRING" +always quote the characters from STRING, even if the selected quoting +style would not quote them +.TP +.BR --quote-style " STYLE" +set the quoting style to be used when printing member and file names +.TP +.BR -R ", " --record-number +show record number within archive with each message +.TP +.BR --record-size " SIZE" +use SIZE bytes per record when accessing archives +.TP +.BR --recursion +recurse into directories +.TP +.BR --recursive-unlink +remove existing directories before extracting directories of the same name +.TP +.BR --remove-files +remove files after adding them to the archive +.TP +.BR --restrict +disable the use of some potentially harmful options; currently this +disables shell invocation from the multi-volume menu +.TP +.BR --rmt-command " CMD" +use CMD instead of the default /usr/sbin/rmt +.TP +.BR --rsh-command " CMD" +use remote CMD instead of \fBrsh\fR(1) +.TP +.BR -s ", " --same-order ", " --preserve-order +list of names to extract is sorted to match archive +.TP +.BR -S ", " --sparse +handle sparse files efficiently +.TP +.BR --same-owner +create extracted files with the same ownership +.TP +.BR --show-defaults +display the default options used by \fBtar\fR +.TP +.BR --show-omitted-dirs +print directories \fBtar\fR skips while operating on an archive +.TP +.BR --show-transformed-names ", " --show-stored-names +display file or member names after applying any \fBsed\fR transformations +.TP +.BR --strip-components " NUMBER" +strip NUMBER of leading path components from file names before extraction +.TP +.BR --suffix " SUFFIX" +use SUFFIX instead of default '~' when backing up files +.TP +.BR -T ", " --files-from " FILE" +get names to extract or create from file FILE +.TP +.BR --test-label +read the volume label; if an argument is specified, test whether it +matches the volume label +.TP +.BR --to-command " COMMAND" +during extraction, pipe extracted files to the standard input of COMMAND +.TP +.BR --totals +print total bytes written with --create +.TP +.BR --transform " EXPRESSION" +transform file or member names using the \fBsed\fR replacement expression +EXPRESSION +.TP +.BR -U ", " --unlink-first +remove existing files before extracting files of the same name +.TP +.BR --unquote +enable unquoting input file or member names; this is the default +.TP +.BR --utc +display file modification dates in UTC +.TP +.BR -v ", " --verbose +verbosely list files processed +.TP +.BR -V ", " --label " NAME" +create archive with volume name NAME +.TP +.BR --version +print \fBtar\fR program version number +.TP +.BR --volno-file " FILE" +keep track of which volume of a multi-volume archive its working in +FILE; used with \fI--multi-volume\fR +.TP +.BR -w ", " --interactive ", " --confirmation +ask for confirmation for every action +.TP +.BR -W ", " --verify +attempt to verify the archive after writing it +.TP +.BR --wildcards +use wildcards with \fI--exclude\fR +.TP +.BR --wildcards-match-slash +wildcards match slashes (/) with \fI--exclude\fR +.TP +.BR -X ", " --exclude-from " FILE" +exclude files listed in FILE +.TP +.BR -z ", " --gzip ", " --gunzip ", " --ungzip +filter the archive through gzip +.TP +.BR -Z ", " --compress ", " --uncompress +filter the archive through compress +.TP +.BR -[0-7][lmh] +specify drive and density +.SH BUGS +The GNU folks, in general, abhor man pages and create info documents instead. +The maintainer of \fBtar\fR falls into this category. Thus, this man page may +not be complete nor current, and it is included in the Gentoo portage tree +because man is a great tool :). This man page was first taken from Debian +Linux and has since been lovingly updated here. +.SH "REPORTING BUGS" +Please report bugs via http://bugs.gentoo.org/ +.SH "AUTHORS" +.nf +Debian Linux http://www.debian.org/ +Mike Frysinger <vapier@gentoo.org> +.fi diff --git a/app-arch/tar/files/tar.1-1.27 b/app-arch/tar/files/tar.1-1.27 new file mode 100644 index 000000000000..700b569a57c6 --- /dev/null +++ b/app-arch/tar/files/tar.1-1.27 @@ -0,0 +1,388 @@ +.\" generated by script on Mon Oct 21 08:29:21 2013 +.Dd Oct 21, 2013 +.Dt TAR 1 +.Sh NAME +.Nm tar +.Nd The GNU version of the tar archiving utility +.Sh SYNOPSIS +.Nm tar +.Oo Fl Oc Cm A Fl \-catenate \-concatenate Cm \||\| c Fl \-create Cm \||\| d Fl \-diff \-compare Cm \||\| Fl \-delete Cm \||\| r Fl \-append Cm \||\| t Fl \-list Cm \||\| Fl \-test\-label Cm \||\| u Fl \-update Cm \||\| x Fl \-extract \-get +.Op Ar options +.Op Ar pathname ... +.Sh DESCRIPTION +.Nm Tar +stores and extracts files from a tape or disk archive. +.Pp +The first argument to +tar +should be a function; either one of the letters +.Cm Acdrtux , +or one of the long function names. +A function letter need not be prefixed with ``\-'', and may be combined +with other single-letter options. +A long function name must be prefixed with +.Cm \\-\\- . +Some options take a parameter; with the single-letter form +these must be given as separate arguments. +With the long form, they may be given by appending +.Cm = Ns Ar value +to the option. +.Sh FUNCTION LETTERS +Main operation mode: +.Bl -tag -width flag +.It Fl A , Fl \-catenate , Fl \-concatenate +append tar files to an archive +.It Fl c , Fl \-create +create a new archive +.It Fl d , Fl \-diff , Fl \-compare +find differences between archive and file system +.It Fl \-delete +delete from the archive (not on mag tapes!) +.It Fl r , Fl \-append +append files to the end of an archive +.It Fl t , Fl \-list +list the contents of an archive +.It Fl \-test\-label +test the archive volume label and exit +.It Fl u , Fl \-update +only append files newer than copy in archive +.It Fl x , Fl \-extract , Fl \-get +extract files from an archive +.El +.Sh OTHER OPTIONS +Operation modifiers: +.Bl -tag -width flag +.It \-[0\-7][lmh] +specify drive and density +.It Fl a , Fl \-auto\-compress +use archive suffix to determine the compression program +.It Fl \-acls +Enable the POSIX ACLs support +.It Fl \-no\-acls +Disable the POSIX ACLs support +.It Fl \-add\-file Ns \= Ns Ar FILE +add given FILE to the archive (useful if its name starts with a dash) +.It Fl \-anchored +patterns match file name start +.It Fl \-no\-anchored +patterns match after any '/' (default for exclusion) +.It Fl \-atime\-preserve +preserve access times on dumped files, either by restoring the times +.It Fl \-no\-auto\-compress +do not use archive suffix to determine the compression program +.It Fl b , Fl \-blocking\-factor Ar BLOCKS +BLOCKS x 512 bytes per record +.It Fl B , Fl \-read\-full\-records +reblock as we read (for 4.2BSD pipes) +.It Fl \-backup +backup before removal, choose version CONTROL +.It Fl C , Fl \-directory Ar DIR +change to directory DIR +.It Fl \-check\-device +check device numbers when creating incremental archives (default) +.It Fl \-no\-check\-device +do not check device numbers when creating incremental archives +.It Fl \-checkpoint +display progress messages every NUMBERth record (default 10) +.It Fl \-checkpoint\-action Ns \= Ns Ar ACTION +execute ACTION on each checkpoint +.It Fl \-delay\-directory\-restore +delay setting modification times and permissions of extracted +.It Fl \-no\-delay\-directory\-restore +cancel the effect of --delay-directory-restore option +.It Fl \-exclude Ns \= Ns Ar PATTERN +exclude files, given as a PATTERN +.It Fl \-exclude\-backups +exclude backup and lock files +.It Fl \-exclude\-caches +exclude contents of directories containing CACHEDIR.TAG, +.It Fl \-exclude\-caches\-all +exclude directories containing CACHEDIR.TAG +.It Fl \-exclude\-caches\-under +exclude everything under directories containing CACHEDIR.TAG +.It Fl \-exclude\-tag Ns \= Ns Ar FILE +exclude contents of directories containing FILE, except +.It Fl \-exclude\-tag\-all Ns \= Ns Ar FILE +exclude directories containing FILE +.It Fl \-exclude\-tag\-under Ns \= Ns Ar FILE +exclude everything under directories containing FILE +.It Fl \-exclude\-vcs +exclude version control system directories +.It Fl f , Fl \-file Ar ARCHIVE +use archive file or device ARCHIVE +.It Fl F , Fl \-info\-script , Fl \-new\-volume\-script Ar NAME +run script at end of each tape (implies -M) +.It Fl \-force\-local +archive file is local even if it has a colon +.It Fl \-full\-time +print file time to its full resolution +.It Fl g , Fl \-listed\-incremental Ar FILE +handle new GNU-format incremental backup +.It Fl G , Fl \-incremental +handle old GNU-format incremental backup +.It Fl \-group Ns \= Ns Ar NAME +force NAME as group for added files +.It Fl h , Fl \-dereference +follow symlinks; archive and dump the files they point to +.It Fl H , Fl \-format Ar FORMAT +create archive of the given formatFORMAT is one of the following: +.Bl -tag -width flag +.It Fl \-format=gnu +GNU tar 1.13.x format +.It Fl \-format=oldgnu +GNU format as per tar <= 1.12 +.It Fl \-format=pax +POSIX 1003.1-2001 (pax) format +.It Fl \-format=posix +same as pax +.It Fl \-format=ustar +POSIX 1003.1-1988 (ustar) format +.It Fl \-format=v7 +old V7 tar format +.El +.It Fl \-hard\-dereference +follow hard links; archive and dump the files they refer to +.It Fl i , Fl \-ignore\-zeros +ignore zeroed blocks in archive (means EOF) +.It Fl I , Fl \-use\-compress\-program Ar PROG +filter through PROG (must accept -d) +.It Fl \-ignore\-case +ignore case +.It Fl \-no\-ignore\-case +case sensitive matching (default) +.It Fl \-ignore\-command\-error +ignore exit codes of children +.It Fl \-no\-ignore\-command\-error +treat non-zero exit codes of children as error +.It Fl \-ignore\-failed\-read +do not exit with nonzero on unreadable files +.It Fl \-index\-file Ns \= Ns Ar FILE +send verbose output to FILE +.It Fl j , Fl \-bzip2 + +.It Fl J , Fl \-xz + +.It Fl k , Fl \-keep\-old\-files +don't replace existing files when extracting, +.It Fl K , Fl \-starting\-file Ar MEMBER-NAME +begin at member MEMBER-NAME when reading the archive +.It Fl \-keep\-directory\-symlink +preserve existing symlinks to directories when extracting +.It Fl \-keep\-newer\-files +don't replace existing files that are newer than their archive copies +.It Fl l , Fl \-check\-links +print a message if not all links are dumped +.It Fl L , Fl \-tape\-length Ar NUMBER +change tape after writing NUMBER x 1024 bytes +.It Fl \-level Ns \= Ns Ar NUMBER +dump level for created listed-incremental archive +.It Fl \-lzip + +.It Fl \-lzma + +.It Fl \-lzop + +.It Fl m , Fl \-touch +don't extract file modified time +.It Fl M , Fl \-multi\-volume +create/list/extract multi-volume archive +.It Fl \-mode Ns \= Ns Ar CHANGES +force (symbolic) mode CHANGES for added files +.It Fl \-mtime Ns \= Ns Ar DATE-OR-FILE +set mtime for added files from DATE-OR-FILE +.It Fl n , Fl \-seek +archive is seekable +.It Fl N , Fl \-newer , Fl \-after\-date Ar DATE-OR-FILE +only store files newer than DATE-OR-FILE +.It Fl \-newer\-mtime Ns \= Ns Ar DATE +compare date and time when data changed only +.It Fl \-null +-T reads null-terminated names, disable -C +.It Fl \-no\-null +disable the effect of the previous --null option +.It Fl \-numeric\-owner +always use numbers for user/group names +.It Fl O , Fl \-to\-stdout +extract files to standard output +.It Fl \-occurrence +process only the NUMBERth occurrence of each file in the archive; +.It Fl \-old\-archive , Fl \-portability +same as --format=v7 +.It Fl \-one\-file\-system +stay in local file system when creating archive +.It Fl \-overwrite +overwrite existing files when extracting +.It Fl \-overwrite\-dir +overwrite metadata of existing directories when extracting (default) +.It Fl \-no\-overwrite\-dir +preserve metadata of existing directories +.It Fl \-owner Ns \= Ns Ar NAME +force NAME as owner for added files +.It Fl p , Fl \-preserve\-permissions , Fl \-same\-permissions +extract information about file permissions (default for superuser) +.It Fl P , Fl \-absolute\-names +don't strip leading '/'s from file names +.It Fl \-pax\-option Ns \= Ns Ar keyword[[:]=value][,keyword[[:]=value]]... +control pax keywords +.It Fl \-posix +same as --format=posix +.It Fl \-preserve +same as both -p and -s +.It Fl \-quote\-chars Ns \= Ns Ar STRING +additionally quote characters from STRING +.It Fl \-no\-quote\-chars Ns \= Ns Ar STRING +disable quoting for characters from STRING +.It Fl \-quoting\-style Ns \= Ns Ar STYLE +set name quoting style; see below for valid STYLE values +.It Fl R , Fl \-block\-number +show block number within archive with each message +.It Fl \-record\-size Ns \= Ns Ar NUMBER +NUMBER of bytes per record, multiple of 512 +.It Fl \-recursion +recurse into directories (default) +.It Fl \-no\-recursion +avoid descending automatically in directories +.It Fl \-recursive\-unlink +empty hierarchies prior to extracting directory +.It Fl \-remove\-files +remove files after adding them to the archive +.It Fl \-restrict +disable use of some potentially harmful options +.It Fl \-rmt\-command Ns \= Ns Ar COMMAND +use given rmt COMMAND instead of rmt +.It Fl \-rsh\-command Ns \= Ns Ar COMMAND +use remote COMMAND instead of rsh +.It Fl s , Fl \-preserve\-order , Fl \-same\-order +member arguments are listed in the same order as the +.It Fl S , Fl \-sparse +handle sparse files efficiently +.It Fl \-same\-owner +try extracting files with the same ownership as exists in the archive (default for superuser) +.It Fl \-no\-same\-owner +extract files as yourself (default for ordinary users) +.It Fl \-no\-same\-permissions +apply the user's umask when extracting permissions from the archive (default for ordinary users) +.It Fl \-no\-seek +archive is not seekable +.It Fl \-selinux +Enable the SELinux context support +.It Fl \-no\-selinux +Disable the SELinux context support +.It Fl \-show\-defaults +show tar defaults +.It Fl \-show\-omitted\-dirs +when listing or extracting, list each directory that does not match search criteria +.It Fl \-show\-snapshot\-field\-ranges +show valid ranges for snapshot-file fields +.It Fl \-show\-transformed\-names , Fl \-show\-stored\-names +show file or archive names after transformation +.It Fl \-skip\-old\-files +don't replace existing files when extracting, silently skip over them +.It Fl \-sparse\-version Ns \= Ns Ar MAJOR[.MINOR] +set version of the sparse format to use (implies --sparse) +.It Fl \-strip\-components Ns \= Ns Ar NUMBER +strip NUMBER leading components from file names on extraction +.It Fl \-suffix Ns \= Ns Ar STRING +backup before removal, override usual suffix ('~' unless overridden by environment variable SIMPLE_BACKUP_SUFFIX) +.It Fl T , Fl \-files\-from Ar FILE +get names to extract or create from FILE +.It Fl \-to\-command Ns \= Ns Ar COMMAND +pipe extracted files to another program +.It Fl \-totals +print total bytes after processing the archive; +.It Fl \-transform , Fl \-xform Ar EXPRESSION +use sed replace EXPRESSION to transform file names +.It Fl U , Fl \-unlink\-first +remove each file prior to extracting over it +.It Fl \-unquote +unquote filenames read with -T (default) +.It Fl \-no\-unquote +do not unquote filenames read with -T +.It Fl \-utc +print file modification times in UTC +.It Fl v , Fl \-verbose +verbosely list files processed +.It Fl V , Fl \-label Ar TEXT +create archive with volume name TEXT; at list/extract time, use TEXT as a globbing pattern for volume name +.It Fl \-volno\-file Ns \= Ns Ar FILE +use/update the volume number in FILE +.It Fl w , Fl \-interactive , Fl \-confirmation +ask for confirmation for every action +.It Fl W , Fl \-verify +attempt to verify the archive after writing it +.It Fl \-warning Ns \= Ns Ar KEYWORD +warning control +.It Fl \-wildcards +use wildcards (default for exclusion) +.It Fl \-wildcards\-match\-slash +wildcards match '/' (default for exclusion) +.It Fl \-no\-wildcards\-match\-slash +wildcards do not match '/' +.It Fl \-no\-wildcards +verbatim string matching +.It Fl X , Fl \-exclude\-from Ar FILE +exclude patterns listed in FILE +.It Fl \-xattrs +Enable extended attributes support +.It Fl \-xattrs\-exclude Ns \= Ns Ar MASK +specify the exclude pattern for xattr keys +.It Fl \-xattrs\-include Ns \= Ns Ar MASK +specify the include pattern for xattr keys +.It Fl \-no\-xattrs +Disable extended attributes support +.It Fl z , Fl \-gzip , Fl \-gunzip Fl \-ungzip + +.It Fl Z , Fl \-compress , Fl \-uncompress + +.El +.Sh ENVIRONMENT +The behavior of tar is controlled by the following environment variables, +among others: +.Bl -tag -width Ds +.It Ev SIMPLE_BACKUP_SUFFIX +Backup prefix to use when extracting, if +.Fl \-suffix +is not specified. +The backup suffix defaults to `~' if neither is specified. +.It Ev TAR_OPTIONS +Options to prepend to those specified on the command line, separated by +whitespace. Embedded backslashes may be used to escape whitespace or +backslashes within an option. +.It Ev TAPE +Device or file to use for the archive if +.Fl \-file +is not specified. +If this environment variable is unset, use stdin or stdout instead. +.El +.Sh EXAMPLES +Create archive.tar from files foo and bar. +.Bd -literal -offset indent -compact +tar \-cf archive.tar foo bar +.Ed +List all files in archive.tar verbosely. +.Bd -literal -offset indent -compact +tar \-tvf archive.tar +.Ed +Extract all files from archive.tar. +.Bd -literal -offset indent -compact +tar \-xf archive.tar +.Ed +.Sh SEE ALSO +.\" libarchive +.Xr tar 5 , +.\" man-pages +.Xr symlink 7 , +.Xr rmt 8 +.Sh HISTORY +The +.Nm tar +command appeared in +.At v7 . +.Sh BUGS +The GNU folks, in general, abhor man pages, and create info documents instead. +Unfortunately, the info document describing tar is licensed under the GFDL with +invariant cover texts, which makes it impossible to include any text +from that document in this man page. +Most of the text in this document was automatically extracted from the usage +text in the source. +It may not completely describe all features of the program. |