#!/bin/sh
#
# Automatic database upgrade for MkS_Vir for Linux
# version 0.12
# (c) Bartlomiej Korupczynski '2002
# bartek@net-serwis.pl
# http://www.nzs.pw.edu.pl/~bkorupcz/
#
# GPL license
#

# config

SUBDIR=bazy4
MKS_URL="http://download.mks.com.pl/download/linux/$SUBDIR.tgz"
MKS_PATH="/var/lib/mks"
HUP=mksd
LOGPRIO=daemon.info
LOGTAG="mksvir-update"
REMOVE=0

# TMPDIR will be DELETED!
TMPDIR="$MKS_PATH/tmp"
FLOCK="$MKS_PATH/update.lock"
LAST="$MKS_PATH/update.last"
TIMESTAMP="$MKS_PATH/current"

# startup
PATH=/bin:/usr/bin
export TMPDIR


[ "$1" == "debug" ] && DEBUG=1 && echo "Debugging enabled"

if [ -z "$MKS_URL" -o -z "$MKS_PATH" -o -z "$TMPDIR" -o -z "$FLOCK" -o -z "$LAST" -o -z "$TIMESTAMP" ]; then
	echo "empty variables. quitting."
	exit 10
fi

if [ -f "$FLOCK" ]; then
	echo "Lockfile $FLOCK present. quitting."
	exit 11
fi
touch "$FLOCK" || exit 15

[ -n "$DEBUG" ] && echo "Setting traps"
trap "rm -f \"$FLOCK\"" INT
trap "rm -f \"$FLOCK\"" TERM
trap "rm -f \"$FLOCK\"" QUIT
trap "rm -f \"$FLOCK\"" HUP

# pre

[ -n "$DEBUG" ] && echo "Setting variables"
cd "$MKS_PATH"
FNAME="${MKS_URL##*/}"
[ -f "$LAST" -a -w "$LAST" ] || touch "$LAST" || exit 15
rm -rf "$TMPDIR"
mkdir -m 0700 -p "$TMPDIR"

# remote file timestamp check

[ -n "$DEBUG" ] && echo "Retrieving timestamp"
lynx -reload -dump -head "$MKS_URL" | grep Last-Modified >"$TIMESTAMP"
ret=$?
if [ $ret != 0 ]; then
	rm -f "$FLOCK"
	echo "problem with timestamp check. quitting."
	exit 12
fi

[ -n "$DEBUG" ] && echo "Comparing timestamp"
cmp -s "$LAST" "$TIMESTAMP"
if [ $? == 0 ]; then		# no update, no fun
	[ -n "$DEBUG" ] && echo "No update needed"
	rm -f "$FLOCK"
	rm -rf "$TMPDIR"
	rm -f "$TIMESTAMP"
	exit 0
fi

[ -n "$DEBUG" ] && echo "Downloading new database"
[ -f "$FNAME" ] && mv "$FNAME" "$FNAME.last"
wget -q -nd "$MKS_URL"
if [ $? != 0 ]; then
	echo "problem with wget. quitting."
	rm -f "$FNAME"
	rm -f "$FLOCK"
	exit 13
fi

if [ ! -f "$FNAME" ]; then
	echo "PANIC! downloaded file not there! quitting."
	rm -f "$FLOCK"
	exit 20
fi

# protect from malicious proxy (webcache) and bugged tar

[ -n "$DEBUG" ] && echo "Validating archive listing"
tar ztf "$FNAME" | grep -v -q "^${SUBDIR}/\(mks[0-9a-zA-Z]*\.dat\)\{0,1\}$"
if [ $? == 0 ]; then
	echo -e "PANIC! $MKS_URL contains invalid paths! quitting.\n"
	tar ztf "$FNAME"
	rm -f "$FLOCK"
	exit 21
fi

[ -n "$DEBUG" ] && echo "Unpacking database"
tar zxf "$FNAME" -C "$TMPDIR"
ret=$?
if [ $ret != 0 ]; then
	echo "problem with untarring: $ret. quitting."
	rm -f "$FLOCK"
	exit 14
fi

[ -n "$DEBUG" ] && echo "Installing database"
chmod 0644 $TMPDIR/$SUBDIR/*.dat
mv $TMPDIR/$SUBDIR/*.dat $MKS_PATH

logger -p "$LOGPRIO" -t "$LOGTAG" "MkS_Vir for Linux database successfully updated."
[ -n "$HUP" ] && killall -HUP "$HUP"

echo "mks_vir database successfully updated."
cat "$TIMESTAMP"

mv "$TIMESTAMP" "$LAST"
rm -rf "$TMPDIR"
[ "$REMOVE" != 0 ] && rm -f "$FNAME"

rm -f "$FLOCK"
exit 0

