summaryrefslogtreecommitdiff
path: root/mksvir-update
blob: ed7d2c8f4ceafb03c8a566d90e5e72fe6162056a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/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"
wget -q -nd "$MKS_URL" -O "$FNAME.link"
wget -S --spider -i "$FNAME.link" 2>&1 | grep Last-Modified | cut -d' ' -f3- >"$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 -i "$FNAME.link"
if [ $? != 0 ]; then
	echo "problem with wget. quitting."
	rm -f "$FNAME"
	rm -f "$FNAME.link"
	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