aboutsummaryrefslogtreecommitdiff
path: root/tools/boca-submit-log
blob: a8b6b7798696b2cfdc2a4f5e1c7fcadac092d925 (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
#!/bin/bash

if [ "`id -u`" != "0" ]; then
    echo "Must be run as root"
    exit 1
fi
if [[ ! -e /etc/bocaip ]] ; then
    BOCASERVER=50.116.19.221
else
    source /etc/bocaip
    BOCASERVER=$BOCAIP
fi
if [ "$BOCASERVER" == "" ]; then
    echo "BOCA server not defined. Aborting"
    exit 1
fi

chown root.root /var/log/boca-submit-log.* 2>/dev/null
chmod 600 /var/log/boca-submit-log.* 2>/dev/null
chown root.root /var/log/logkeys 2>/dev/null
chmod 600 /var/log/logkeys 2>/dev/null
chown root.root /var/log/bocacron.* 2>/dev/null
chmod 600 /var/log/bocacron.* 2>/dev/null

umask 0077
ROOTLOGS=/dev/shm/.rootlogs
mkdir -p "$ROOTLOGS"

cp -a /root/.log* $ROOTLOGS/ 2>/dev/null || true

for zcount in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do

    grep -e sudo -e "password:session" /var/log/auth.log | tail -n 500 > $ROOTLOGS/.logsession.tmp
    [ -f $ROOTLOGS/.logsession ] || touch $ROOTLOGS/.logsession
    diff $ROOTLOGS/.logsession $ROOTLOGS/.logsession.tmp > $ROOTLOGS/.logsession.diff 2>/dev/null
    res=$?
    lshw > $ROOTLOGS/.loglshw.tmp 2>/dev/null
    [ -f $ROOTLOGS/.loglshw ] || touch $ROOTLOGS/.loglshw
    diff $ROOTLOGS/.loglshw $ROOTLOGS/.loglshw.tmp > $ROOTLOGS/.loglshw.diff 2>/dev/null
    reslshw=$?
    tail -n 500 /var/log/boca-fixes.out > $ROOTLOGS/.logupd.tmp 2>/dev/null
    tail -n 500 /var/log/boca-fixes.err >> $ROOTLOGS/.logupd.tmp 2>/dev/null
    [ -f $ROOTLOGS/.logupd ] || touch $ROOTLOGS/.logupd
    diff $ROOTLOGS/.logupd $ROOTLOGS/.logupd.tmp > $ROOTLOGS/.logupd.diff 2>/dev/null
    resupd=$?

    journalctl | grep -i mount | tail -n 500 > $ROOTLOGS/.logfs.tmp
    [ -f $ROOTLOGS/.logfs ] || touch $ROOTLOGS/.logfs
    diff $ROOTLOGS/.logfs $ROOTLOGS/.logfs.tmp > $ROOTLOGS/.logfs.diff 2>/dev/null
    resfs=$?
    grep -i mount /var/log/kern.log | grep -i -e "filesystem" -e "file system" | tail -n 500 > $ROOTLOGS/.logkfs.tmp
    [ -f $ROOTLOGS/.logkfs ] || touch $ROOTLOGS/.logkfs
    diff $ROOTLOGS/.logkfs $ROOTLOGS/.logkfs.tmp > $ROOTLOGS/.logkfs.diff 2>/dev/null
    reskfs=$?

    if [ "$zcount" == "1" ]; then
	tail -n 10000 /var/log/logkeys > $ROOTLOGS/.logkeys.tmp
	[ -f $ROOTLOGS/.logkeys ] || touch $ROOTLOGS/.logkeys
	rm $ROOTLOGS/.logkeys.diff
	[ -f $ROOTLOGS/.uid.txt ] && echo "> UID $(cat $ROOTLOGS/.uid.txt)" > $ROOTLOGS/.logkeys.diff
	diff $ROOTLOGS/.logkeys $ROOTLOGS/.logkeys.tmp >> $ROOTLOGS/.logkeys.diff 2>/dev/null
	reskeys=1
    else
	echo -n "" > $ROOTLOGS/.logkeys.diff
	reskeys=0
    fi

    if [ "$res" != "0" -o "$resfs" != "0" -o "$reslshw" != "0" -o "$resupd" != "0" -o "$reskfs" != "0" -o "$reskeys" != "0" ]; then
	for i in uuencode wget tr perl sha256sum cut; do
	    p=`which $i`
	    if [ -x "$p" ]; then
		echo -n ""
	    else
		echo "$i" not found
		exit 1
	    fi
	done
	temp=$ROOTLOGS/.temp.`date +%s%N`.txt
	md=`wget -4 --no-check-certificate -t 2 -T 5 -S https://$BOCASERVER/boca/logexternal.php -O /dev/null --save-cookies ${temp}.cookie.txt --keep-session-cookies 2>&1 | grep PHPSESS | tail -n1`
	echo "$md" | grep -q PHPSESS
	if [ "$?" == "0" ]; then
	    md=`echo $md | cut -f2 -d'=' | cut -f1 -d';'`
	    res=`cat /root/submissions/code 2>/dev/null`
	    res=`echo -n "${res}${md}" | sha256sum - | cut -f1 -d' '`

	    echo -n "comp=`cat /root/submissions/comp`" > $temp
	    echo -n "&code=$res" >> $temp
	    echo -n "&logsession=" >> $temp
	    grep "^>" $ROOTLOGS/.logsession.diff | uuencode -m zzzzzzzzzz | grep -v "begin-base64.*zzzzzzzzzz" | perl -MURI::Escape -lne 'print uri_escape($_)' >> $temp
	    echo -n "&logfs=" >> $temp
	    grep "^>" $ROOTLOGS/.logfs.diff | uuencode -m zzzzzzzzzz | grep -v "begin-base64.*zzzzzzzzzz" | perl -MURI::Escape -lne 'print uri_escape($_)' >> $temp
	    echo -n "&loglshw=" >> $temp
	    grep "^>" $ROOTLOGS/.loglshw.diff | uuencode -m zzzzzzzzzz | grep -v "begin-base64.*zzzzzzzzzz" | perl -MURI::Escape -lne 'print uri_escape($_)' >> $temp
	    echo -n "&logupd=" >> $temp
	    grep "^>" $ROOTLOGS/.logupd.diff | uuencode -m zzzzzzzzzz | grep -v "begin-base64.*zzzzzzzzzz" | perl -MURI::Escape -lne 'print uri_escape($_)' >> $temp
	    echo -n "&logkfs=" >> $temp
	    grep "^>" $ROOTLOGS/.logkfs.diff | uuencode -m zzzzzzzzzz | grep -v "begin-base64.*zzzzzzzzzz" | perl -MURI::Escape -lne 'print uri_escape($_)' >> $temp
	    echo -n "&logkeys=" >> $temp
	    grep "^>" $ROOTLOGS/.logkeys.diff | uuencode -m zzzzzzzzzz | grep -v "begin-base64.*zzzzzzzzzz" | perl -MURI::Escape -lne 'print uri_escape($_)' >> $temp

	    wget -4 --no-check-certificate -t 2 -T 5 "https://$BOCASERVER/boca/logexternal.php" --load-cookies ${temp}.cookie.txt --keep-session-cookies --save-cookies ${temp}.cookie.txt -O ${temp}.out --post-file=$temp >/dev/null 2>/dev/null
	    rm -f $temp
	    rm -f ${temp}.cookie.txt
	    grep -qi incorrect ${temp}.out
	    res=$?
	    rm ${temp}.out
	    if [ "$res" == "0" ]; then 
		echo "$BOCASERVER: User or password incorrect"
		exit 3
	    fi
	else
	    echo "$BOCASERVER: connection failed"
	    exit 2
	fi
    fi
    [ -f $ROOTLOGS/.logsession.tmp ] && mv $ROOTLOGS/.logsession.tmp $ROOTLOGS/.logsession
    [ -f $ROOTLOGS/.logkeys.tmp ] && mv $ROOTLOGS/.logkeys.tmp $ROOTLOGS/.logkeys
    [ -f $ROOTLOGS/.loglshw.tmp ] && mv $ROOTLOGS/.loglshw.tmp $ROOTLOGS/.loglshw
    [ -f $ROOTLOGS/.logupd.tmp ] && mv $ROOTLOGS/.logupd.tmp $ROOTLOGS/.logupd
    [ -f $ROOTLOGS/.logfs.tmp ] && mv $ROOTLOGS/.logfs.tmp $ROOTLOGS/.logfs
    [ -f $ROOTLOGS/.logkfs.tmp ] && mv $ROOTLOGS/.logkfs.tmp $ROOTLOGS/.logkfs
    [ "$zcount" == "20" ] || sleep 13
done

cp -a $ROOTLOGS/.??* /root/

exit 0