On 04/22/2013 03:55 PM, Stefano Lattarini wrote: > Hi Peter, thanks for the feedback. > > On 04/22/2013 03:21 PM, Petr Hracek wrote: >> Hello Stefano, >> >> thanks for the patch. All is working properly. >> User is informed that UID is not enough smaller and configure script does >> not failed. >> > Good to know the logic is sound. However, I now notice that there > is still a problem with the output of configure :-/ (details below). > >> Result is below: >> test@localhost: ~/mycproject$ id >> uid=17000000(test) gid=1001(test) groups=1001(test) >> context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 >> test@localhost: ~/mycproject$ ./configure >> checking for a BSD-compatible install... /usr/bin/install -c >> checking whether build environment is sane... yes >> checking for a thread-safe mkdir -p... /usr/bin/mkdir -p >> checking for gawk... gawk >> checking whether make sets $(MAKE)... yes >> checking how to create a ustar tar archive... checking whether UID >> '17000000' is small enough for ustar... no >> none >> > Oops, there are two messages are crossing. This is bad. > I think the best solution at this point is simply to report the too-high UID > only in the generated config.log rather than in the console output. Updated > patch coming up soonish (I hope)... > Here it is. I'd appreciate further testing, if possible.
Thanks, Stefano ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- 8< ---- >From bfb877d2337acfe3af1ef0d6e405f834a9287a37 Mon Sep 17 00:00:00 2001 Message-Id: <bfb877d2337acfe3af1ef0d6e405f834a9287a37.1366706596.git.stefano.lattar...@gmail.com> From: Stefano Lattarini <[email protected]> Date: Sun, 17 Feb 2013 16:42:46 +0100 Subject: [PATCH] tar: pax could hang configure when big UID are involved See automake bug#8343 and bug#13588. Tom Rini [email protected] says (in bug#8343): When the user has a UID or GID that is larger than the ustar format supports, pax does not error out gracefully in some cases (FC13). Marc Herbert <[email protected]> adds (in bug#8343): When "configure" is run by a user with an UID bigger than 21 bits, BSD pax 3.4 aborts when trying to create the 'conftest.tar' test archive and leaves an empty or corrupted conftest.tar file behind. In the next step, pax tries to extract this incomplete or corrupted archive and this *** hangs the whole ./configure script ***. Note: GNU cpio 2.9 pretends to pass the test but it is a LIE: it silently truncates any big UID to its lower 21 bits. I don't know what can be the consequences of this lie. Months later, Petr Hracek <[email protected]> reports a similar issue (in bug#13588) for Fedora 17: I am trying to solve problem in case a user is created with big UID and during configuration pax hangs with message ATTENTION! pax archive volume change required. Ready for archive volume: 1 Input archive name or "." to quit pax. Archive name > and needs user interaction. Reference: <https://bugzilla.redhat.com/show_bug.cgi?id=843376> Time to fix this issue, on the line of a preliminary patch provided by Petr Hracek in bug#13588. * m4/tar.m4 (_AM_PROG_TAR): Don't use 'pax' if the UID or GID of the current user is too high (> 2097151). * NEWS: Update. * THANKS: Likewise. Signed-off-by: Stefano Lattarini <[email protected]> --- NEWS | 6 ++++++ THANKS | 3 +++ m4/tar.m4 | 26 +++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index f9a1fb1..863ffdf 100644 --- a/NEWS +++ b/NEWS @@ -78,6 +78,12 @@ New in 1.13.2: * Bugs fixed: + - When the 'ustar' option is used, the generated configure script no + longer risks hanging during the tests for the availability of the + 'pax' utility, even if the user running configure has a UID or GID + that requires more than 21 bits to be represented. + See automake bug#8343 and bug#13588. + - The obsolete macros AM_CONFIG_HEADER or AM_PROG_CC_STDC work once again, as they did in Automake 1.12.x (albeit printing runtime warnings in the 'obsolete' category). Removing them has turned diff --git a/THANKS b/THANKS index 66498d4..a574909 100644 --- a/THANKS +++ b/THANKS @@ -224,6 +224,7 @@ Luo Yi [email protected] Maciej Stachowiak [email protected] Maciej W. Rozycki [email protected] Manu Rouat [email protected] +Marc Herbert [email protected] Marcus Brinkmann [email protected] Marcus G. Daniels [email protected] Marius Vollmer [email protected] @@ -311,6 +312,7 @@ Peter Muir [email protected] Peter O'Gorman [email protected] Peter Rosin [email protected] Peter Seiderer [email protected] +Petr Hracek [email protected] Petter Reinholdtsen [email protected] Petteri Räty [email protected] Phil Edwards [email protected] @@ -391,6 +393,7 @@ Tim Rice [email protected] Tim Van Holder [email protected] Toshio Kuratomi [email protected] Tom Epperly [email protected] +Tom Rini [email protected] Ulrich Drepper [email protected] Ulrich Eckhardt [email protected] Václav Haisman [email protected] diff --git a/m4/tar.m4 b/m4/tar.m4 index ec8c83e..61c1206 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 <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: GID '$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 -- 1.8.2.1.389.gcaa7d79
