Author: robert
Date: 2006-08-20 20:15:11 -0600 (Sun, 20 Aug 2006)
New Revision: 1652
Added:
trunk/gzip/gzip-1.3.5-hardened_tmp-1.patch
Log:
Added gzip-1.3.5-hardened_tmp-1.patch
Added: trunk/gzip/gzip-1.3.5-hardened_tmp-1.patch
===================================================================
--- trunk/gzip/gzip-1.3.5-hardened_tmp-1.patch (rev 0)
+++ trunk/gzip/gzip-1.3.5-hardened_tmp-1.patch 2006-08-21 02:15:11 UTC (rev
1652)
@@ -0,0 +1,183 @@
+Submitted By: Robert Connolly <robert at linuxfromscratch dot org> (ashes)
+Date: 2006-08-20
+Initial Package Version: 1.3.5
+Upstream Status: Not submitted - Mktemp would need to be added to configure
+Origin: Openwall Owl Linux - gzip-1.3.5-openbsd-owl-alt-tmp.diff
+Description: This patch modifies Gzip to create temporary files in a
+paranoid way, including use of the Mktemp package.
+
+diff -Naur gzip-1.3.5.orig/gzexe.in gzip-1.3.5/gzexe.in
+--- gzip-1.3.5.orig/gzexe.in 2002-09-28 06:18:11.000000000 +0000
++++ gzip-1.3.5/gzexe.in 2006-08-21 00:58:25.000000000 +0000
+@@ -42,9 +42,6 @@
+ exit 1
+ fi
+
+-tmp=gz$$
+-trap "rm -f $tmp; exit 1" 1 2 3 5 10 13 15
+-
+ decomp=0
+ res=0
+ test "$x" = "ungzexe" && decomp=1
+@@ -53,12 +50,10 @@
+ shift
+ fi
+
+-echo hi > zfoo1$$
+-echo hi > zfoo2$$
+-if test -z "`(${CPMOD-cpmod} zfoo1$$ zfoo2$$) 2>&1`"; then
+- cpmod=${CPMOD-cpmod}
++cpmod=
++if type ${CPMOD:-cpmod} 2>/dev/null; then
++ cpmod=${CPMOD:-cpmod}
+ fi
+-rm -f zfoo[12]$$
+
+ tail=""
+ IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:"
+@@ -99,9 +94,14 @@
+ continue
+ fi
+ case "`basename $i`" in
+- gzip | tail | sed | chmod | ln | sleep | rm)
++ bash | chmod | gzip | ln | mktemp | rm | sed | sh | tail)
+ echo "${x}: $i would depend on itself"; continue ;;
+ esac
++
++ tmp=`mktemp -t gzexe.XXXXXXXXXX` || exit 1
++ trap 'rc=$?; trap - EXIT; test -z "$tmp" || rm -f -- "$tmp"; exit $rc' \
++ EXIT HUP INT QUIT PIPE TERM
++
+ if test -z "$cpmod"; then
+ cp -p "$i" $tmp 2>/dev/null || cp "$i" $tmp
+ if test -w $tmp 2>/dev/null; then
+@@ -112,31 +112,23 @@
+ fi
+ fi
+ if test $decomp -eq 0; then
+- sed 1q $0 > $tmp
++ sed 1q "$0" > $tmp
+ sed "s|^if tail|if $tail|" >> $tmp <<'EOF'
+-skip=22
+-set -C
+-umask=`umask`
+-umask 77
+-if tail +$skip "$0" | "BINDIR"/gzip -cd > /tmp/gztmp$$; then
+- umask $umask
+- /bin/chmod 700 /tmp/gztmp$$
+- prog="`echo $0 | /bin/sed 's|^.*/||'`"
+- if /bin/ln /tmp/gztmp$$ "/tmp/$prog" 2>/dev/null; then
+- trap '/bin/rm -f /tmp/gztmp$$ "/tmp/$prog"; exit $res' 0
+- (/bin/sleep 5; /bin/rm -f /tmp/gztmp$$ "/tmp/$prog") 2>/dev/null &
+- /tmp/"$prog" ${1+"$@"}; res=$?
+- else
+- trap '/bin/rm -f /tmp/gztmp$$; exit $res' 0
+- (/bin/sleep 5; /bin/rm -f /tmp/gztmp$$) 2>/dev/null &
+- /tmp/gztmp$$ ${1+"$@"}; res=$?
+- fi
++skip=14
++tmpdir=`/bin/mktemp -dt gzexe.XXXXXXXXXX` || exit 1
++prog="${tmpdir}/${0##*/}"
++if tail +$skip "$0" | "BINDIR"/gzip -cd > "$prog"; then
++ /bin/chmod 700 "$prog"
++ trap '/bin/rm -rf -- "$tmpdir"; exit $res' EXIT
++ "$prog" ${1+"$@"}; res=$?
+ else
+- echo Cannot decompress $0; exit 1
++ echo "Cannot decompress $0"
++ /bin/rm -rf "$tmpdir"
++ exit 1
+ fi; exit $res
+ EOF
+ gzip -cv9 "$i" >> $tmp || {
+- /bin/rm -f $tmp
++ rm -f $tmp
+ echo ${x}: compression not possible for $i, file unchanged.
+ res=1
+ continue
+@@ -152,6 +144,7 @@
+ :
+ else
+ echo ${x}: $i probably not in gzexe format, file unchanged.
++ rm -f $tmp
+ res=1
+ continue
+ fi
+@@ -176,4 +169,5 @@
+ chmod u-w $i 2>/dev/null
+ fi
+ done
++tmp=
+ exit $res
+diff -Naur gzip-1.3.5.orig/zdiff.in gzip-1.3.5/zdiff.in
+--- gzip-1.3.5.orig/zdiff.in 2002-09-26 08:33:24.000000000 +0000
++++ gzip-1.3.5/zdiff.in 2006-08-21 00:52:45.000000000 +0000
+@@ -46,13 +46,13 @@
+ case "$2" in
+ *[-.]gz* | *[-.][zZ] | *.t[ga]z)
+ F=`echo "$2" | sed 's|.*/||;s|[-.][zZtga]*||'`
+- set -C
+- trap 'rm -f /tmp/"$F".$$; exit 2' HUP INT PIPE TERM 0
+- gzip -cdfq "$2" > /tmp/"$F".$$ || exit
+- gzip -cdfq "$1" | $comp $OPTIONS - /tmp/"$F".$$
++ TF=`/bin/mktemp -t "$F".XXXXXXXXXX` || exit 1
++ trap 'trap - EXIT; rm -f "$TF"; exit 2' EXIT HUP INT
PIPE TERM
++ gzip -cdfq "$2" > "$TF" || exit
++ gzip -cdfq "$1" | $comp $OPTIONS - "$TF"
+ STAT="$?"
+- /bin/rm -f /tmp/"$F".$$ || STAT=2
+- trap - HUP INT PIPE TERM 0
++ rm -f "$TF" || STAT=2
++ trap - EXIT HUP INT PIPE TERM
+ exit $STAT;;
+
+ *) gzip -cdfq "$1" | $comp $OPTIONS - "$2";;
+diff -Naur gzip-1.3.5.orig/znew.in gzip-1.3.5/znew.in
+--- gzip-1.3.5.orig/znew.in 2002-09-27 06:17:09.000000000 +0000
++++ gzip-1.3.5/znew.in 2006-08-21 00:52:45.000000000 +0000
+@@ -14,29 +14,29 @@
+ # block is the disk block size (best guess, need not be exact)
+
+ warn="(does not preserve modes and timestamp)"
+-tmp=/tmp/zfoo.$$
+-set -C
+-echo hi > $tmp.1
+-echo hi > $tmp.2
+-if test -z "`(${CPMOD-cpmod} $tmp.1 $tmp.2) 2>&1`"; then
+- cpmod=${CPMOD-cpmod}
++cpmod=
++cpmodarg=
++if type ${CPMOD:-cpmod} 2>/dev/null; then
++ cpmod=${CPMOD:-cpmod}
+ warn=""
+ fi
+
+-if test -z "$cpmod" && ${TOUCH-touch} -r $tmp.1 $tmp.2 2>/dev/null; then
+- cpmod="${TOUCH-touch}"
++if test -z "$cpmod"; then
++ cpmod=touch
+ cpmodarg="-r"
+ warn="(does not preserve file modes)"
+ fi
+
+-# check if GZIP env. variable uses -S or --suffix
+-gzip -q $tmp.1
+-ext=`echo $tmp.1* | sed "s|$tmp.1||"`
+-rm -f $tmp.[12]*
+-if test -z "$ext"; then
+- echo znew: error determining gzip extension
+- exit 1
+-fi
++case "$GZIP" in
++ *-S*) ext=`echo "$GZIP" | sed 's/^.*-S[[:space:]]*\([^[:space:]]*\).*$/\1/'`
++ ;;
++ *--suffix=*) ext=`echo "$GZIP" | sed
's/^.*--suffix=\([^[:space:]]*\).*$/\1/'`
++ ;;
++ *--suffix*) ext=`echo "$GZIP" | sed
's/^.*--suffix[[:space:]][[:space:]]*\([^[:space:]]*\).*$/\1/'`
++ ;;
++ *) ext='.gz'
++ ;;
++esac
+ if test "$ext" = ".Z"; then
+ echo znew: cannot use .Z as gzip extension.
+ exit 1
--
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page