-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtask.sh
More file actions
executable file
·71 lines (64 loc) · 1.46 KB
/
task.sh
File metadata and controls
executable file
·71 lines (64 loc) · 1.46 KB
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
#!/bin/bash
ifconfig $(ifconfig | fgrep encap:Ethernet | awk '{print $1}') down
set -ex
abort() {
echo "NG (~_~);" >> ${OUTPUT}
exit 1
}
trap "abort" ERR HUP INT KILL QUIT TERM
PWD=$(pwd)
CODE="code"
INDIR="input/${CODEID}" # @TODO chown user:root
ANSDIR="${PWD}/answer/${CODEID}"
TRACE="${ANSDIR}/tracefile"
OUTPUT="${PWD}/output/${CODEID}"
echo "### TESTS START BY ${LANG}." > $OUTPUT
cd $INDIR
case "${LANG}" in
"c")
mv $CODE main.c
gcc main.c
COMMAND="./a.out"
;;
"cpp")
mv $CODE main.cpp
g++ main.cpp
COMMAND="./a.out"
;;
"go")
mv $CODE main.go
go build main.go
COMMAND="./main"
;;
"java")
mv $CODE Main.java
javac Main.java
COMMAND="java Main"
;;
*)
COMMAND="${LANG} $CODE"
esac
for file in `ls -1 hole*`
do
echo "$ ${COMMAND} < ${file}" >> $OUTPUT
ans=$(cat "${ANSDIR}/${file}")
chmod 0000 ${ANSDIR}/${file}
#out=$(strace -f -e execve ${COMMAND} < $file 2>> ${TRACE}) # @TODO su user
out=$(${COMMAND} < $file 2>> ${TRACE})
if [ "$out" != "$ans" ]
then
echo "NG (~_~);" >> $OUTPUT
exit 1
fi
echo "OK (^_^)v" >> $OUTPUT
done
## check for execve @TODO restrict will be removed
process=$(fgrep execve $TRACE | fgrep pid | wc -l)
restrict=$(fgrep execve $TRACE | fgrep apk | wc -l)
if ([ "$LANG" != "bash" ] && [ $process -ne 0 ]) || [ $restrict -ne 0 ]
then
echo "!!! DO NOT USE EXTERNAL COMMAND !!!" >> $OUTPUT
exit 1
fi
echo "ALL TESTS PASSED!!!" >> $OUTPUT
exit 0