summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app-arch/tar/ChangeLog10
-rw-r--r--app-arch/tar/files/tar-1.23-strncpy.patch32
-rw-r--r--app-arch/tar/tar-1.23-r1.ebuild69
3 files changed, 110 insertions, 1 deletions
diff --git a/app-arch/tar/ChangeLog b/app-arch/tar/ChangeLog
index 18d82f212691..629a855a6e46 100644
--- a/app-arch/tar/ChangeLog
+++ b/app-arch/tar/ChangeLog
@@ -1,6 +1,14 @@
# 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.142 2010/03/10 13:55:50 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/app-arch/tar/ChangeLog,v 1.143 2010/04/25 16:44:23 chainsaw Exp $
+
+*tar-1.23-r1 (25 Apr 2010)
+
+ 25 Apr 2010; <chainsaw@gentoo.org> +tar-1.23-r1.ebuild,
+ +files/tar-1.23-strncpy.patch:
+ Glibc built with GCC 4.5 will notice a buffer overflow in the handling of
+ OLD_GNU magic bytes and kill us. Apply a Fedora patch scavenged by Emil
+ Karlson to avoid this happening; closes bug #317139.
*tar-1.23 (10 Mar 2010)
diff --git a/app-arch/tar/files/tar-1.23-strncpy.patch b/app-arch/tar/files/tar-1.23-strncpy.patch
new file mode 100644
index 000000000000..c4939268c219
--- /dev/null
+++ b/app-arch/tar/files/tar-1.23-strncpy.patch
@@ -0,0 +1,32 @@
+diff -uNr tar-1.23.ORIG//src/create.c tar-1.23/src/create.c
+--- tar-1.23.ORIG//src/create.c 2010-04-25 17:36:03.553606076 +0100
++++ tar-1.23/src/create.c 2010-04-25 17:36:16.294605862 +0100
+@@ -575,7 +575,10 @@
+ GNAME_TO_CHARS (tmpname, header->header.gname);
+ free (tmpname);
+
+- strcpy (header->header.magic, OLDGNU_MAGIC);
++ /* OLDGNU_MAGIC is string with 7 chars + NULL */
++ strncpy (header->header.magic, OLDGNU_MAGIC, sizeof(header->header.magic));
++ strncpy (header->header.version, OLDGNU_MAGIC+sizeof(header->header.magic),
++ sizeof(header->header.version));
+ header->header.typeflag = type;
+ finish_header (st, header, -1);
+
+@@ -910,9 +913,13 @@
+ break;
+
+ case OLDGNU_FORMAT:
+- case GNU_FORMAT: /*FIXME?*/
+- /* Overwrite header->header.magic and header.version in one blow. */
+- strcpy (header->header.magic, OLDGNU_MAGIC);
++ case GNU_FORMAT:
++ /* OLDGNU_MAGIC is string with 7 chars + NULL */
++ strncpy (header->header.magic, OLDGNU_MAGIC,
++ sizeof(header->header.magic));
++ strncpy (header->header.version,
++ OLDGNU_MAGIC+sizeof(header->header.magic),
++ sizeof(header->header.version));
+ break;
+
+ case POSIX_FORMAT:
diff --git a/app-arch/tar/tar-1.23-r1.ebuild b/app-arch/tar/tar-1.23-r1.ebuild
new file mode 100644
index 000000000000..03bac74a9a0a
--- /dev/null
+++ b/app-arch/tar/tar-1.23-r1.ebuild
@@ -0,0 +1,69 @@
+# 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-r1.ebuild,v 1.1 2010/04/25 16:44:23 chainsaw Exp $
+
+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_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ epatch "${FILESDIR}"/${P}-strncpy.patch #317139
+
+ 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_compile() {
+ 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} || die
+ emake || die "emake failed"
+}
+
+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
+}