[automake] Patch pax hang up with big UID corrected on the base of upstream(#843379)

Petr Hracek phracek at fedoraproject.org
Thu May 2 09:51:46 UTC 2013


commit 16f576c320e749f2e285abb99aceba220b427782
Author: Petr Hracek <phracek at redhat.com>
Date:   Thu May 2 11:44:08 2013 +0200

    Patch pax hang up with big UID corrected on the base of upstream(#843379)

 automake-1.13.1-pax-hangs.patch |  488 ++++++++++++++++++++++++++++++++++++---
 automake.spec                   |   11 +-
 tar-ustar-id-too-high.sh        |   86 +++++++
 3 files changed, 550 insertions(+), 35 deletions(-)
---
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 at gmail.com
+ Maciej Stachowiak               mstachow at mit.edu
+ Maciej W. Rozycki               macro at ds2.pg.gda.pl
+ Manu Rouat                      emmanuel.rouat at wanadoo.fr
++Marc Herbert                    marc.herbert at intel.com
+ Marcus Brinkmann                Marcus.Brinkmann at ruhr-uni-bochum.de
+ Marcus G. Daniels               mgd at ute.santafe.edu
+ Marius Vollmer                  mvo at zagadka.ping.de
+@@ -311,6 +312,7 @@ Peter Muir                      iyhi at yahoo.com
+ Peter O'Gorman                  peter at pogma.com
+ Peter Rosin                     peda at lysator.liu.se
+ Peter Seiderer                  seiderer123 at ciselant.de
++Petr Hracek                     phracek at redhat.com
+ Petter Reinholdtsen             pere at hungry.com
+ Petteri Räty                    betelgeuse at gentoo.org
+ Phil Edwards                    phil at jaj.com
+@@ -391,6 +393,7 @@ Tim Rice                        tim at multitalents.net
+ Tim Van Holder                  tim.van.holder at pandora.be
+ Toshio Kuratomi                 toshio at tiki-lounge.com
+ Tom Epperly                     tepperly at llnl.gov
++Tom Rini                        tom_rini at mentor.com
+ Ulrich Drepper                  drepper at gnu.ai.mit.edu
+ Ulrich Eckhardt                 eckhardt at satorlaser.com
+ Václav Haisman                  V.Haisman at 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])
+@@ -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
++      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 <conftest.tar])
++      AM_RUN_LOG([cat conftest.dir/file])
++      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
++    fi
++  done
    rm -rf conftest.dir
-   if test -s conftest.tar; then
+-  if test -s conftest.tar; then
 -    AM_RUN_LOG([$am__untar <conftest.tar])
-+    m4_if([$1], [ustar], [
-+      if test "$_am_tool" = pax; then
-+        # Automake bugs #8343 and #13588: 'pax' can hang when UIDs
-+        # or GIDs are involved that requires more than 21 bits to
-+        # be stored.
-+        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 here are
-+        # definitely unexpected, so allow the users to see them (i.e.,
-+        # no stderr redirection).
-+        am_uid=`id -u || echo unknown`
-+        am_gid=`id -g || echo unknown`
-+        if test $am_uid -le $am_max_uid; then :; else
-+          AS_ECHO(["$as_me: $LINENO: UID '$am_uid' too large for ustar"]) \
-+          >&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
-+      fi
-+    ]) # $1 == ustar
-     grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-   fi
- done
+-    grep GrepMe conftest.dir/file >/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 <http://www.gnu.org/licenses/>.
++
++# 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 <<END
++AC_INIT([$me], [1.0])
++AM_INIT_AUTOMAKE([tar-ustar])
++AC_CONFIG_FILES([Makefile])
++AC_OUTPUT
++END
++
++: > 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
++# <https://bugzilla.redhat.com/show_bug.cgi?id=843376>.
++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
++# <https://bugzilla.redhat.com/show_bug.cgi?id=843376>.
++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))
++# <https://bugzilla.redhat.com/show_bug.cgi?id=843376>.
++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 <<END
++AC_INIT([$me], [1.0])
+ AM_INIT_AUTOMAKE([tar-ustar])
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
+@@ -32,9 +32,12 @@ $AUTOCONF
+ $AUTOMAKE
+ ./configure
+ 
+-if grep 'am__tar.*false' Makefile; then
++grep 'am__tar' Makefile # For debugging.
++if grep '^am__tar = false' Makefile; then
+   skip_ "cannot find proper archiver program"
+ fi
+ 
+ $MAKE distcheck
+-test -f tar-1.0.tar.gz
++test -f "$distdir.tar.gz"
++
++:
+diff --git a/t/tar2.sh b/t/tar2.sh
+index 5a9d4d7..758d89a 100755
+--- a/t/tar2.sh
++++ b/t/tar2.sh
+@@ -18,8 +18,8 @@
+ 
+ . test-init.sh
+ 
+-cat > configure.ac << 'END'
+-AC_INIT([tar2], [1.0])
++cat > configure.ac <<END
++AC_INIT([$me], [1.0])
+ AM_INIT_AUTOMAKE([tar-pax])
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
+@@ -32,9 +32,12 @@ $AUTOCONF
+ $AUTOMAKE
+ ./configure
+ 
+-if grep 'am__tar.*false' Makefile; then
++grep 'am__tar' Makefile # For debugging.
++if grep '^am__tar = false' Makefile; then
+   skip_ "cannot find proper archiver program"
+ fi
+ 
+ $MAKE distcheck
+-test -f tar2-1.0.tar.gz
++test -f "$distdir.tar.gz"
++
++:
+diff --git a/t/tar3.sh b/t/tar3.sh
+index 040d7b4..befc23f 100755
+--- a/t/tar3.sh
++++ b/t/tar3.sh
+@@ -18,8 +18,8 @@
+ 
+ . test-init.sh
+ 
+-cat > configure.ac << 'END'
+-AC_INIT([tar2], [1.0])
++cat > configure.ac <<END
++AC_INIT([$me], [1.0])
+ AM_INIT_AUTOMAKE([tar-pax tar-v7])
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
+@@ -37,8 +37,8 @@ grep "'tar-v7'"  tar-err
+ 
+ rm -rf autom4te.cache
+ 
+-cat > configure.ac << 'END'
+-AC_INIT([tar2], [1.0])
++cat > configure.ac <<END
++AC_INIT([$me], [1.0])
+ AM_INIT_AUTOMAKE
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
+@@ -47,6 +47,6 @@ END
+ echo 'AUTOMAKE_OPTIONS = tar-pax' > 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 <phracek at redhat.com> - 1.13.1-18
+- Patch pax hang up with big UID corrected on the base of upstream(#843379)
+
 * Wed Apr 24 2013 Petr Hracek <phracek at redhat.com> - 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 <http://www.gnu.org/licenses/>.
+
+# 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 <<END
+AC_INIT([$me], [1.0])
+AM_INIT_AUTOMAKE([tar-ustar])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+END
+
+: > 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
+# <https://bugzilla.redhat.com/show_bug.cgi?id=843376>.
+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
+# <https://bugzilla.redhat.com/show_bug.cgi?id=843376>.
+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))
+# <https://bugzilla.redhat.com/show_bug.cgi?id=843376>.
+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"


More information about the scm-commits mailing list