diff --git a/automake-1.13.1-pax-hangs.patch b/automake-1.13.1-pax-hangs.patch index 5351003..809bb1a 100644 --- a/automake-1.13.1-pax-hangs.patch +++ b/automake-1.13.1-pax-hangs.patch @@ -1,37 +1,461 @@ +diff --git a/THANKS b/THANKS +index 66498d4..a574909 100644 +--- a/THANKS ++++ b/THANKS +@@ -224,6 +224,7 @@ Luo Yi luoyi.ly@gmail.com + Maciej Stachowiak mstachow@mit.edu + Maciej W. Rozycki macro@ds2.pg.gda.pl + Manu Rouat emmanuel.rouat@wanadoo.fr ++Marc Herbert marc.herbert@intel.com + Marcus Brinkmann Marcus.Brinkmann@ruhr-uni-bochum.de + Marcus G. Daniels mgd@ute.santafe.edu + Marius Vollmer mvo@zagadka.ping.de +@@ -311,6 +312,7 @@ Peter Muir iyhi@yahoo.com + Peter O'Gorman peter@pogma.com + Peter Rosin peda@lysator.liu.se + Peter Seiderer seiderer123@ciselant.de ++Petr Hracek phracek@redhat.com + Petter Reinholdtsen pere@hungry.com + Petteri Räty betelgeuse@gentoo.org + Phil Edwards phil@jaj.com +@@ -391,6 +393,7 @@ Tim Rice tim@multitalents.net + Tim Van Holder tim.van.holder@pandora.be + Toshio Kuratomi toshio@tiki-lounge.com + Tom Epperly tepperly@llnl.gov ++Tom Rini tom_rini@mentor.com + Ulrich Drepper drepper@gnu.ai.mit.edu + Ulrich Eckhardt eckhardt@satorlaser.com + Václav Haisman V.Haisman@sh.cvut.cz diff --git a/m4/tar.m4 b/m4/tar.m4 -index ec8c83e..681fcbf 100644 +index ec8c83e..aac6d8f 100644 --- a/m4/tar.m4 +++ b/m4/tar.m4 -@@ -81,7 +81,31 @@ do - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then -- AM_RUN_LOG([$am__untar &AS_MESSAGE_LOG_FD -+ continue -+ fi -+ if test $am_gid -le $am_max_gid; then :; else -+ AS_ECHO(["$as_me: $LINENO: UID '$am_gid' too large for ustar"]) \ -+ >&AS_MESSAGE_LOG_FD -+ continue -+ fi +@@ -19,76 +19,114 @@ + # Substitute a variable $(am__untar) that extract such + # a tarball read from stdin. + # $(am__untar) < result.tar ++# + AC_DEFUN([_AM_PROG_TAR], + [# Always define AMTAR for backward compatibility. Yes, it's still used + # in the wild :-( We should find a proper way to deprecate it ... + AC_SUBST([AMTAR], ['$${TAR-tar}']) +-m4_if([$1], [v7], +- [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], +- [m4_case([$1], [ustar],, [pax],, +- [m4_fatal([Unknown tar format])]) +-AC_MSG_CHECKING([how to create a $1 tar archive]) +-# Loop over all known methods to create a tar archive until one works. ++ ++# We'll loop over all known methods to create a tar archive until one works. + _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +-_am_tools=${am_cv_prog_tar_$1-$_am_tools} +-# Do not fold the above two line into one, because Tru64 sh and +-# Solaris sh will not grok spaces in the rhs of '-'. +-for _am_tool in $_am_tools +-do +- case $_am_tool in +- gnutar) +- for _am_tar in tar gnutar gtar; +- do +- AM_RUN_LOG([$_am_tar --version]) && break +- done +- am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' +- am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' +- am__untar="$_am_tar -xf -" +- ;; +- plaintar) +- # Must skip GNU tar: if it does not support --format= it doesn't create +- # ustar tarball either. +- (tar --version) >/dev/null 2>&1 && continue +- am__tar='tar chf - "$$tardir"' +- am__tar_='tar chf - "$tardir"' +- am__untar='tar xf -' +- ;; +- pax) +- am__tar='pax -L -x $1 -w "$$tardir"' +- am__tar_='pax -L -x $1 -w "$tardir"' +- am__untar='pax -r' +- ;; +- cpio) +- am__tar='find "$$tardir" -print | cpio -o -H $1 -L' +- am__tar_='find "$tardir" -print | cpio -o -H $1 -L' +- am__untar='cpio -i -H $1 -d' +- ;; +- none) +- am__tar=false +- am__tar_=false +- am__untar=false +- ;; +- esac + +- # If the value was cached, stop now. We just wanted to have am__tar +- # and am__untar set. +- test -n "${am_cv_prog_tar_$1}" && break ++m4_if([$1], [v7], ++ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + +- # tar/untar a dummy directory, and stop if the command works +- rm -rf conftest.dir +- mkdir conftest.dir +- echo GrepMe > conftest.dir/file +- AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) ++ [m4_case([$1], ++ [ustar], ++ [# The POSIX 1988 'ustar' format is defined with fixed-size fields. ++ # There is notably a 21 bits limit for the UID and the GID. In fact, ++ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 ++ # and bug#13588). ++ am_max_uid=2097151 # 2^21 - 1 ++ am_max_gid=$am_max_uid ++ # The $UID and $GID variables are not portable, so we need to resort ++ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls ++ # below are definitely unexpected, so allow the users to see them ++ # (that is, avoid stderr redirection). ++ am_uid=`id -u || echo unknown` ++ am_gid=`id -g || echo unknown` ++ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) ++ if test $am_uid -le $am_max_uid; then ++ AC_MSG_RESULT([yes]) ++ else ++ AC_MSG_RESULT([no]) ++ _am_tools=none + fi -+ ]) # $1 == ustar - grep GrepMe conftest.dir/file >/dev/null 2>&1 && break - fi - done ++ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) ++ if test $am_gid -le $am_max_gid; then ++ AC_MSG_RESULT([yes]) ++ else ++ AC_MSG_RESULT([no]) ++ _am_tools=none ++ fi], ++ ++ [pax], ++ [], ++ ++ [m4_fatal([Unknown tar format])]) ++ ++ AC_MSG_CHECKING([how to create a $1 tar archive]) ++ ++ # Go ahead even if we have the value already cached. We do so because we ++ # need to set the values for the 'am__tar' and 'am__untar' variables. ++ _am_tools=${am_cv_prog_tar_$1-$_am_tools} ++ ++ for _am_tool in $_am_tools; do ++ case $_am_tool in ++ gnutar) ++ for _am_tar in tar gnutar gtar; do ++ AM_RUN_LOG([$_am_tar --version]) && break ++ done ++ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' ++ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' ++ am__untar="$_am_tar -xf -" ++ ;; ++ plaintar) ++ # Must skip GNU tar: if it does not support --format= it doesn't create ++ # ustar tarball either. ++ (tar --version) >/dev/null 2>&1 && continue ++ am__tar='tar chf - "$$tardir"' ++ am__tar_='tar chf - "$tardir"' ++ am__untar='tar xf -' ++ ;; ++ pax) ++ am__tar='pax -L -x $1 -w "$$tardir"' ++ am__tar_='pax -L -x $1 -w "$tardir"' ++ am__untar='pax -r' ++ ;; ++ cpio) ++ am__tar='find "$$tardir" -print | cpio -o -H $1 -L' ++ am__tar_='find "$tardir" -print | cpio -o -H $1 -L' ++ am__untar='cpio -i -H $1 -d' ++ ;; ++ none) ++ am__tar=false ++ am__tar_=false ++ am__untar=false ++ ;; ++ esac ++ ++ # If the value was cached, stop now. We just wanted to have am__tar ++ # and am__untar set. ++ test -n "${am_cv_prog_tar_$1}" && break ++ ++ # tar/untar a dummy directory, and stop if the command works. ++ rm -rf conftest.dir ++ mkdir conftest.dir ++ echo GrepMe > conftest.dir/file ++ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) ++ rm -rf conftest.dir ++ if test -s conftest.tar; then ++ AM_RUN_LOG([$am__untar /dev/null 2>&1 && break ++ fi ++ done + rm -rf conftest.dir +- if test -s conftest.tar; then +- AM_RUN_LOG([$am__untar /dev/null 2>&1 && break +- fi +-done +-rm -rf conftest.dir + +-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +-AC_MSG_RESULT([$am_cv_prog_tar_$1])]) ++ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) ++ AC_MSG_RESULT([$am_cv_prog_tar_$1])]) ++ + AC_SUBST([am__tar]) + AC_SUBST([am__untar]) + ]) # _AM_PROG_TAR +diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk +index f1e3dca..664a902 100644 +--- a/t/list-of-tests.mk ++++ b/t/list-of-tests.mk +@@ -1151,6 +1151,7 @@ t/tags-pr12372.sh \ + t/tar.sh \ + t/tar2.sh \ + t/tar3.sh \ ++t/tar-ustar-id-too-high.sh \ + t/tar-override.sh \ + t/target-cflags.sh \ + t/targetclash.sh \ +diff --git a/t/tar-override.sh b/t/tar-override.sh +index 863b9ab..bbf3fbb 100755 +--- a/t/tar-override.sh ++++ b/t/tar-override.sh +@@ -16,8 +16,8 @@ + + # Check that the user can override the tar program used by "make dist" + # at runtime, by redefining the 'TAR' environment variable. +-# FIXME: currently this works only when the tar format used is 'v7' +-# FIXME: (which is the default one). ++# NOTE: currently this works only when the tar format used is 'v7' ++# (which is the default one). + + . test-init.sh + +@@ -35,6 +35,7 @@ chmod a+x am--tar + + cat > Makefile.am <<'END' + check-local: dist ++ ls -l ;: For debugging. + test -f am--tar-has-run + CLEANFILES = am--tar-has-run + END +@@ -44,22 +45,24 @@ $AUTOCONF + $AUTOMAKE + ./configure + ++clean_temp () { rm -f *.tar.* *has-run*; } ++ + $MAKE dist +-test -f $me-1.0.tar.gz ++test -f $distdir.tar.gz + ls | grep has-run && exit 1 + +-rm -f *.tar.* *has-run* ++clean_temp + + TAR="$cwd/am--tar foo" $MAKE distcheck +-test -f $me-1.0.tar.gz ++test -f $distdir.tar.gz + test "$(cat am--tar-has-run)" = foo + +-rm -f *.tar.* *has-run* ++clean_temp + + TAR=; unset TAR + # Creative use of eval to pacify maintainer checks. + eval \$'MAKE dist "TAR=./am--tar mu"' +-test -f $me-1.0.tar.gz ++test -f $distdir.tar.gz + test "$(cat am--tar-has-run)" = mu + + : +diff --git a/t/tar-ustar-id-too-high.sh b/t/tar-ustar-id-too-high.sh +new file mode 100755 +index 0000000..79ae89d +--- /dev/null ++++ b/t/tar-ustar-id-too-high.sh +@@ -0,0 +1,88 @@ ++#! /bin/sh ++# Copyright (C) 2013 Free Software Foundation, Inc. ++# ++# 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, see . ++ ++# Check that UID or GID too high for the ustar format are correctly ++# rwcognized and diagnosed by configure. See bug#8343 and bug#13588. ++ ++. test-init.sh ++ ++cat > configure.ac < Makefile.am ++ ++run_configure() ++{ ++ st=0; ./configure ${1+"$@"} >stdout || st=$? ++ cat stdout || exit 1 ++ test $st -eq 0 || exit 1 ++} ++ ++checked () ++{ ++ grep "^checking $1\.\.\. $2$" stdout ++} ++ ++$ACLOCAL ++$AUTOCONF ++$AUTOMAKE ++ ++mkdir bin ++cat > bin/id <<'END' ++#!/bin/sh -e ++case "$*" in ++ -u) echo "${am_uid-1000}";; ++ -g) echo "${am_gid-1000}";; ++ *) echo "id: bad/unexpected usage" >&2; exit 1;; ++esac ++END ++chmod a+x bin/id ++ ++PATH=$(pwd)/bin$PATH_SEPARATOR$PATH ++ ++# Problematic ID reported in ++# . ++am_uid=16777216; export am_uid ++am_gid=1000; export am_gid ++run_configure ++checked "whether UID '$am_uid' is supported by ustar format" "no" ++checked "whether GID '1000' is supported by ustar format" "yes" ++checked "how to create a ustar tar archive" "none" ++ ++# Another problematic ID reported in ++# . ++am_uid=1000; export am_uid ++am_gid=17000000; export am_gid ++run_configure ++checked "whether UID '1000' is supported by ustar format" "yes" ++checked "whether GID '$am_gid' is supported by ustar format" "no" ++checked "how to create a ustar tar archive" "none" ++ ++# The minimal ID that is too big. ++two_to_twentyone=$((32 * 32 * 32 * 32 * 2)) ++# . ++am_uid=$two_to_twentyone; export am_uid ++am_gid=$two_to_twentyone; export am_gid ++run_configure ++checked "whether UID '$two_to_twentyone' is supported by ustar format" "no" ++checked "whether GID '$two_to_twentyone' is supported by ustar format" "no" ++checked "how to create a ustar tar archive" "none" ++ ++: +diff --git a/t/tar.sh b/t/tar.sh +index 58e52ea..c146ad9 100755 +--- a/t/tar.sh ++++ b/t/tar.sh +@@ -18,8 +18,8 @@ + + . test-init.sh + +-cat > configure.ac << 'END' +-AC_INIT([tar], [1.0]) ++cat > configure.ac < configure.ac << 'END' +-AC_INIT([tar2], [1.0]) ++cat > configure.ac < configure.ac << 'END' +-AC_INIT([tar2], [1.0]) ++cat > configure.ac < configure.ac << 'END' +-AC_INIT([tar2], [1.0]) ++cat > configure.ac < Makefile.am + + AUTOMAKE_fails +-grep '^Makefile\.am:1:.*tar-pax.*AM_INIT_AUTOMAKE' stderr ++grep "^Makefile\.am:1:.*'tar-pax'.*AM_INIT_AUTOMAKE" stderr + + : diff --git a/automake.spec b/automake.spec index bd2cfde..93ded97 100644 --- a/automake.spec +++ b/automake.spec @@ -3,13 +3,14 @@ Summary: A GNU tool for automatically creating Makefiles Name: automake Version: %{api_version}.1 -Release: 17%{?dist} +Release: 18%{?dist} # docs ~> GFDL, sources ~> GPLv2+, mkinstalldirs ~> PD and install-sh ~> MIT License: GPLv2+ and GFDL and Public Domain and MIT Group: Development/Tools Source: ftp://ftp.gnu.org/gnu/automake/automake-%{version}.tar.xz +Source2: tar-ustar-id-too-high.sh Patch0: %{name}-%{version}-reenable-disabled-macros.patch Patch1: %{name}-%{version}-disable-tests.patch @@ -19,7 +20,7 @@ Patch1: %{name}-%{version}-disable-tests.patch # ~> #901333 # ~> already upstream (commits 7a3d7cee2 and c83c13355) Patch2: %{name}-%{version}-non-existing-m4-dir.patch -#Patch3: %{name}-%{version}-pax-hangs.patch +Patch3: %{name}-%{version}-pax-hangs.patch URL: http://www.gnu.org/software/automake/ Requires: autoconf >= 2.65 @@ -70,7 +71,8 @@ Makefiles. %patch0 -p1 -b .reenable_macros %patch1 -p1 -b .disable_tests %patch2 -p1 -b .non_existing_m4_dir -#%patch3 -p1 -b .pax-hangs +%patch3 -p1 -b .pax-hangs +cp %{SOURCE2} t/ autoreconf -iv # Fedora only to add ppc64p7 (Power7 optimized) arch: @@ -111,6 +113,9 @@ fi %{_mandir}/man1/* %changelog +* Thu May 03 2013 Petr Hracek - 1.13.1-18 +- Patch pax hang up with big UID corrected on the base of upstream(#843379) + * Wed Apr 24 2013 Petr Hracek - 1.13.1-17 - Patch pax hang up with big UID was removed(#843379) diff --git a/tar-ustar-id-too-high.sh b/tar-ustar-id-too-high.sh new file mode 100644 index 0000000..371440f --- /dev/null +++ b/tar-ustar-id-too-high.sh @@ -0,0 +1,86 @@ +#! /bin/sh +# Copyright (C) 2013 Free Software Foundation, Inc. +# +# 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, see . + +# Check that UID or GID too high for the ustar format are correctly +# rwcognized and diagnosed by configure. See bug#8343 and bug#13588. + +. test-init.sh + +cat > configure.ac < Makefile.am + +run_configure() +{ + st=0; ./configure ${1+"$@"} >stdout || st=$? + cat stdout || exit 1 + test $st -eq 0 || exit 1 +} + +checked () +{ + grep "^checking $1\.\.\. $2$" stdout +} + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +mkdir bin +cat > bin/id <<'END' +#!/bin/sh -e +case "$*" in + -u) echo "${am_uid-1000}";; + -g) echo "${am_gid-1000}";; + *) echo "id: bad/unexpected usage" >&2; exit 1;; +esac +END +chmod a+x bin/id + +PATH=$(pwd)/bin$PATH_SEPARATOR$PATH + +# Problematic ID reported in +# . +am_uid=16777216; export am_uid +am_gid=1000; export am_gid +run_configure +checked "whether UID '$am_uid' is supported by ustar format" "no" +checked "whether GID '1000' is supported by ustar format" "yes" +checked "how to create a ustar tar archive" "none" + +# Another problematic ID reported in +# . +am_uid=1000; export am_uid +am_gid=17000000; export am_gid +run_configure +checked "whether UID '1000' is supported by ustar format" "yes" +checked "whether GID '$am_gid' is supported by ustar format" "no" +checked "how to create a ustar tar archive" "none" + +# The minimal ID that is too big. +two_to_twentyone=$((32 * 32 * 32 * 32 * 2)) +# . +am_uid=$two_to_twentyone; export am_uid +am_gid=$two_to_twentyone; export am_gid +run_configure +checked "whether UID '$two_to_twentyone' is supported by ustar format" "no" +checked "whether GID '$two_to_twentyone' is supported by ustar format" "no" +checked "how to create a ustar tar archive" "none"