Fixes from OpenBSD:

Add $Id$
Removes temp file exploits in gzexe (predictable filenames)
Fixes some typos
Fixes a buffer overrun in gzip -S
Don't prepend /usr/local/bin to path in scripts
Correct location of /usr/share/misc/termcap

Obtained from:	OpenBSD
This commit is contained in:
Kris Kennaway 1999-05-28 13:23:27 +00:00
parent 4011dfccd2
commit 8a9cbccd6f
9 changed files with 46 additions and 26 deletions

View File

@ -48,7 +48,7 @@ match, thus speeding up the whole process. If compression ratio is more
important than speed, zip attempts a complete second search even if
the first match is already long enough.
The lazy match evaluation is no performed for the fastest compression
The lazy match evaluation is not performed for the fastest compression
modes (speed options -1 to -3). For these fast modes, new strings
are inserted in the hash table only when no match was found, or
when the match is not too long. This degrades the compression ratio

View File

@ -11,6 +11,8 @@
# WARNING: the first line of this file must be either : or #!/bin/sh
# The : is required for some old versions of csh.
# On Ultrix, /bin/sh is too buggy, change the first line to: #!/bin/sh5
#
# $Id$
x=`basename $0`
if test $# = 0; then
@ -20,7 +22,7 @@ if test $# = 0; then
exit 1
fi
tmp=gz$$
tmp=`/usr/bin/mktemp gzXXXXXXXXXX` || exit 1
trap "rm -f $tmp; exit 1" 1 2 3 5 10 13 15
decomp=0
@ -31,12 +33,14 @@ if test "x$1" = "x-d"; then
shift
fi
echo hi > zfoo1$$
echo hi > zfoo2$$
if test -z "`(${CPMOD-cpmod} zfoo1$$ zfoo2$$) 2>&1`"; then
zfoo1=`/usr/bin/mktemp zfoo1XXXXXXXXXX` || exit 1
zfoo2=`/usr/bin/mktemp zfoo2XXXXXXXXXX` || exit 1
echo hi > $zfoo1
echo hi > $zfoo2
if test -z "`(${CPMOD-cpmod} $zfoo1 $zfoo2) 2>&1`"; then
cpmod=${CPMOD-cpmod}
fi
rm -f zfoo[12]$$
rm -f $zfoo1 $zfoo2
tail=""
IFS="${IFS= }"; saveifs="$IFS"; IFS="${IFS}:"
@ -74,7 +78,7 @@ for i do
continue
fi
case "`basename $i`" in
sh | gzip | tail | chmod | ln | sleep | rm)
sh | gzip | tail | chmod | ln | sleep | rm | mktemp)
echo "${x}: $i would depend on itself"; continue ;;
esac
if test -z "$cpmod"; then
@ -89,21 +93,25 @@ for i do
if test $decomp -eq 0; then
sed 1q $0 > $tmp
sed "s|^if tail|if $tail|" >> $tmp <<'EOF'
skip=18
if tail +$skip $0 | gzip -cd > /tmp/gztmp$$; then
chmod 700 /tmp/gztmp$$
skip=22
gztmp=`/usr/bin/mktemp /tmp/gztmpXXXXXXXXXX` || exit 1
if tail +$skip $0 | gzip -cd > $gztmp; then
chmod 700 $gztmp
prog="`echo $0 | 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 &
progtmp=`/usr/bin/mktemp /tmp/${prog}XXXXXXXXXX` || exit 1
if /bin/ln $gztmp $progtmp 2>/dev/null; then
trap '/bin/rm -f $gztmp $progtmp; exit $res' 0
(/bin/sleep 5; /bin/rm -f $gztmp $progtmp) 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=$?
trap '/bin/rm -f $gztmp exit $res' 0
(/bin/sleep 5; /bin/rm -f $gztmp) 2>/dev/null &
$gztmp ${1+"$@"}; res=$?
fi
else
echo Cannot decompress $0; exit 1
echo Cannot decompress $0
rm -f $gztmp
exit 1
fi; exit $res
EOF
gzip -cv9 "$i" >> $tmp || {

View File

@ -45,7 +45,7 @@ static char *license_msg[] = {
*/
#ifdef RCSID
static char rcsid[] = "$Id: gzip.c,v 1.7 1997/03/15 22:43:58 guido Exp $";
static char rcsid[] = "$Id: gzip.c,v 1.4 1998/11/22 20:03:21 deraadt Exp $";
#endif
#include <ctype.h>
@ -521,7 +521,13 @@ int main (argc, argv)
if (*optarg == '.') optarg++;
#endif
z_len = strlen(optarg);
strcpy(z_suffix, optarg);
if (z_len > sizeof(z_suffix)-1) {
fprintf(stderr, "%s: -S suffix too long\n", progname);
usage();
do_exit(ERROR);
}
strncpy(z_suffix, optarg, sizeof z_suffix-1);
z_suffix[sizeof z_suffix-1] = '\0';
break;
case 't':
test = decompress = to_stdout = 1;

View File

@ -8,8 +8,9 @@
# If two files are specified, then they are uncompressed (if
# necessary) and fed to cmp or diff. The exit status from cmp
# or diff is preserved.
#
# $Id$
PATH="/usr/local/bin:$PATH"; export PATH
prog=`echo $0 | sed 's|.*/||'`
case "$prog" in
*cmp) comp=${CMP-cmp} ;;

View File

@ -4,8 +4,9 @@
#
# This can be useful for files with names truncated after a file transfer.
# 12345678901234 is renamed to 12345678901.gz
#
# $Id$
PATH="/usr/local/bin:$PATH"; export PATH
x=`basename $0`
if test $# = 0; then
echo "force a '.gz' extension on all gzip files"

View File

@ -2,8 +2,8 @@
# zgrep -- a wrapper around a grep program that decompresses files as needed
# Adapted from a version sent by Charles Levert <charles@comm.polymtl.ca>
PATH="/usr/local/bin:$PATH"; export PATH
#
# $Id$
prog=`echo $0 | sed 's|.*/||'`
case "$prog" in

View File

@ -1,6 +1,7 @@
#!/bin/sh
#
# $Id$
PATH="/usr/local/bin:$PATH"; export PATH
if test "`echo -n a`" = "-n a"; then
# looks like a SysV system:
n1=''; n2='\c'

View File

@ -1,3 +1,5 @@
.\" $Id$
.\"
.TH ZMORE 1
.SH NAME
zmore \- file perusal filter for crt viewing of compressed text
@ -27,7 +29,7 @@ another screenful is displayed. Other possibilities are enumerated later.
.PP
.I Zmore
looks in the file
.I /etc/termcap
.I /usr/share/misc/termcap
to determine terminal characteristics,
and to determine the default window size.
On a terminal capable of displaying 24 lines,

View File

@ -1,6 +1,7 @@
#!/bin/sh
#
# $Id$
PATH="/usr/local/bin:$PATH"; export PATH
check=0
pipe=0
opt=