rbx.cp 0.5.72__py3-none-any.whl → 0.6.0__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.
- rbx/annotations.py +21 -1
- rbx/box/cli.py +24 -8
- rbx/box/code.py +140 -3
- rbx/box/contest/build_contest_statements.py +44 -34
- rbx/box/contest/contest_utils.py +25 -0
- rbx/box/contest/main.py +24 -0
- rbx/box/contest/schema.py +52 -8
- rbx/box/contest/statements.py +53 -25
- rbx/box/download.py +19 -1
- rbx/box/fields.py +35 -0
- rbx/box/lang.py +27 -0
- rbx/box/package.py +1 -1
- rbx/box/packaging/boca/packager.py +48 -5
- rbx/box/packaging/contest_main.py +13 -0
- rbx/box/packaging/main.py +13 -2
- rbx/box/packaging/packager.py +4 -4
- rbx/box/packaging/pkg/packager.py +142 -0
- rbx/box/packaging/polygon/packager.py +2 -24
- rbx/box/packaging/polygon/upload.py +35 -17
- rbx/box/remote.py +2 -2
- rbx/box/schema.py +68 -18
- rbx/box/solutions.py +6 -1
- rbx/box/statements/build_statements.py +44 -27
- rbx/box/statements/builders.py +18 -10
- rbx/box/statements/expander.py +49 -0
- rbx/box/statements/latex_jinja.py +61 -4
- rbx/box/statements/schema.py +33 -9
- rbx/box/testcase_utils.py +19 -47
- rbx/box/tooling/__init__.py +0 -0
- rbx/box/tooling/boca/__init__.py +0 -0
- rbx/box/tooling/boca/main.py +13 -0
- rbx/box/tooling/boca/scrape.py +34 -0
- rbx/box/{packaging/boca/upload.py → tooling/boca/scraper.py} +77 -8
- rbx/box/tooling/main.py +8 -0
- rbx/box/ui/screens/run_explorer.py +1 -1
- rbx/box/ui/widgets/interaction_box.py +19 -1
- rbx/grading/caching.py +18 -2
- rbx/grading/judge/sandbox.py +48 -5
- rbx/grading/judge/sandboxes/isolate.py +1 -0
- rbx/grading/judge/sandboxes/stupid_sandbox.py +11 -5
- rbx/grading/judge/sandboxes/timeit.py +36 -15
- rbx/grading/processing_context.py +62 -78
- rbx/grading/steps.py +91 -40
- rbx/resources/packagers/boca/checker.sh +4 -1
- rbx/resources/packagers/boca/compile/c +2 -6
- rbx/resources/packagers/boca/compile/cc +2 -6
- rbx/resources/packagers/boca/compile/cpp +2 -6
- rbx/resources/packagers/boca/compile/java +1 -6
- rbx/resources/packagers/boca/compile/kt +24 -28
- rbx/resources/packagers/boca/compile/py2 +2 -6
- rbx/resources/packagers/boca/compile/py3 +2 -6
- rbx/resources/packagers/boca/interactive/c +15 -62
- rbx/resources/packagers/boca/interactive/cc +15 -62
- rbx/resources/packagers/boca/interactive/cpp +15 -61
- rbx/resources/packagers/boca/interactive/java +15 -67
- rbx/resources/packagers/boca/interactive/kt +15 -67
- rbx/resources/packagers/boca/interactive/py2 +15 -67
- rbx/resources/packagers/boca/interactive/py3 +15 -65
- rbx/resources/packagers/boca/interactor_compile.sh +5 -2
- rbx/resources/packagers/boca/interactor_run.sh +174 -0
- rbx/resources/packagers/boca/safeexec.c +530 -0
- rbx/resources/packagers/boca/safeexec_compile.sh +49 -0
- rbx/resources/presets/default/contest/contest.rbx.yml +9 -8
- rbx/resources/presets/default/problem/problem.rbx.yml +27 -26
- rbx/resources/templates/rbx.h +2 -3
- {rbx_cp-0.5.72.dist-info → rbx_cp-0.6.0.dist-info}/METADATA +2 -1
- {rbx_cp-0.5.72.dist-info → rbx_cp-0.6.0.dist-info}/RECORD +70 -59
- rbx/resources/packagers/boca/compile/pas +0 -172
- {rbx_cp-0.5.72.dist-info → rbx_cp-0.6.0.dist-info}/LICENSE +0 -0
- {rbx_cp-0.5.72.dist-info → rbx_cp-0.6.0.dist-info}/WHEEL +0 -0
- {rbx_cp-0.5.72.dist-info → rbx_cp-0.6.0.dist-info}/entry_points.txt +0 -0
@@ -41,22 +41,22 @@
|
|
41
41
|
|
42
42
|
umask 0022
|
43
43
|
if [ "$1" == "" ]; then
|
44
|
-
|
45
|
-
|
44
|
+
echo "parameter problem"
|
45
|
+
exit 43
|
46
46
|
fi
|
47
47
|
name="$1"
|
48
48
|
if [ ! -r "$1" ]; then
|
49
|
-
|
50
|
-
|
49
|
+
echo "$1 not found or it's not readable"
|
50
|
+
exit 44
|
51
51
|
fi
|
52
52
|
id -u bocajail >/dev/null 2>/dev/null
|
53
53
|
if [ $? == 0 ]; then
|
54
|
-
bocau
|
55
|
-
bocag
|
54
|
+
bocau=$(id -u bocajail)
|
55
|
+
bocag=$(id -g bocajail)
|
56
56
|
chown bocajail.nogroup .
|
57
57
|
else
|
58
|
-
bocau
|
59
|
-
bocag
|
58
|
+
bocau=$(id -u nobody)
|
59
|
+
bocag=$(id -g nobody)
|
60
60
|
chown nobody.nogroup .
|
61
61
|
fi
|
62
62
|
if [ "$bocau" == "" -o "$bocag" == "" ]; then
|
@@ -67,10 +67,10 @@ fi
|
|
67
67
|
mkdir -p src
|
68
68
|
if [ "${name##*.}" == "zip" -a "${name##*.}" == "ZIP" ]; then
|
69
69
|
unzip "$name" -d src
|
70
|
-
|
71
|
-
name
|
70
|
+
if [ "${name##*.}" == "zip" ]; then
|
71
|
+
name=$(basename $name .zip)
|
72
72
|
else
|
73
|
-
name
|
73
|
+
name=$(basename $name .ZIP)
|
74
74
|
fi
|
75
75
|
else
|
76
76
|
cp "$name" src
|
@@ -80,42 +80,38 @@ chmod -R 700 src
|
|
80
80
|
|
81
81
|
# this script makes use of safeexec to execute the code with less privilegies
|
82
82
|
# make sure that directories below are correct.
|
83
|
-
sf
|
83
|
+
sf=$(which safeexec)
|
84
84
|
[ -x "$sf" ] || sf=/usr/bin/safeexec
|
85
85
|
if [ ! -x $sf ]; then
|
86
|
-
|
87
|
-
|
86
|
+
echo "$sf not found or it's not executable"
|
87
|
+
exit 46
|
88
88
|
fi
|
89
89
|
|
90
90
|
# setting up the timelimit according to the problem
|
91
|
-
|
92
|
-
|
93
|
-
else
|
94
|
-
time=$3
|
95
|
-
fi
|
96
|
-
let "ttime = $time + 30"
|
91
|
+
time=30
|
92
|
+
ttime=30
|
97
93
|
|
98
94
|
maxm=1024
|
99
95
|
if [ "$4" != "" -a "$4" -gt "1024" ]; then
|
100
|
-
maxm=$4
|
96
|
+
maxm=$4
|
101
97
|
fi
|
102
98
|
|
103
99
|
maxms=100
|
104
100
|
|
105
101
|
if [ "$2" == "" ]; then
|
106
|
-
|
102
|
+
jarfile=run.jar
|
107
103
|
else
|
108
|
-
|
104
|
+
jarfile=$2
|
109
105
|
fi
|
110
106
|
|
111
|
-
cdir
|
107
|
+
cdir=$(pwd)
|
112
108
|
echo "Current directory is $cdir" >&2
|
113
|
-
mainname
|
109
|
+
mainname=$(echo $name | cut -d'.' -f1)
|
114
110
|
if [ "$mainname" == "" ]; then
|
115
|
-
|
111
|
+
mainname=Main
|
116
112
|
fi
|
117
113
|
|
118
|
-
cat <<EOF >
|
114
|
+
cat <<EOF >compileit.sh
|
119
115
|
#!/bin/bash
|
120
116
|
kotlinc=/snap/kotlin/24/bin/kotlinc
|
121
117
|
[ -x "\$kotlinc" ] || kotlinc=/snap/bin/kotlinc
|
@@ -147,7 +143,7 @@ if [ "$ret" != "0" ]; then
|
|
147
143
|
echo "Compilation Error: $ret"
|
148
144
|
exit $ret
|
149
145
|
fi
|
150
|
-
ret
|
146
|
+
ret=$(cat compileit.retcode)
|
151
147
|
if [ "$ret" != "0" ]; then
|
152
148
|
echo "Compilation Error: $ret"
|
153
149
|
ret=1
|
@@ -92,12 +92,8 @@ if [ "$4" != "" ]; then
|
|
92
92
|
fi
|
93
93
|
|
94
94
|
# setting up the timelimit according to the problem
|
95
|
-
|
96
|
-
|
97
|
-
else
|
98
|
-
time=$3
|
99
|
-
fi
|
100
|
-
let "ttime = $time + 30"
|
95
|
+
time=15
|
96
|
+
let "ttime = $time * 2"
|
101
97
|
|
102
98
|
if [ "$2" == "" ]; then
|
103
99
|
exe=run.exe
|
@@ -92,12 +92,8 @@ if [ "$4" != "" ]; then
|
|
92
92
|
fi
|
93
93
|
|
94
94
|
# setting up the timelimit according to the problem
|
95
|
-
|
96
|
-
|
97
|
-
else
|
98
|
-
time=$3
|
99
|
-
fi
|
100
|
-
let "ttime = $time + 30"
|
95
|
+
time=15
|
96
|
+
let "ttime = $time * 2"
|
101
97
|
|
102
98
|
if [ "$2" == "" ]; then
|
103
99
|
exe=run.exe
|
@@ -61,6 +61,10 @@ fi
|
|
61
61
|
# make sure that directories below are correct.
|
62
62
|
sf=$(which safeexec)
|
63
63
|
[ -x "$sf" ] || sf=/usr/bin/safeexec
|
64
|
+
if [ -x "../safeexec.exe" ]; then
|
65
|
+
cp "../safeexec.exe" "safeexec.exe"
|
66
|
+
sf="./safeexec.exe"
|
67
|
+
fi
|
64
68
|
|
65
69
|
if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
|
66
70
|
echo "parameter problem"
|
@@ -80,8 +84,9 @@ if [ ! -x "$sf" ]; then
|
|
80
84
|
fi
|
81
85
|
|
82
86
|
time=$3
|
83
|
-
|
84
|
-
|
87
|
+
rtime=$(awk "BEGIN {print int($time+0.9999999)}")
|
88
|
+
if [ "$rtime" -gt "0" ]; then
|
89
|
+
let "ttime = $rtime * 4"
|
85
90
|
else
|
86
91
|
time=1
|
87
92
|
ttime=4
|
@@ -89,8 +94,8 @@ fi
|
|
89
94
|
|
90
95
|
nruns=1
|
91
96
|
if [ "$4" != "" ]; then
|
92
|
-
if [ "$4" -gt "
|
93
|
-
nruns
|
97
|
+
if [ "$4" -gt "1" ]; then
|
98
|
+
echo "WARNING: nruns is set to $4, but it will be ignored because it's not supported by interactive problems"
|
94
99
|
fi
|
95
100
|
fi
|
96
101
|
maxm=512000
|
@@ -120,58 +125,9 @@ cdir=$(pwd)
|
|
120
125
|
echo "Current directory is $cdir -- chrooting on it" >&2
|
121
126
|
|
122
127
|
### START OF BOCA RUN COMMAND
|
123
|
-
cat
|
124
|
-
|
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 \$INTPID
|
136
|
-
ECINT=\$?
|
137
|
-
|
138
|
-
ECSF=0
|
139
|
-
if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]]; then
|
140
|
-
# kill the solution
|
141
|
-
kill -9 \$SFPID
|
142
|
-
else
|
143
|
-
wait \$SFPID
|
144
|
-
ECSF=\$?
|
145
|
-
fi
|
146
|
-
|
147
|
-
rm -rf fifo.in fifo.out
|
148
|
-
|
149
|
-
echo "Ran solution as \$@" &>>stderr0
|
150
|
-
echo "interactor exitcode \$ECINT" &>>stderr0
|
151
|
-
echo "solution exitcode \$ECSF" &>>stderr0
|
152
|
-
|
153
|
-
RTE=0
|
154
|
-
if [[ \$ECSF -eq -13 ]]; then
|
155
|
-
RTE=0
|
156
|
-
elif [[ \$ECSF -ne 0 ]] && cat stderr0 | grep -q "wrong output format Unexpected end of file"; then
|
157
|
-
echo "Found EOF RTE" &>>stderr0
|
158
|
-
RTE=1
|
159
|
-
fi
|
160
|
-
|
161
|
-
ret=0
|
162
|
-
if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]] && [[ \$RTE -eq 0 ]]; then
|
163
|
-
echo "testlib exitcode \$ECINT" >stdout0
|
164
|
-
ret=0
|
165
|
-
elif [[ \$ECSF -ne 0 ]]; then
|
166
|
-
ret=\$ECSF
|
167
|
-
elif [[ \$ECINT -ne 0 ]]; then
|
168
|
-
ret=9
|
169
|
-
fi
|
170
|
-
|
171
|
-
echo "exitting from runit.sh with exit code \$ret" &>>stderr0
|
172
|
-
exit \$ret
|
128
|
+
cat >runit.sh <<"EOF"
|
129
|
+
{{runit_content}}
|
173
130
|
EOF
|
174
|
-
|
175
131
|
chmod 755 runit.sh
|
176
132
|
|
177
133
|
ret=0
|
@@ -183,13 +139,14 @@ if [ $? -eq 0 ]; then
|
|
183
139
|
cd "$cdir"
|
184
140
|
[ -f /proc/cpuinfo ] || /bin/mount -t proc proc /proc
|
185
141
|
[ -d /sys/kernel ] || /bin/mount -t sysfs sysfs /sys
|
186
|
-
"$sf" -F10 -f$maxf -r$nruns -n0 -C. -U$bocau -G$bocag -d$maxm -m$maxm -t$time -T$ttime
|
142
|
+
./runit.sh "$cdir" "$sf" "$ttime" -F10 -f$maxf -r$nruns -n0 -C. -U$bocau -G$bocag -d$maxm -m$maxm -t$time -T$ttime -- ./run.exe
|
187
143
|
retval=\$?
|
188
144
|
echo \$retval > runch.exitcode
|
189
145
|
if [ ! -d /bocajail ]; then
|
190
146
|
/bin/umount /proc 2>/dev/null
|
191
147
|
/bin/umount /sys 2>/dev/null
|
192
148
|
fi
|
149
|
+
rm -rf fifo.in fifo.out
|
193
150
|
EOF
|
194
151
|
chmod 755 runch.sh
|
195
152
|
chroot /bocajail $cdir/runch.sh
|
@@ -201,12 +158,8 @@ EOF
|
|
201
158
|
exit 49
|
202
159
|
fi
|
203
160
|
else
|
204
|
-
echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
205
|
-
|
206
|
-
echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
207
|
-
|
208
|
-
"$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
|
209
|
-
ret=$?
|
161
|
+
echo "ERROR: CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
162
|
+
exit 48
|
210
163
|
fi
|
211
164
|
### END OF BOCA RUN COMMAND
|
212
165
|
|
@@ -61,6 +61,10 @@ fi
|
|
61
61
|
# make sure that directories below are correct.
|
62
62
|
sf=$(which safeexec)
|
63
63
|
[ -x "$sf" ] || sf=/usr/bin/safeexec
|
64
|
+
if [ -x "../safeexec.exe" ]; then
|
65
|
+
cp "../safeexec.exe" "safeexec.exe"
|
66
|
+
sf="./safeexec.exe"
|
67
|
+
fi
|
64
68
|
|
65
69
|
if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
|
66
70
|
echo "parameter problem"
|
@@ -80,8 +84,9 @@ if [ ! -x "$sf" ]; then
|
|
80
84
|
fi
|
81
85
|
|
82
86
|
time=$3
|
83
|
-
|
84
|
-
|
87
|
+
rtime=$(awk "BEGIN {print int($time+0.9999999)}")
|
88
|
+
if [ "$rtime" -gt "0" ]; then
|
89
|
+
let "ttime = $rtime * 4"
|
85
90
|
else
|
86
91
|
time=1
|
87
92
|
ttime=4
|
@@ -89,8 +94,8 @@ fi
|
|
89
94
|
|
90
95
|
nruns=1
|
91
96
|
if [ "$4" != "" ]; then
|
92
|
-
if [ "$4" -gt "
|
93
|
-
nruns
|
97
|
+
if [ "$4" -gt "1" ]; then
|
98
|
+
echo "WARNING: nruns is set to $4, but it will be ignored because it's not supported by interactive problems"
|
94
99
|
fi
|
95
100
|
fi
|
96
101
|
maxm=512000
|
@@ -120,58 +125,9 @@ cdir=$(pwd)
|
|
120
125
|
echo "Current directory is $cdir -- chrooting on it" >&2
|
121
126
|
|
122
127
|
### START OF BOCA RUN COMMAND
|
123
|
-
cat
|
124
|
-
|
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 \$INTPID
|
136
|
-
ECINT=\$?
|
137
|
-
|
138
|
-
ECSF=0
|
139
|
-
if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]]; then
|
140
|
-
# kill the solution
|
141
|
-
kill -9 \$SFPID
|
142
|
-
else
|
143
|
-
wait \$SFPID
|
144
|
-
ECSF=\$?
|
145
|
-
fi
|
146
|
-
|
147
|
-
rm -rf fifo.in fifo.out
|
148
|
-
|
149
|
-
echo "Ran solution as \$@" &>>stderr0
|
150
|
-
echo "interactor exitcode \$ECINT" &>>stderr0
|
151
|
-
echo "solution exitcode \$ECSF" &>>stderr0
|
152
|
-
|
153
|
-
RTE=0
|
154
|
-
if [[ \$ECSF -eq -13 ]]; then
|
155
|
-
RTE=0
|
156
|
-
elif [[ \$ECSF -ne 0 ]] && cat stderr0 | grep -q "wrong output format Unexpected end of file"; then
|
157
|
-
echo "Found EOF RTE" &>>stderr0
|
158
|
-
RTE=1
|
159
|
-
fi
|
160
|
-
|
161
|
-
ret=0
|
162
|
-
if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]] && [[ \$RTE -eq 0 ]]; then
|
163
|
-
echo "testlib exitcode \$ECINT" >stdout0
|
164
|
-
ret=0
|
165
|
-
elif [[ \$ECSF -ne 0 ]]; then
|
166
|
-
ret=\$ECSF
|
167
|
-
elif [[ \$ECINT -ne 0 ]]; then
|
168
|
-
ret=9
|
169
|
-
fi
|
170
|
-
|
171
|
-
echo "exitting from runit.sh with exit code \$ret" &>>stderr0
|
172
|
-
exit \$ret
|
128
|
+
cat >runit.sh <<"EOF"
|
129
|
+
{{runit_content}}
|
173
130
|
EOF
|
174
|
-
|
175
131
|
chmod 755 runit.sh
|
176
132
|
|
177
133
|
ret=0
|
@@ -183,13 +139,14 @@ if [ $? -eq 0 ]; then
|
|
183
139
|
cd "$cdir"
|
184
140
|
[ -f /proc/cpuinfo ] || /bin/mount -t proc proc /proc
|
185
141
|
[ -d /sys/kernel ] || /bin/mount -t sysfs sysfs /sys
|
186
|
-
"$sf" -F10 -f$maxf -r$nruns -n0 -C. -U$bocau -G$bocag -d$maxm -m$maxm -t$time -T$ttime
|
142
|
+
./runit.sh "$cdir" "$sf" "$ttime" -F10 -f$maxf -r$nruns -n0 -C. -U$bocau -G$bocag -d$maxm -m$maxm -t$time -T$ttime -- ./run.exe
|
187
143
|
retval=\$?
|
188
144
|
echo \$retval > runch.exitcode
|
189
145
|
if [ ! -d /bocajail ]; then
|
190
146
|
/bin/umount /proc 2>/dev/null
|
191
147
|
/bin/umount /sys 2>/dev/null
|
192
148
|
fi
|
149
|
+
rm -rf fifo.in fifo.out
|
193
150
|
EOF
|
194
151
|
chmod 755 runch.sh
|
195
152
|
chroot /bocajail $cdir/runch.sh
|
@@ -201,12 +158,8 @@ EOF
|
|
201
158
|
exit 49
|
202
159
|
fi
|
203
160
|
else
|
204
|
-
echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
205
|
-
|
206
|
-
echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
207
|
-
|
208
|
-
"$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
|
209
|
-
ret=$?
|
161
|
+
echo "ERROR: CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
162
|
+
exit 48
|
210
163
|
fi
|
211
164
|
### END OF BOCA RUN COMMAND
|
212
165
|
|
@@ -61,6 +61,10 @@ fi
|
|
61
61
|
# make sure that directories below are correct.
|
62
62
|
sf=$(which safeexec)
|
63
63
|
[ -x "$sf" ] || sf=/usr/bin/safeexec
|
64
|
+
if [ -x "../safeexec.exe" ]; then
|
65
|
+
cp "../safeexec.exe" "safeexec.exe"
|
66
|
+
sf="./safeexec.exe"
|
67
|
+
fi
|
64
68
|
|
65
69
|
if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
|
66
70
|
echo "parameter problem"
|
@@ -80,8 +84,9 @@ if [ ! -x "$sf" ]; then
|
|
80
84
|
fi
|
81
85
|
|
82
86
|
time=$3
|
83
|
-
|
84
|
-
|
87
|
+
rtime=$(awk "BEGIN {print int($time+0.9999999)}")
|
88
|
+
if [ "$rtime" -gt "0" ]; then
|
89
|
+
let "ttime = $rtime * 4"
|
85
90
|
else
|
86
91
|
time=1
|
87
92
|
ttime=4
|
@@ -89,8 +94,8 @@ fi
|
|
89
94
|
|
90
95
|
nruns=1
|
91
96
|
if [ "$4" != "" ]; then
|
92
|
-
if [ "$4" -gt "
|
93
|
-
nruns
|
97
|
+
if [ "$4" -gt "1" ]; then
|
98
|
+
echo "WARNING: nruns is set to $4, but it will be ignored because it's not supported by interactive problems"
|
94
99
|
fi
|
95
100
|
fi
|
96
101
|
maxm=512000
|
@@ -120,57 +125,9 @@ cdir=$(pwd)
|
|
120
125
|
echo "Current directory is $cdir -- chrooting on it" >&2
|
121
126
|
|
122
127
|
### START OF BOCA RUN COMMAND
|
123
|
-
cat
|
124
|
-
|
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 \$INTPID
|
136
|
-
ECINT=\$?
|
137
|
-
|
138
|
-
ECSF=0
|
139
|
-
if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]]; then
|
140
|
-
# kill the solution
|
141
|
-
kill -9 \$SFPID
|
142
|
-
else
|
143
|
-
wait \$SFPID
|
144
|
-
ECSF=\$?
|
145
|
-
fi
|
146
|
-
|
147
|
-
rm -rf fifo.in fifo.out
|
148
|
-
|
149
|
-
echo "Ran solution as \$@" &>>stderr0
|
150
|
-
echo "interactor exitcode \$ECINT" &>>stderr0
|
151
|
-
echo "solution exitcode \$ECSF" &>>stderr0
|
152
|
-
|
153
|
-
RTE=0
|
154
|
-
if [[ \$ECSF -eq -13 ]]; then
|
155
|
-
RTE=0
|
156
|
-
elif [[ \$ECSF -ne 0 ]] && cat stderr0 | grep -q "wrong output format Unexpected end of file"; then
|
157
|
-
echo "Found EOF RTE" &>>stderr0
|
158
|
-
RTE=1
|
159
|
-
fi
|
160
|
-
ret=0
|
161
|
-
if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]] && [[ \$RTE -eq 0 ]]; then
|
162
|
-
echo "testlib exitcode \$ECINT" >stdout0
|
163
|
-
ret=0
|
164
|
-
elif [[ \$ECSF -ne 0 ]]; then
|
165
|
-
ret=\$ECSF
|
166
|
-
elif [[ \$ECINT -ne 0 ]]; then
|
167
|
-
ret=9
|
168
|
-
fi
|
169
|
-
|
170
|
-
echo "exitting from runit.sh with exit code \$ret" &>>stderr0
|
171
|
-
exit \$ret
|
128
|
+
cat >runit.sh <<"EOF"
|
129
|
+
{{runit_content}}
|
172
130
|
EOF
|
173
|
-
|
174
131
|
chmod 755 runit.sh
|
175
132
|
|
176
133
|
ret=0
|
@@ -182,13 +139,14 @@ if [ $? -eq 0 ]; then
|
|
182
139
|
cd "$cdir"
|
183
140
|
[ -f /proc/cpuinfo ] || /bin/mount -t proc proc /proc
|
184
141
|
[ -d /sys/kernel ] || /bin/mount -t sysfs sysfs /sys
|
185
|
-
"$sf" -F10 -f$maxf -r$nruns -n0 -C. -U$bocau -G$bocag -d$maxm -m$maxm -t$time -T$ttime
|
142
|
+
./runit.sh "$cdir" "$sf" "$ttime" -F10 -f$maxf -r$nruns -n0 -C. -U$bocau -G$bocag -d$maxm -m$maxm -t$time -T$ttime -- ./run.exe
|
186
143
|
retval=\$?
|
187
144
|
echo \$retval > runch.exitcode
|
188
145
|
if [ ! -d /bocajail ]; then
|
189
146
|
/bin/umount /proc 2>/dev/null
|
190
147
|
/bin/umount /sys 2>/dev/null
|
191
148
|
fi
|
149
|
+
rm -rf fifo.in fifo.out
|
192
150
|
EOF
|
193
151
|
chmod 755 runch.sh
|
194
152
|
chroot /bocajail $cdir/runch.sh
|
@@ -200,12 +158,8 @@ EOF
|
|
200
158
|
exit 49
|
201
159
|
fi
|
202
160
|
else
|
203
|
-
echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
204
|
-
|
205
|
-
echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
206
|
-
|
207
|
-
"$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
|
208
|
-
ret=$?
|
161
|
+
echo "ERROR: CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
162
|
+
exit 48
|
209
163
|
fi
|
210
164
|
### END OF BOCA RUN COMMAND
|
211
165
|
|
@@ -61,6 +61,10 @@ fi
|
|
61
61
|
# make sure that directories below are correct.
|
62
62
|
sf=$(which safeexec)
|
63
63
|
[ -x "$sf" ] || sf=/usr/bin/safeexec
|
64
|
+
if [ -x "../safeexec.exe" ]; then
|
65
|
+
cp "../safeexec.exe" "safeexec.exe"
|
66
|
+
sf="./safeexec.exe"
|
67
|
+
fi
|
64
68
|
|
65
69
|
if [ "$1" == "" -o "$2" == "" -o "$3" == "" ]; then
|
66
70
|
echo "parameter problem"
|
@@ -98,8 +102,9 @@ if [ ! -x "$sf" ]; then
|
|
98
102
|
fi
|
99
103
|
|
100
104
|
time=$3
|
101
|
-
|
102
|
-
|
105
|
+
rtime=$(awk "BEGIN {print int($time+0.9999999)}")
|
106
|
+
if [ "$rtime" -gt "0" ]; then
|
107
|
+
let "ttime = $rtime * 4"
|
103
108
|
else
|
104
109
|
time=1
|
105
110
|
ttime=4
|
@@ -107,8 +112,8 @@ fi
|
|
107
112
|
|
108
113
|
nruns=1
|
109
114
|
if [ "$4" != "" ]; then
|
110
|
-
if [ "$4" -gt "
|
111
|
-
nruns
|
115
|
+
if [ "$4" -gt "1" ]; then
|
116
|
+
echo "WARNING: nruns is set to $4, but it will be ignored because it's not supported by interactive problems"
|
112
117
|
fi
|
113
118
|
fi
|
114
119
|
maxm=512000
|
@@ -133,58 +138,9 @@ cdir=$(pwd)
|
|
133
138
|
echo "Current directory is $cdir -- chrooting on it" >&2
|
134
139
|
|
135
140
|
### START OF BOCA RUN COMMAND
|
136
|
-
cat
|
137
|
-
|
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 \$INTPID
|
149
|
-
ECINT=\$?
|
150
|
-
|
151
|
-
ECSF=0
|
152
|
-
if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]]; then
|
153
|
-
# kill the solution
|
154
|
-
kill -9 \$SFPID
|
155
|
-
else
|
156
|
-
wait \$SFPID
|
157
|
-
ECSF=\$?
|
158
|
-
fi
|
159
|
-
|
160
|
-
rm -rf fifo.in fifo.out
|
161
|
-
|
162
|
-
echo "Ran solution as \$@" &>>stderr0
|
163
|
-
echo "interactor exitcode \$ECINT" &>>stderr0
|
164
|
-
echo "solution exitcode \$ECSF" &>>stderr0
|
165
|
-
|
166
|
-
RTE=0
|
167
|
-
if [[ \$ECSF -eq -13 ]]; then
|
168
|
-
RTE=0
|
169
|
-
elif [[ \$ECSF -ne 0 ]] && cat stderr0 | grep -q "wrong output format Unexpected end of file"; then
|
170
|
-
echo "Found EOF RTE" &>>stderr0
|
171
|
-
RTE=1
|
172
|
-
fi
|
173
|
-
|
174
|
-
ret=0
|
175
|
-
if [[ \$ECINT -ge 1 ]] && [[ \$ECINT -le 4 ]] && [[ \$RTE -eq 0 ]]; then
|
176
|
-
echo "testlib exitcode \$ECINT" >stdout0
|
177
|
-
ret=0
|
178
|
-
elif [[ \$ECSF -ne 0 ]]; then
|
179
|
-
ret=\$ECSF
|
180
|
-
elif [[ \$ECINT -ne 0 ]]; then
|
181
|
-
ret=9
|
182
|
-
fi
|
183
|
-
|
184
|
-
echo "exitting from runit.sh with exit code \$ret" &>>stderr0
|
185
|
-
exit \$ret
|
141
|
+
cat >runit.sh <<"EOF"
|
142
|
+
{{runit_content}}
|
186
143
|
EOF
|
187
|
-
|
188
144
|
chmod 755 runit.sh
|
189
145
|
|
190
146
|
ret=0
|
@@ -202,13 +158,14 @@ if [ $? -eq 0 ]; then
|
|
202
158
|
echo "\$java not found or it's not executable"
|
203
159
|
exit 47
|
204
160
|
fi
|
205
|
-
"$sf" -r$nruns -t$time -T$ttime -
|
161
|
+
./runit.sh "$cdir" "$sf" "$ttime" -r$nruns -t$time -T$ttime -F256 -u256 -U$bocau -G$bocag -n0 -C. -f20000 -d20000000 -m20000000 -- "\$java" -jar run.jar -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K
|
206
162
|
retval=\$?
|
207
163
|
echo \$retval > runch.exitcode
|
208
164
|
if [ ! -d /bocajail ]; then
|
209
165
|
/bin/umount /proc 2>/dev/null
|
210
166
|
/bin/umount /sys 2>/dev/null
|
211
167
|
fi
|
168
|
+
rm -rf fifo.in fifo.out
|
212
169
|
EOF
|
213
170
|
chmod 755 runch.sh
|
214
171
|
chroot /bocajail $cdir/runch.sh
|
@@ -220,17 +177,8 @@ EOF
|
|
220
177
|
exit 49
|
221
178
|
fi
|
222
179
|
else
|
223
|
-
echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
224
|
-
|
225
|
-
echo "CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
226
|
-
java=$(which java)
|
227
|
-
[ -x "$java" ] || java=/usr/bin/java
|
228
|
-
if [ ! -x "$java" ]; then
|
229
|
-
echo "$java not found or it's not executable"
|
230
|
-
exit 47
|
231
|
-
fi
|
232
|
-
"$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -U$bocau -G$bocag -ostdout0 -estderr0 -n0 -C. -d20000000 -m20000000 -- ./runit.sh "$java" -jar run.jar -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K
|
233
|
-
ret=$?
|
180
|
+
echo "ERROR: CODE NOT BEING CHROOTED. DO NOT RUN THIS ON THE MAIN SERVER" >&2
|
181
|
+
exit 48
|
234
182
|
fi
|
235
183
|
### END OF BOCA RUN COMMAND
|
236
184
|
|