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
|