rbx.cp 0.5.46__py3-none-any.whl → 0.5.47__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. rbx/box/checkers.py +81 -28
  2. rbx/box/cli.py +12 -10
  3. rbx/box/packaging/boca/packager.py +44 -7
  4. rbx/box/packaging/main.py +7 -0
  5. rbx/box/packaging/moj/packager.py +88 -8
  6. rbx/box/packaging/packager.py +7 -2
  7. rbx/box/packaging/polygon/packager.py +5 -4
  8. rbx/box/solutions.py +2 -2
  9. rbx/box/stresses.py +0 -1
  10. rbx/box/tasks.py +6 -4
  11. rbx/grading/judge/sandbox.py +29 -1
  12. rbx/grading/judge/sandboxes/isolate.py +10 -0
  13. rbx/grading/judge/sandboxes/stupid_sandbox.py +16 -4
  14. rbx/grading/judge/sandboxes/timeit.py +12 -3
  15. rbx/grading/processing_context.py +48 -0
  16. rbx/grading/steps.py +24 -13
  17. rbx/resources/packagers/boca/checker.sh +8 -6
  18. rbx/resources/packagers/boca/compare.sh +48 -0
  19. rbx/resources/packagers/boca/interactive/c +207 -0
  20. rbx/resources/packagers/boca/interactive/cc +207 -0
  21. rbx/resources/packagers/boca/interactive/cpp +207 -0
  22. rbx/resources/packagers/boca/interactive/java +240 -0
  23. rbx/resources/packagers/boca/interactive/kt +231 -0
  24. rbx/resources/packagers/boca/interactive/py2 +209 -0
  25. rbx/resources/packagers/boca/interactive/py3 +209 -0
  26. rbx/resources/packagers/boca/interactor_compile.sh +45 -0
  27. rbx/resources/packagers/boca/run/bkp +163 -0
  28. rbx/resources/packagers/boca/run/c +19 -19
  29. rbx/resources/packagers/boca/run/cc +19 -19
  30. rbx/resources/packagers/boca/run/cpp +19 -19
  31. rbx/resources/packagers/boca/run/java +51 -51
  32. rbx/resources/packagers/boca/run/kt +30 -30
  33. rbx/resources/packagers/boca/run/py2 +42 -42
  34. rbx/resources/packagers/boca/run/py3 +42 -42
  35. rbx/resources/packagers/moj/scripts/c/compile.sh +19 -0
  36. rbx/resources/packagers/moj/scripts/c/prep.sh +5 -0
  37. rbx/resources/packagers/moj/scripts/c/run.sh +16 -0
  38. rbx/resources/packagers/moj/scripts/compare.sh +32 -6
  39. rbx/resources/packagers/moj/scripts/cpp/compile.sh +19 -0
  40. rbx/resources/packagers/moj/scripts/cpp/prep.sh +5 -0
  41. rbx/resources/packagers/moj/scripts/cpp/run.sh +16 -0
  42. rbx/resources/packagers/moj/scripts/interactor_prep.sh +14 -0
  43. rbx/resources/packagers/moj/scripts/interactor_run.sh +38 -0
  44. rbx/resources/packagers/moj/scripts/java/compile.sh +12 -0
  45. rbx/resources/packagers/moj/scripts/java/prep.sh +8 -0
  46. rbx/resources/packagers/moj/scripts/java/run.sh +17 -0
  47. rbx/resources/packagers/moj/scripts/py2/compile.sh +7 -0
  48. rbx/resources/packagers/moj/scripts/py2/prep.sh +5 -0
  49. rbx/resources/packagers/moj/scripts/py2/run.sh +16 -0
  50. rbx/resources/packagers/moj/scripts/py3/compile.sh +7 -0
  51. rbx/resources/packagers/moj/scripts/py3/prep.sh +5 -0
  52. rbx/resources/packagers/moj/scripts/py3/run.sh +16 -0
  53. {rbx_cp-0.5.46.dist-info → rbx_cp-0.5.47.dist-info}/METADATA +1 -1
  54. {rbx_cp-0.5.46.dist-info → rbx_cp-0.5.47.dist-info}/RECORD +57 -30
  55. rbx/resources/packagers/boca/compare +0 -53
  56. {rbx_cp-0.5.46.dist-info → rbx_cp-0.5.47.dist-info}/LICENSE +0 -0
  57. {rbx_cp-0.5.46.dist-info → rbx_cp-0.5.47.dist-info}/WHEEL +0 -0
  58. {rbx_cp-0.5.46.dist-info → rbx_cp-0.5.47.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,207 @@
1
+ #!/bin/bash
2
+ # ////////////////////////////////////////////////////////////////////////////////
3
+ # //BOCA Online Contest Administrator
4
+ # // Copyright (C) 2003-2014 by BOCA System (bocasystem@gmail.com)
5
+ # //
6
+ # // This program is free software: you can redistribute it and/or modify
7
+ # // it under the terms of the GNU General Public License as published by
8
+ # // the Free Software Foundation, either version 3 of the License, or
9
+ # // (at your option) any later version.
10
+ # //
11
+ # // This program is distributed in the hope that it will be useful,
12
+ # // but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # // GNU General Public License for more details.
15
+ # // You should have received a copy of the GNU General Public License
16
+ # // along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ # ////////////////////////////////////////////////////////////////////////////////
18
+ #Last modified: 21/aug/2014 by cassio@ime.usp.br
19
+ #
20
+ # parameters are:
21
+ # $1 exe_file
22
+ # $2 input_file
23
+ # $3 timelimit (limit to run all the repetitions, by default only one repetition)
24
+ # $4 number_of_repetitions_to_run (optional, can be used for better tuning the timelimit)
25
+ # $5 maximum allowed memory (in MBytes)
26
+ # $6 maximum allowed output size (in KBytes)
27
+ #
28
+ # the output of the submission should be directed to the standard output
29
+ #
30
+ # the return code show what happened (according to safeexec):
31
+ # 0 ok
32
+ # 1 compile error
33
+ # 2 runtime error
34
+ # 3 timelimit exceeded
35
+ # 4 internal error
36
+ # 5 parameter error
37
+ # 6 internal error
38
+ # 7 memory limit exceeded
39
+ # 8 security threat
40
+ # 9 runtime error
41
+ # other_codes are unknown to boca: in this case BOCA will present the
42
+ # last line of standard output to the judge
43
+
44
+ umask 0022
45
+ id -u bocajail >/dev/null 2>/dev/null
46
+ if [ $? == 0 ]; then
47
+ bocau=$(id -u bocajail)
48
+ bocag=$(id -g bocajail)
49
+ chown bocajail.nogroup .
50
+ else
51
+ bocau=$(id -u nobody)
52
+ bocag=$(id -g nobody)
53
+ chown nobody.nogroup .
54
+ fi
55
+ if [ "$bocau" == "" -o "$bocag" == "" ]; then
56
+ echo "error finding user to run script"
57
+ exit 43
58
+ fi
59
+
60
+ # this script makes use of safeexec to execute the code with less privilegies
61
+ # make sure that directories below are correct.
62
+ sf=$(which safeexec)
63
+ [ -x "$sf" ] || sf=/usr/bin/safeexec
64
+
65
+ if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
66
+ echo "parameter problem"
67
+ exit 43
68
+ fi
69
+ if [ ! -x "$1" ]; then
70
+ echo "$1 not found (or is not in the current dir) or it's not executable"
71
+ exit 44
72
+ fi
73
+ if [ ! -r "$2" ]; then
74
+ echo "$2 not found (or is not in the current dir) or it's not readable"
75
+ exit 45
76
+ fi
77
+ if [ ! -x "$sf" ]; then
78
+ echo "$sf not found or it's not executable"
79
+ exit 46
80
+ fi
81
+
82
+ time=$3
83
+ if [ "$time" -gt "0" ]; then
84
+ let "ttime = $time + 30"
85
+ else
86
+ time=1
87
+ ttime=30
88
+ fi
89
+
90
+ nruns=1
91
+ if [ "$4" != "" ]; then
92
+ if [ "$4" -gt "0" ]; then
93
+ nruns=$4
94
+ fi
95
+ fi
96
+ maxm=512000
97
+ if [ "$5" != "" ]; then
98
+ if [ "$5" -gt "0" ]; then
99
+ maxm=${5}000
100
+ fi
101
+ fi
102
+ maxf=1024
103
+ if [ "$6" != "" ]; then
104
+ if [ "$6" -gt "0" ]; then
105
+ maxf=${6}
106
+ fi
107
+ fi
108
+
109
+ cp "$2" stdin0 2>/dev/null
110
+ cp "$1" run.exe 2>/dev/null
111
+ cp ../interactor.exe interactor.exe 2>/dev/null
112
+
113
+ file run.exe | grep -iq "statically linked"
114
+ if [ "$?" != "0" ]; then
115
+ echo "Aborting because $1 is not statically linked"
116
+ exit 47
117
+ fi
118
+
119
+ cdir=$(pwd)
120
+ echo "Current directory is $cdir -- chrooting on it" >&2
121
+
122
+ ### START OF BOCA RUN COMMAND
123
+ cat <<EOF >runit.sh
124
+ #!/bin/bash
125
+ mkfifo fifo.in fifo.out
126
+
127
+ echo "Running solution as \$@" >&2
128
+
129
+ "\$@" >fifo.out <fifo.in 2>/dev/null &
130
+ SFPID=\$!
131
+
132
+ ./interactor.exe "stdin0" "stdout0" <fifo.out >fifo.in 2>stderr0 &
133
+ INTPID=\$!
134
+
135
+ wait \$SFPID
136
+ ECSF=\$?
137
+
138
+ wait \$INTPID
139
+ ECINT=\$?
140
+
141
+ rm -rf fifo.in fifo.out
142
+
143
+ echo "interactor \$INTPID -> \$ECINT" >&2
144
+ echo "solution \$SFPID -> \$ECSF" >&2
145
+
146
+ echo "interactor exitcode \$ECINT" >&2
147
+ echo "solution exitcode \$ECSF" >&2
148
+
149
+ ret=0
150
+ if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]]; then
151
+ echo "testlib exitcode \$ECINT" >stdout0
152
+ ret=0
153
+ elif [[ \$ECSF -ne 0 ]]; then
154
+ ret=\$ECSF
155
+ elif [[ \$ECINT -ne 0 ]]; then
156
+ ret=9
157
+ fi
158
+
159
+ exit \$ret
160
+ EOF
161
+
162
+ chmod 755 runit.sh
163
+
164
+ ret=0
165
+ echo $cdir | grep -q "/bocajail"
166
+ if [ $? -eq 0 ]; then
167
+ cdir=$(echo $cdir | sed "s/.*\/bocajail//")
168
+ cat <<EOF >runch.sh
169
+ #!/bin/bash
170
+ cd "$cdir"
171
+ [ -f /proc/cpuinfo ] || /bin/mount -t proc proc /proc
172
+ [ -d /sys/kernel ] || /bin/mount -t sysfs sysfs /sys
173
+ "$sf" -F10 -f$maxf -r$nruns -n0 -C. -U$bocau -G$bocag -d$maxm -m$maxm -t$time -T$ttime -ostdout0 -estderr0 -- ./runit.sh ./run.exe
174
+ retval=\$?
175
+ echo \$retval > runch.exitcode
176
+ if [ ! -d /bocajail ]; then
177
+ /bin/umount /proc 2>/dev/null
178
+ /bin/umount /sys 2>/dev/null
179
+ fi
180
+ EOF
181
+ chmod 755 runch.sh
182
+ chroot /bocajail $cdir/runch.sh
183
+ if [ -r runch.exitcode ]; then
184
+ ret=$(cat runch.exitcode)
185
+ fi
186
+ if [ "$ret" == "" ]; then
187
+ echo "Execution error - check autojudging"
188
+ exit 49
189
+ fi
190
+ else
191
+ echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
192
+ echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
193
+ echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
194
+
195
+ "$sf" -F10 -f$maxf -r$nruns -n0 -C. -U$bocau -G$bocag -d$maxm -m$maxm -t$time -T$ttime -ostdout0 -estderr0 -- ./runit.sh ./run.exe
196
+ ret=$?
197
+ fi
198
+ ### END OF BOCA RUN COMMAND
199
+
200
+ if [ $ret -gt 10 ]; then
201
+ echo "execution error with code $ret" >&2
202
+ ret=0
203
+ fi
204
+ if [ -f stdout0 ]; then
205
+ cat stdout0
206
+ fi
207
+ exit $ret
@@ -0,0 +1,207 @@
1
+ #!/bin/bash
2
+ # ////////////////////////////////////////////////////////////////////////////////
3
+ # //BOCA Online Contest Administrator
4
+ # // Copyright (C) 2003-2014 by BOCA System (bocasystem@gmail.com)
5
+ # //
6
+ # // This program is free software: you can redistribute it and/or modify
7
+ # // it under the terms of the GNU General Public License as published by
8
+ # // the Free Software Foundation, either version 3 of the License, or
9
+ # // (at your option) any later version.
10
+ # //
11
+ # // This program is distributed in the hope that it will be useful,
12
+ # // but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # // GNU General Public License for more details.
15
+ # // You should have received a copy of the GNU General Public License
16
+ # // along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ # ////////////////////////////////////////////////////////////////////////////////
18
+ #Last modified: 21/aug/2014 by cassio@ime.usp.br
19
+ #
20
+ # parameters are:
21
+ # $1 exe_file
22
+ # $2 input_file
23
+ # $3 timelimit (limit to run all the repetitions, by default only one repetition)
24
+ # $4 number_of_repetitions_to_run (optional, can be used for better tuning the timelimit)
25
+ # $5 maximum allowed memory (in MBytes)
26
+ # $6 maximum allowed output size (in KBytes)
27
+ #
28
+ # the output of the submission should be directed to the standard output
29
+ #
30
+ # the return code show what happened (according to safeexec):
31
+ # 0 ok
32
+ # 1 compile error
33
+ # 2 runtime error
34
+ # 3 timelimit exceeded
35
+ # 4 internal error
36
+ # 5 parameter error
37
+ # 6 internal error
38
+ # 7 memory limit exceeded
39
+ # 8 security threat
40
+ # 9 runtime error
41
+ # other_codes are unknown to boca: in this case BOCA will present the
42
+ # last line of standard output to the judge
43
+
44
+ umask 0022
45
+ id -u bocajail >/dev/null 2>/dev/null
46
+ if [ $? == 0 ]; then
47
+ bocau=$(id -u bocajail)
48
+ bocag=$(id -g bocajail)
49
+ chown bocajail.nogroup .
50
+ else
51
+ bocau=$(id -u nobody)
52
+ bocag=$(id -g nobody)
53
+ chown nobody.nogroup .
54
+ fi
55
+ if [ "$bocau" == "" -o "$bocag" == "" ]; then
56
+ echo "error finding user to run script"
57
+ exit 43
58
+ fi
59
+
60
+ # this script makes use of safeexec to execute the code with less privilegies
61
+ # make sure that directories below are correct.
62
+ sf=$(which safeexec)
63
+ [ -x "$sf" ] || sf=/usr/bin/safeexec
64
+
65
+ if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
66
+ echo "parameter problem"
67
+ exit 43
68
+ fi
69
+ if [ ! -x "$1" ]; then
70
+ echo "$1 not found (or is not in the current dir) or it's not executable"
71
+ exit 44
72
+ fi
73
+ if [ ! -r "$2" ]; then
74
+ echo "$2 not found (or is not in the current dir) or it's not readable"
75
+ exit 45
76
+ fi
77
+ if [ ! -x "$sf" ]; then
78
+ echo "$sf not found or it's not executable"
79
+ exit 46
80
+ fi
81
+
82
+ time=$3
83
+ if [ "$time" -gt "0" ]; then
84
+ let "ttime = $time + 30"
85
+ else
86
+ time=1
87
+ ttime=30
88
+ fi
89
+
90
+ nruns=1
91
+ if [ "$4" != "" ]; then
92
+ if [ "$4" -gt "0" ]; then
93
+ nruns=$4
94
+ fi
95
+ fi
96
+ maxm=512000
97
+ if [ "$5" != "" ]; then
98
+ if [ "$5" -gt "0" ]; then
99
+ maxm=${5}000
100
+ fi
101
+ fi
102
+ maxf=1024
103
+ if [ "$6" != "" ]; then
104
+ if [ "$6" -gt "0" ]; then
105
+ maxf=${6}
106
+ fi
107
+ fi
108
+
109
+ cp "$2" stdin0 2>/dev/null
110
+ cp "$1" run.exe 2>/dev/null
111
+ cp ../interactor.exe interactor.exe 2>/dev/null
112
+
113
+ file run.exe | grep -iq "statically linked"
114
+ if [ "$?" != "0" ]; then
115
+ echo "Aborting because $1 is not statically linked"
116
+ exit 47
117
+ fi
118
+
119
+ cdir=$(pwd)
120
+ echo "Current directory is $cdir -- chrooting on it" >&2
121
+
122
+ ### START OF BOCA RUN COMMAND
123
+ cat <<EOF >runit.sh
124
+ #!/bin/bash
125
+ mkfifo fifo.in fifo.out
126
+
127
+ echo "Running solution as \$@" >&2
128
+
129
+ "\$@" >fifo.out <fifo.in 2>/dev/null &
130
+ SFPID=\$!
131
+
132
+ ./interactor.exe "stdin0" "stdout0" <fifo.out >fifo.in 2>stderr0 &
133
+ INTPID=\$!
134
+
135
+ wait \$SFPID
136
+ ECSF=\$?
137
+
138
+ wait \$INTPID
139
+ ECINT=\$?
140
+
141
+ rm -rf fifo.in fifo.out
142
+
143
+ echo "interactor \$INTPID -> \$ECINT" >&2
144
+ echo "solution \$SFPID -> \$ECSF" >&2
145
+
146
+ echo "interactor exitcode \$ECINT" >&2
147
+ echo "solution exitcode \$ECSF" >&2
148
+
149
+ ret=0
150
+ if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]]; then
151
+ echo "testlib exitcode \$ECINT" >stdout0
152
+ ret=0
153
+ elif [[ \$ECSF -ne 0 ]]; then
154
+ ret=\$ECSF
155
+ elif [[ \$ECINT -ne 0 ]]; then
156
+ ret=9
157
+ fi
158
+
159
+ exit \$ret
160
+ EOF
161
+
162
+ chmod 755 runit.sh
163
+
164
+ ret=0
165
+ echo $cdir | grep -q "/bocajail"
166
+ if [ $? -eq 0 ]; then
167
+ cdir=$(echo $cdir | sed "s/.*\/bocajail//")
168
+ cat <<EOF >runch.sh
169
+ #!/bin/bash
170
+ cd "$cdir"
171
+ [ -f /proc/cpuinfo ] || /bin/mount -t proc proc /proc
172
+ [ -d /sys/kernel ] || /bin/mount -t sysfs sysfs /sys
173
+ "$sf" -F10 -f$maxf -r$nruns -n0 -C. -U$bocau -G$bocag -d$maxm -m$maxm -t$time -T$ttime -ostdout0 -estderr0 -- ./runit.sh ./run.exe
174
+ retval=\$?
175
+ echo \$retval > runch.exitcode
176
+ if [ ! -d /bocajail ]; then
177
+ /bin/umount /proc 2>/dev/null
178
+ /bin/umount /sys 2>/dev/null
179
+ fi
180
+ EOF
181
+ chmod 755 runch.sh
182
+ chroot /bocajail $cdir/runch.sh
183
+ if [ -r runch.exitcode ]; then
184
+ ret=$(cat runch.exitcode)
185
+ fi
186
+ if [ "$ret" == "" ]; then
187
+ echo "Execution error - check autojudging"
188
+ exit 49
189
+ fi
190
+ else
191
+ echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
192
+ echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
193
+ echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
194
+
195
+ "$sf" -F10 -f$maxf -r$nruns -n0 -C. -U$bocau -G$bocag -d$maxm -m$maxm -t$time -T$ttime -ostdout0 -estderr0 -- ./runit.sh ./run.exe
196
+ ret=$?
197
+ fi
198
+ ### END OF BOCA RUN COMMAND
199
+
200
+ if [ $ret -gt 10 ]; then
201
+ echo "execution error with code $ret" >&2
202
+ ret=0
203
+ fi
204
+ if [ -f stdout0 ]; then
205
+ cat stdout0
206
+ fi
207
+ exit $ret
@@ -0,0 +1,240 @@
1
+ #!/bin/bash
2
+ # ////////////////////////////////////////////////////////////////////////////////
3
+ # //BOCA Online Contest Administrator
4
+ # // Copyright (C) 2003-2014 by BOCA System (bocasystem@gmail.com)
5
+ # //
6
+ # // This program is free software: you can redistribute it and/or modify
7
+ # // it under the terms of the GNU General Public License as published by
8
+ # // the Free Software Foundation, either version 3 of the License, or
9
+ # // (at your option) any later version.
10
+ # //
11
+ # // This program is distributed in the hope that it will be useful,
12
+ # // but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # // GNU General Public License for more details.
15
+ # // You should have received a copy of the GNU General Public License
16
+ # // along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ # ////////////////////////////////////////////////////////////////////////////////
18
+ #Last modified: 21/aug/2014 by cassio@ime.usp.br
19
+ #
20
+ # parameters are:
21
+ # $1 exe_file
22
+ # $2 input_file
23
+ # $3 timelimit (limit to run all the repetitions, by default only one repetition)
24
+ # $4 number_of_repetitions_to_run (optional, can be used for better tuning the timelimit)
25
+ # $5 maximum allowed memory (in MBytes)
26
+ # $6 maximum allowed output size (in KBytes)
27
+ #
28
+ # the output of the submission should be directed to the standard output
29
+ #
30
+ # the return code show what happened (according to safeexec):
31
+ # 0 ok
32
+ # 1 compile error
33
+ # 2 runtime error
34
+ # 3 timelimit exceeded
35
+ # 4 internal error
36
+ # 5 parameter error
37
+ # 6 internal error
38
+ # 7 memory limit exceeded
39
+ # 8 security threat
40
+ # 9 runtime error
41
+ # other_codes are unknown to boca: in this case BOCA will present the
42
+ # last line of standard output to the judge
43
+
44
+ umask 0022
45
+ id -u bocajail >/dev/null 2>/dev/null
46
+ if [ $? == 0 ]; then
47
+ bocau=$(id -u bocajail)
48
+ bocag=$(id -g bocajail)
49
+ chown bocajail.nogroup .
50
+ else
51
+ bocau=$(id -u nobody)
52
+ bocag=$(id -g nobody)
53
+ chown nobody.nogroup .
54
+ fi
55
+ if [ "$bocau" == "" -o "$bocag" == "" ]; then
56
+ echo "error finding user to run script"
57
+ exit 43
58
+ fi
59
+
60
+ # this script makes use of safeexec to execute the code with less privilegies
61
+ # make sure that directories below are correct.
62
+ sf=$(which safeexec)
63
+ [ -x "$sf" ] || sf=/usr/bin/safeexec
64
+
65
+ if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
66
+ echo "parameter problem"
67
+ exit 43
68
+ fi
69
+ if [ -r run.exe ]; then
70
+ rm -f run.jar
71
+ cp run.exe run.jar
72
+ fi
73
+ if [ -r "$1" ]; then
74
+ rm -f run.jar
75
+ cp "$1" run.jar
76
+ fi
77
+ if [ ! -r run.jar ]; then
78
+ echo "ERROR: file run.jar not found - possible error during compilation"
79
+ exit 1
80
+ fi
81
+ name=$(basename "$1")
82
+ if [ "${name##*.}" == "class" -a "${name##*.}" == "CLASS" ]; then
83
+ echo "WARNING: removing .class file extension"
84
+ fi
85
+ if [ "${name##*.}" == "class" ]; then
86
+ name=$(basename "$1" .class)
87
+ fi
88
+ if [ "${name##*.}" == "CLASS" ]; then
89
+ name=$(basename "$1" .CLASS)
90
+ fi
91
+ if [ ! -r "$2" ]; then
92
+ echo "$2 not found (or is not in the current dir) or it's not readable"
93
+ exit 45
94
+ fi
95
+ if [ ! -x "$sf" ]; then
96
+ echo "$sf not found or it's not executable"
97
+ exit 46
98
+ fi
99
+
100
+ time=$3
101
+ if [ "$time" -gt "0" ]; then
102
+ let "ttime = $time + 30"
103
+ else
104
+ time=1
105
+ ttime=30
106
+ fi
107
+
108
+ nruns=1
109
+ if [ "$4" != "" ]; then
110
+ if [ "$4" -gt "0" ]; then
111
+ nruns=$4
112
+ fi
113
+ fi
114
+ maxm=512000
115
+ if [ "$5" != "" ]; then
116
+ if [ "$5" -gt "0" ]; then
117
+ maxm=${5}000
118
+ fi
119
+ fi
120
+ let "maxms = $maxm / 10"
121
+ maxf=1024
122
+ if [ "$6" != "" ]; then
123
+ if [ "$6" -gt "0" ]; then
124
+ maxf=${6}
125
+ fi
126
+ fi
127
+
128
+ cp "$2" stdin0 2>/dev/null
129
+ cp "$1" run.exe 2>/dev/null
130
+ cp ../interactor.exe interactor.exe 2>/dev/null
131
+
132
+ cdir=$(pwd)
133
+ echo "Current directory is $cdir -- chrooting on it" >&2
134
+
135
+ ### START OF BOCA RUN COMMAND
136
+ cat <<EOF >runit.sh
137
+ #!/bin/bash
138
+ mkfifo fifo.in fifo.out
139
+
140
+ echo "Running solution as \$@" >&2
141
+
142
+ "\$@" >fifo.out <fifo.in 2>/dev/null &
143
+ SFPID=\$!
144
+
145
+ ./interactor.exe "stdin0" "stdout0" <fifo.out >fifo.in 2>stderr0 &
146
+ INTPID=\$!
147
+
148
+ wait \$SFPID
149
+ ECSF=\$?
150
+
151
+ wait \$INTPID
152
+ ECINT=\$?
153
+
154
+ rm -rf fifo.in fifo.out
155
+
156
+ echo "interactor \$INTPID -> \$ECINT" >&2
157
+ echo "solution \$SFPID -> \$ECSF" >&2
158
+
159
+ echo "interactor exitcode \$ECINT" >&2
160
+ echo "solution exitcode \$ECSF" >&2
161
+
162
+ ret=0
163
+ if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]]; then
164
+ echo "testlib exitcode \$ECINT" >stdout0
165
+ ret=0
166
+ elif [[ \$ECSF -ne 0 ]]; then
167
+ ret=\$ECSF
168
+ elif [[ \$ECINT -ne 0 ]]; then
169
+ ret=9
170
+ fi
171
+
172
+ exit \$ret
173
+ EOF
174
+
175
+ chmod 755 runit.sh
176
+
177
+ ret=0
178
+ echo $cdir | grep -q "/bocajail"
179
+ if [ $? -eq 0 ]; then
180
+ cdir=$(echo $cdir | sed "s/.*\/bocajail//")
181
+ cat <<EOF >runch.sh
182
+ #!/bin/bash
183
+ cd "$cdir"
184
+ [ -f /proc/cpuinfo ] || /bin/mount -t proc proc /proc
185
+ [ -d /sys/kernel ] || /bin/mount -t sysfs sysfs /sys
186
+ java=$(which java)
187
+ [ -x "\$java" ] || java=/usr/bin/java
188
+ if [ ! -x "\$java" ]; then
189
+ echo "\$java not found or it's not executable"
190
+ exit 47
191
+ fi
192
+ export CLASSPATH=.:./run.jar:$CLASSPATH
193
+ "$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -ostdout0 -estderr0 -U$bocau -G$bocag -n0 -C. -f20000 -d20000000 -m20000000 -- ./runit.sh "\$java" -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K "$name"
194
+ retval=\$?
195
+ echo \$retval > runch.exitcode
196
+ if [ ! -d /bocajail ]; then
197
+ /bin/umount /proc 2>/dev/null
198
+ /bin/umount /sys 2>/dev/null
199
+ fi
200
+ EOF
201
+ chmod 755 runch.sh
202
+ chroot /bocajail $cdir/runch.sh
203
+ if [ -r runch.exitcode ]; then
204
+ ret=$(cat runch.exitcode)
205
+ fi
206
+ if [ "$ret" == "" ]; then
207
+ echo "Execution error - check autojudging"
208
+ exit 49
209
+ fi
210
+ else
211
+ echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
212
+ echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
213
+ echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
214
+ java=$(which java)
215
+ [ -x "$java" ] || java=/usr/bin/java
216
+ if [ ! -x "$java" ]; then
217
+ echo "$java not found or it's not executable"
218
+ exit 47
219
+ fi
220
+ "$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -U$bocau -G$bocag -ostdout0 -estderr0 -n0 -C. -d20000000 -m20000000 -- ./runit.sh "$java" -cp run.jar -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K "$name"
221
+ ret=$?
222
+ fi
223
+ ### END OF BOCA RUN COMMAND
224
+
225
+ if [ $ret -gt 10 ]; then
226
+ echo "execution error with code $ret" >&2
227
+ if [ -r stderr0 ]; then
228
+ grep -q "not find or load main class" stderr0
229
+ if [ $? == 0 ]; then
230
+ echo "> > > Nonzero return code - possible class name mismatch - do check < < <"
231
+ else
232
+ echo "> > > Nonzero return code - possible runtime error - do check < < <"
233
+ fi
234
+ ret=9
235
+ fi
236
+ fi
237
+ if [ -f stdout0 ]; then
238
+ cat stdout0
239
+ fi
240
+ exit $ret