aboutsummaryrefslogtreecommitdiff
path: root/doc/AUTOJUDGING.txt
blob: 8406a4f2df15ae2186875170a3e1131cc01d2141 (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
(Last updated 18/oct/2011 by cassio@ime.usp.br. See copyright notice below.)

AUTOJUDGING.txt
---------------

To help the process of judging, the BOCA system provides
a php script that is able to execute some user defined
script in order to compile, execute and compare the output
generated by teams with the correct output. This procedure
is not essential to the system, since each judge is capable
to download from BOCA all the files needed to evaluate a
submission.

The propose here is not to have a automated scheme for
submission evaluation, but a supporting system that can
help judges to do their job. In this way, the autojudging
provides to the judge the data generated by the scripts
when trying to compile, to execute and to compare the results.
This data is presented in a formatted way during the judging 
process inside the BOCA web interface, and can help the
judge to evaluate the submission. If the autojudging is
not enabled in the contest, the judges will see just some
"unavailable" texts when judging a submission, and they
will have to execute the whole process by theirselves.

To start the autojudging procedure, the only thing needed
is to run the autojudging.php script from some commandline
shell. Note that it may be necessary to change the permissions
of private/conf.php file to something more readable and the php.ini
file to turn safe_mode off (on the computer running the
autojudging scheme). Furthermore, verify whether the private/conf.php
options are correctly pointing to the postgresql server/users
and if the current working directory (ie, ".") is included 
in the PATH environment variable.

$ sudo /bin/bash
# /var/www/boca/tools/boca-autojudge.sh ## or /usr/sbin/boca-autojudge

The autojudging.php will stay running until CRTL+C is
pressed or it's killed by some other way. Autojudging waits 
for a new submission, takes it and executes the
compiling/running/comparing scripts defined in BOCA for the
corresponding language/problem (this information is all included
in the problem package for each problem). More details about them
are in the ADMIN.txt file and in the examples of the folder
doc/problemexamples/

As long as the autojudging php script will execute
code from teams, these codes may contain malicious
procedures. Thus it is essential that a dedicated
computer be allocated only for the autojudging
scheme. Furthermore, users with shell on this computer
could eventually see important data which they should not
be allowed. This computer must have the same requirements
as the one running the BOCA web interface (but it
does not need postgresql neither a running web server), 
and it needs to be configured properly. All the steps
described in INSTALL.txt applies to this new computer,
but three important things should be noted:

(ATTENTION: IF YOU ARE USING THE ICPC LINUX VIRTUAL
MACHINE, THEN ALL THE FOLLOWING SHOULD ALREADY
BE DONE FOR YOU...)

1) the computer must have a firewall that
only permits connections between it and the main BOCA 
server (this is an important security issue). This is automatically
done if you are using the ICPC linux virtual machine, which is in fact
the best way to run the autojudging system.

2) the src/private/conf.php file must be configure properly
with the correct location of the boca database
(probably it will be needed tcp/ip connection to
the postgresql at the main BOCA server), the
correct user/password for database access, the
local IP number and the current contest number.

3) the postgresql running at the main BOCA server
will have to be configured to accept connections
from the IP of the autojudging server. This can
be achieved inserting the line

host  all  all  IPAUTOJUDGING  255.255.255.255  md5

in the pg_hba.conf file at the main BOCA server, where IPAUTOJUDGING
is to be replaced by the actual IP of the computer running the
autojudging script. Note that if run within a virtual machine, one
must take the IP of the host computer, not of the virtual machine for
this configuration. If the postgresql server is already configured to
accept incoming connections from all IPs, then this is not necessary.

Talking a little bit more about the compiling/running
script, it will be responsible for running the executable
code generated from the team's source. This is exactly
where the danger lives. To decrease the risk and to have
control over the time spent by the team's code, the C
source code safeexec.c (tools directory) should be used. 
It was designed to execute other programs with lower 
privilegies and with a time limit set. It is enough to 
run "gcc -O2 -o safeexec safeexec.c" for compiling and it is 
necessary to make a setuid root: "chown root.root safeexec" 
and "chmod 4555 safeexec" for running. This safeexec must be 
placed in a folder included in the path, usually copying it to
/usr/bin will suffice: "cp -a safeexec /usr/bin" (note the -a)


Contacts and Copyrights
-----------------------
BOCA Copyright (c) 2003- Cassio Polpo de Campos (cassio@ime.usp.br)
http://www.ime.usp.br/~cassio/boca

////////////////////////////////////////////////////////////////////////////////
//BOCA Online Contest Administrator
//    Copyright (C) 2003-2012 by BOCA Development Team (bocasystem@gmail.com)
//
//    This program is free software: you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//    You should have received a copy of the GNU General Public License
//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////////////