Fix from upstream for hang with symlinks/-k #327641. Fix from upstream for skipping...
authorMike Frysinger <vapier@gentoo.org>
Sun, 18 Jul 2010 21:05:50 +0000 (21:05 +0000)
committerMike Frysinger <vapier@gentoo.org>
Sun, 18 Jul 2010 21:05:50 +0000 (21:05 +0000)
Package-Manager: portage-2.2_rc67/cvs/Linux x86_64

app-arch/tar/ChangeLog
app-arch/tar/Manifest
app-arch/tar/files/tar-1.23-symlink-k-hang.patch [new file with mode: 0644]
app-arch/tar/files/tar-1.23-tests.patch [new file with mode: 0644]
app-arch/tar/tar-1.23-r3.ebuild [new file with mode: 0644]

index 60120e56ae1caee024aa9ec582285b9a6b9503f4..1a51dea94291a3ed3ab0ec5ddebdce1b9a6e4f65 100644 (file)
@@ -1,6 +1,13 @@
 # ChangeLog for app-arch/tar
 # Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/app-arch/tar/ChangeLog,v 1.152 2010/07/18 20:26:19 josejx Exp $
+# $Header: /var/cvsroot/gentoo-x86/app-arch/tar/ChangeLog,v 1.153 2010/07/18 21:05:50 vapier Exp $
+
+*tar-1.23-r3 (18 Jul 2010)
+
+  18 Jul 2010; Mike Frysinger <vapier@gentoo.org> +tar-1.23-r3.ebuild,
+  +files/tar-1.23-symlink-k-hang.patch, +files/tar-1.23-tests.patch:
+  Fix from upstream for hang with symlinks/-k #327641. Fix from upstream for
+  skipping remfiles01 test as root #326785 by David Abbott <.
 
   18 Jul 2010; Joseph Jezak <josejx@gentoo.org> tar-1.23-r2.ebuild:
   Marked ppc stable for bug #313333.
index 56cd2be63055e22e206537484555ff952247c3a7..14a3a5fff143b24b39302bdc91e1dc85c0f8eac5 100644 (file)
@@ -1,5 +1,5 @@
 -----BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
+Hash: SHA256
 
 AUX rmt 273 RMD160 18f5fac369cc3372af7bd83384bb437a67baaa44 SHA1 971081167d145e45288a173d74ca19aa24c0c05e SHA256 8de946561fc5fe3603627c78c9777dc1f7bad7926171822f3a25958a6cd3be55
 AUX tar-1.21-revert-pipe.patch 3701 RMD160 c780024f65b271261f3d02cd9d12c08ccb65f183 SHA1 534b429111dccf6c58d3adafda529c70452ee39b SHA256 26eecb1da171102d3fdc64c66559a41615ca8247ffe3ab4d87b4040873ca8dfd
@@ -7,6 +7,8 @@ AUX tar-1.21-testsuite.patch 3929 RMD160 b37d7633e31a5312b8cac4be90e3810d2ff493b
 AUX tar-1.22-strncpy.patch 1249 RMD160 542af1ab41a609f1fa0189a83a6ca8c6363a94fe SHA1 af241c59cde042a78da2b0478822c099d96468e8 SHA256 a6f857c6747b1fb2a850ac7059e1c7b598bdb8641ac11a77f48e7d326a8a258f
 AUX tar-1.23-revert-pipe.patch 3743 RMD160 0d1945ffd7ea720c563d46199d1d0b43aeaf8094 SHA1 2b4a8e52098a3d20466ce203fcbd9c3a0d5a7741 SHA256 b2beffd2f9d1fe0ca38e48e3e5cf9b0d2ba96229dd1fe81d9532e89ff0401d8f
 AUX tar-1.23-strncpy.patch 1249 RMD160 1e0f8fcc6152ec3cc4208a5efebdb4d97b928113 SHA1 9a4c94827703fae8572246c6380d55821db15196 SHA256 d88ba0b9d3b5dc9a8d6b70e4e71c376ff8dcd3412cb8ffceca3a722a17dbaa85
+AUX tar-1.23-symlink-k-hang.patch 4936 RMD160 c58d2911e50d6ff5e88001b4755a9e4c9ba511f3 SHA1 9f4bdbf733d25982029741b8cc5b8b49a5168380 SHA256 14a5d98abc174ec5a630719e8ba55f395e91591072cba3da448e77ce9d37bbbf
+AUX tar-1.23-tests.patch 662 RMD160 ef87a9f5c25240abddde45be4fb0a932c1fd2ec7 SHA1 9ab7f0d1f35ee7acd0ae74ec50c79a7dcafc03e5 SHA256 6898df207d16007233b3ed79b330e036172db7204ed35273123e87bcac7116d9
 AUX tar.1 16821 RMD160 f58bc7cfeeee0cc811a6c2b5dd1dffe8b197231e SHA1 b354f0803c03cd59fe24f93d532f27f6f0136316 SHA256 f3558b444ab9427c06bc92838c29194051ed64edd0a909163cfa715cc7e6dcdd
 DIST tar-1.20.tar.bz2 1912591 RMD160 cb5a708e847489e5370b83a433f3e847ce359e56 SHA1 4d4cda2ce857b5ea77b39dc718260ab09c145335 SHA256 be8bf33afb5adc2377e45d94693ffd46b75f267f9b808df0c7006e51211f9deb
 DIST tar-1.21.tar.bz2 2071237 RMD160 316e3148f0a392b66423fd73f7dae17cd2f03b90 SHA1 4563bc828e7d285eb466a9587af88e7e1556cf88 SHA256 dc6c70d2071ca4a928460b6d68ab500a32e67d50255261a0d17765a307aeb350
@@ -16,12 +18,13 @@ EBUILD tar-1.20.ebuild 1654 RMD160 b7bb0fc7bdcfbf33d00fc8a337e8c15c9a801147 SHA1
 EBUILD tar-1.21-r1.ebuild 1782 RMD160 b720a7bd217875e8c03b0b41b460a35a28bcf49c SHA1 489f1d5205b3587d44d8b44c628c7da5525b519b SHA256 c6cc9ba591d974f1911b67e058fdc39fb5b598f031d9e717363ed30cea96e7b9
 EBUILD tar-1.22-r1.ebuild 1783 RMD160 63e68ca7d7e3e9ea66de96000eb87417f4c1f393 SHA1 79751f031b9dabc55ee749122d120085264b22f1 SHA256 253d53116b0a87c712aef285d55ee09dd9b68d213e73ecaaece9bdf597b9a500
 EBUILD tar-1.23-r2.ebuild 1757 RMD160 fe262e531e6edca865a1c49eb47bfca9f10b1edf SHA1 c2c58c2488f731adc4964fd19c6da415c93e31c5 SHA256 870839e7cfbbea1e978cb042a80b8283bffeacfe9e4f294e29591898a22ed103
-MISC ChangeLog 22606 RMD160 452a68a180848eed7e2a6a9cf7b3730985bfa64b SHA1 5381f388d69087496e2ee4276cef95286aa37ad9 SHA256 c784c1a85c0ccbbe17ad669eeef30bbd77766210adfd48d077127f523708c3b2
+EBUILD tar-1.23-r3.ebuild 1849 RMD160 03d656920733cad0df3f5a96347681d95f6a785e SHA1 ba73ee6796865c5415f3709244cf26ab4388a58f SHA256 5734d9240b079917ce05598313e8cf24415b60514d77a6000e9a5e3b3bdce296
+MISC ChangeLog 22914 RMD160 1ce634d68a506142e083f47faf2d3806f245a1de SHA1 a5d5887424de4626dd33667adff13c5d1e6a2fc6 SHA256 f338b664d98783075eedb426d594bbb1003bc4a68e9fd616c753a4fb17af5eb0
 MISC metadata.xml 164 RMD160 f43cbec30b7074319087c9acffdb9354b17b0db3 SHA1 9c213f5803676c56439df3716be07d6692588856 SHA256 f5f2891f2a4791cd31350bb2bb572131ad7235cd0eeb124c9912c187ac10ce92
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.15 (GNU/Linux)
 
-iEYEARECAAYFAkxDY24ACgkQcsIHjyDViGT9swCghRxfs62dpIDb1RGNzwxnmXxv
-hMgAn0GzAXNU+Z4U72ZdwPIetQCiTMmS
-=+anz
+iF4EAREIAAYFAkxDbAEACgkQTwhj9JtAlp4zzAEAmHQI/TAa9K7N6SqJoDrtUGEz
+4aUDMv028ciU5ncH1doA/3872QAMW73M+lIwOnFBnIx9m3T3eXyeLptspaq1j9a8
+=5lmw
 -----END PGP SIGNATURE-----
diff --git a/app-arch/tar/files/tar-1.23-symlink-k-hang.patch b/app-arch/tar/files/tar-1.23-symlink-k-hang.patch
new file mode 100644 (file)
index 0000000..61838bb
--- /dev/null
@@ -0,0 +1,177 @@
+http://bugs.gentoo.org/327641
+
+From b60e56fdb6fd8d82a1f92a4fa7781d9a3184dce1 Mon Sep 17 00:00:00 2001
+From: Sergey Poznyakoff <gray@gnu.org.ua>
+Date: Sat, 27 Mar 2010 22:02:28 +0200
+Subject: [PATCH] Fix dead loop on extracting existing symlinks with the -k option.
+
+* src/extract.c (create_placeholder_file)
+(extract_link, extract_symlink)
+(extract_node, extract_fifo): Handle all possible
+return values from maybe_recoverable. This complements
+8f390db92fc. Reported by Ico Doornekamp <bug-tar@zevv.nl>.
+---
+ src/extract.c |  101 +++++++++++++++++++++++++++++++++++++-------------------
+ 2 files changed, 70 insertions(+), 35 deletions(-)
+
+diff --git a/src/extract.c b/src/extract.c
+index 32a883f..531654a 100644
+--- a/src/extract.c
++++ b/src/extract.c
+@@ -888,12 +888,22 @@ create_placeholder_file (char *file_name, bool is_symlink, int *interdir_made)
+   struct stat st;
+   while ((fd = open (file_name, O_WRONLY | O_CREAT | O_EXCL, 0)) < 0)
+-    if (! maybe_recoverable (file_name, interdir_made))
+-      break;
++    {
++      switch (maybe_recoverable (file_name, interdir_made))
++      {
++      case RECOVER_OK:
++        continue;
++        
++      case RECOVER_SKIP:
++        return 0;
++        
++      case RECOVER_NO:
++        open_error (file_name);
++        return -1;
++      }
++      }
+-  if (fd < 0)
+-    open_error (file_name);
+-  else if (fstat (fd, &st) != 0)
++  if (fstat (fd, &st) != 0)
+     {
+       stat_error (file_name);
+       close (fd);
+@@ -956,7 +966,8 @@ extract_link (char *file_name, int typeflag)
+ {
+   int interdir_made = 0;
+   char const *link_name;
+-
++  int rc;
++  
+   link_name = current_stat_info.link_name;
+   
+   if (! absolute_names_option && contains_dot_dot (link_name))
+@@ -996,8 +1007,10 @@ extract_link (char *file_name, int typeflag)
+       errno = e;
+     }
+-  while (maybe_recoverable (file_name, &interdir_made));
++  while ((rc = maybe_recoverable (file_name, &interdir_made)) == RECOVER_OK);
++  if (rc == RECOVER_SKIP)
++    return 0;
+   if (!(incremental_option && errno == EEXIST))
+     {
+       link_error (link_name, file_name);
+@@ -1010,7 +1023,6 @@ static int
+ extract_symlink (char *file_name, int typeflag)
+ {
+ #ifdef HAVE_SYMLINK
+-  int status;
+   int interdir_made = 0;
+   if (! absolute_names_option
+@@ -1018,15 +1030,22 @@ extract_symlink (char *file_name, int typeflag)
+         || contains_dot_dot (current_stat_info.link_name)))
+     return create_placeholder_file (file_name, true, &interdir_made);
+-  while ((status = symlink (current_stat_info.link_name, file_name)))
+-    if (!maybe_recoverable (file_name, &interdir_made))
+-      break;
+-
+-  if (status == 0)
+-    set_stat (file_name, &current_stat_info, NULL, 0, 0, SYMTYPE);
+-  else
+-    symlink_error (current_stat_info.link_name, file_name);
+-  return status;
++  while (symlink (current_stat_info.link_name, file_name))
++    switch (maybe_recoverable (file_name, &interdir_made))
++      {
++      case RECOVER_OK:
++      continue;
++      
++      case RECOVER_SKIP:
++      return 0;
++      
++      case RECOVER_NO:
++      symlink_error (current_stat_info.link_name, file_name);
++      return -1;
++      }
++  
++  set_stat (file_name, &current_stat_info, NULL, 0, 0, SYMTYPE);
++  return 0;
+ #else
+   static int warned_once;
+@@ -1052,16 +1071,23 @@ extract_node (char *file_name, int typeflag)
+   mode_t invert_permissions =
+     0 < same_owner_option ? mode & (S_IRWXG | S_IRWXO) : 0;
+-  do
+-    status = mknod (file_name, mode ^ invert_permissions,
+-                  current_stat_info.stat.st_rdev);
+-  while (status && maybe_recoverable (file_name, &interdir_made));
++  while (mknod (file_name, mode ^ invert_permissions,
++              current_stat_info.stat.st_rdev))
++    switch (maybe_recoverable (file_name, &interdir_made))
++      {
++      case RECOVER_OK:
++      continue;
++      
++      case RECOVER_SKIP:
++      return 0;
++      
++      case RECOVER_NO:
++      mknod_error (file_name);
++      return -1;
++      }
+-  if (status != 0)
+-    mknod_error (file_name);
+-  else
+-    set_stat (file_name, &current_stat_info, NULL, invert_permissions,
+-            ARCHIVED_PERMSTATUS, typeflag);
++  set_stat (file_name, &current_stat_info, NULL, invert_permissions,
++          ARCHIVED_PERMSTATUS, typeflag);
+   return status;
+ }
+ #endif
+@@ -1077,15 +1103,22 @@ extract_fifo (char *file_name, int typeflag)
+     0 < same_owner_option ? mode & (S_IRWXG | S_IRWXO) : 0;
+   while ((status = mkfifo (file_name, mode)) != 0)
+-    if (!maybe_recoverable (file_name, &interdir_made))
+-      break;
++    switch (maybe_recoverable (file_name, &interdir_made))
++      {
++      case RECOVER_OK:
++      continue;
++      
++      case RECOVER_SKIP:
++      return 0;
++      
++      case RECOVER_NO:
++      mkfifo_error (file_name);
++      return -1;
++      }
+-  if (status == 0)
+-    set_stat (file_name, &current_stat_info, NULL, invert_permissions,
+-            ARCHIVED_PERMSTATUS, typeflag);
+-  else
+-    mkfifo_error (file_name);
+-  return status;
++  set_stat (file_name, &current_stat_info, NULL, invert_permissions,
++          ARCHIVED_PERMSTATUS, typeflag);
++  return 0;
+ }
+ #endif
+-- 
+1.7.1.1
+
diff --git a/app-arch/tar/files/tar-1.23-tests.patch b/app-arch/tar/files/tar-1.23-tests.patch
new file mode 100644 (file)
index 0000000..72eeadc
--- /dev/null
@@ -0,0 +1,27 @@
+http://bugs.gentoo.org/326785
+
+From 67b4f3519d838c6f16f5b6b63c0b9b8669fb3dd9 Mon Sep 17 00:00:00 2001
+From: Sergey Poznyakoff <gray@gnu.org.ua>
+Date: Fri, 12 Mar 2010 09:48:46 +0200
+Subject: [PATCH] Bugfixes.
+
+* tests/remfiles01.at: Skip if run with root privileges.
+---
+ tests/remfiles01.at |    1 +
+ 2 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/tests/remfiles01.at b/tests/remfiles01.at
+index 940fd95..73752b4 100644
+--- a/tests/remfiles01.at
++++ b/tests/remfiles01.at
+@@ -30,6 +30,7 @@ AT_KEYWORDS([create remove-files remfiles01 gzip])
+ unset TAR_OPTIONS
+ AT_CHECK([
++AT_UNPRIVILEGED_PREREQ
+ AT_GZIP_PREREQ
+ AT_SORT_PREREQ
+-- 
+1.7.1.1
+
diff --git a/app-arch/tar/tar-1.23-r3.ebuild b/app-arch/tar/tar-1.23-r3.ebuild
new file mode 100644 (file)
index 0000000..e712581
--- /dev/null
@@ -0,0 +1,73 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/app-arch/tar/tar-1.23-r3.ebuild,v 1.1 2010/07/18 21:05:50 vapier Exp $
+
+EAPI="2"
+
+inherit flag-o-matic eutils
+
+DESCRIPTION="Use this to make tarballs :)"
+HOMEPAGE="http://www.gnu.org/software/tar/"
+SRC_URI="http://ftp.gnu.org/gnu/tar/${P}.tar.bz2
+       ftp://alpha.gnu.org/gnu/tar/${P}.tar.bz2
+       mirror://gnu/tar/${P}.tar.bz2"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-fbsd"
+IUSE="nls static userland_GNU"
+
+RDEPEND=""
+DEPEND="${RDEPEND}
+       nls? ( >=sys-devel/gettext-0.10.35 )"
+
+src_prepare() {
+       unpack ${A}
+       cd "${S}"
+
+       epatch "${FILESDIR}"/${P}-revert-pipe.patch #309001
+       epatch "${FILESDIR}"/${P}-strncpy.patch #317139
+       epatch "${FILESDIR}"/${P}-symlink-k-hang.patch #327641
+       epatch "${FILESDIR}"/${P}-tests.patch #326785
+
+       if ! use userland_GNU ; then
+               sed -i \
+                       -e 's:/backup\.sh:/gbackup.sh:' \
+                       scripts/{backup,dump-remind,restore}.in \
+                       || die "sed non-GNU"
+       fi
+}
+
+src_configure() {
+       local myconf
+       use static && append-ldflags -static
+       use userland_GNU || myconf="--program-prefix=g"
+       # Work around bug in sandbox #67051
+       gl_cv_func_chown_follows_symlink=yes \
+       econf \
+               --enable-backup-scripts \
+               --bindir=/bin \
+               --libexecdir=/usr/sbin \
+               $(use_enable nls) \
+               ${myconf}
+}
+
+src_install() {
+       local p=""
+       use userland_GNU || p=g
+
+       emake DESTDIR="${D}" install || die "make install failed"
+
+       if [[ -z ${p} ]] ; then
+               # a nasty yet required piece of baggage
+               exeinto /etc
+               doexe "${FILESDIR}"/rmt || die
+       fi
+
+       dodoc AUTHORS ChangeLog* NEWS README* THANKS
+       newman "${FILESDIR}"/tar.1 ${p}tar.1
+       mv "${D}"/usr/sbin/${p}backup{,-tar}
+       mv "${D}"/usr/sbin/${p}restore{,-tar}
+
+       rm -f "${D}"/usr/$(get_libdir)/charset.alias
+}