DOMjudge Programming Contest Judging System

Version 10.0.0DEV
---------------------------

Version 9.0.0 - 5 October 2025
---------------------------
 - API and integration:
   - Get rid of 'internal' data source mode, always requiring - but auto
     generating - external ID's for all entities to simplify event logic.
   - Added and improved several API endpoints for better integration with
     other tools.
   - Improved shadowing from CCS spec compliant external sources.
   - Added a new contest export script; added many improvements to the import
     contest script.
   - "Reset login status of all team users" now applies to API login status as
     well.
   - Add option to print from the submit client.
 - UI/UX:
   - Removed first to solve in problem/contest from balloon service.
   - Add option to delete multiple entities of the same kind in one go, e.g.
     problems, users, teams...
   - Replaced ACE editor with Monaco, improving diff viewing and
     adding a `no-diff` mode.
   - Highlight pending submissions during freeze on jury scoreboard.
   - Redesigned and modernized the scoreboard, submission, and verification
     pages for better clarity and usability.
   - Improved mobile experience with a redesigned scoreboard.
   - Added a progress bar to rejudgings and simple load numbers to the
     judgedaemon overview page.
   - Added a page with language statistics.
   - Many smaller UI enhancements and bugfixes.
 - Judging and scoring:
   - Added support for systems with cgroup v2.
   - Added (basic) support for multi-pass problems.
   - Introduced a new scoring system with a basic visualization for the
     `scoring` scoreboard type, building the foundation to support more than
     pass-fail problems.
   - Added an analyst evaluation mode to only judge "interesting" submissions.
   - Many bugfixes and improvements to judging, scoring, and rejudging.
 - Security:
   - Fixed several security issues, including not exposing submission data for
     hidden teams on the public scoreboard.
   - Improved permission handling for clarifications and submissions.
 - Installation / developer experience:
   - Add configuration to autocheck for new DOMjudge releases (default off).
   - Upgraded to debootstrap for latest Debian stable (Trixie).
   - Cgroup and judgedaemon service files need to be installed and enabled
     manually.
   - Moved vendor directory to webapp/vendor.
   - Many improvements to the build and installation process.

Version 8.3.0 - 31 May 2024
---------------------------
 - [security] Close metadata file descriptor for the child in runguard.
 - Document that minimum PHP version is now 8.1.0.
 - Upgrade Symfony to 6.2 and upgrade other library dependencies.
 - Show link to problem text on jury problem overview and contest detail pages.
 - Add label to teams to be in sync with ICPC CCS spec.
 - Add feedback/teammessage.txt for automated teamfeedback, see: #2016.
 - Clarifications can now use markdown syntax.
 - Upgrade Bootstrap to 5.2 and dependent components.
 - Bug fixed to correctly select current user during configuration of installation.
 - Properly fix removal of problem/submission data.
 - Filter away balloons of jury members in balloon runner interface.
 - Fix upgrade path for executables, see: #1826.
 - Collect compiler and runner versions before compilation, useful to compare
   judgehosts.
 - Various improvements to shadow config used at ICPC World Finals.
 - Show the historic timelimit which was used when judging the submission.
 - Fixes to the documentation and import of problems with @EXPECTED_RESULTS@
   tags.
 - Allow filtering on affilition in submission page for jury for multisite
   contests.
 - Add preview of the contest problemset to the jury page before contest
   start.
 - Add optional Adminer for easy database access.
 - Fix medal awards when skipping categories.
 - Add direct button to public page for registering when enabled.
 - Scale batch size of judge tasks dynamically.
 - Rename room to location for teams.
 - Add option to upload contest problemset document.
 - Improve on the advice for rejuding on config changes, only when relevant
   advice to start a rejudging, similar for updating the scoreboard cache.
 - For interactive problems: add explicit statement to when one of sides of
   the interactions ran closed their output.
 - Allow importing a (generic) contest warning which is displayed on the scoreboard.
 - Added option in the dj_setup_database to make dumps, useful before major
   upgrades and during the contest before problem imports.
 - Fixed some bugs to become OpenAPI spec compliant again.
 - Prevent a race condition leading to two submissions receiving the same
   colour balloon.
 - Compile executables with `-std=gnu++20` now.
 - Record the testcase directory for judging runs, this makes investigating
   easier.
 - Set default C/C++ standards in configure script, we intend to ship all
   scripts free of warnings/errors.
 - Respect basic authentication in the URL for the import-contest when .netrc
   exists.
 - Fix CORS header for API to make extending with other tools easier.
 - Fix eventfeed when SQL commits happen out of order to send all events.
 - Lazy load the team pictures for the scoreboard, to prevent spamming access
   log with HTTP404s
 - Make TLE detection more robust for interactive problems.
 - Added option for ICPC online scoreboard with no rank displays.

Version 8.2.0 - 6 March 2023
----------------------------
 - Various bugfixes & UI improvements.
 - Add support for Rust as submission language.
 - Add teamphotos to scoreboard zip.
 - Add jury option to to download ZIP with all problem samples, attachments
   and problem statement.
 - Extend team import with optional room and other API extensions, see the API
   doc for further details.
 - Drop support for shadowing a single contest from multiple sources.
 - Log account logins via API separately.
 - Add support for PHP v8.2.
 - Upgraded library dependencies.
 - Removed output of detected entry point to teams.
 - Added option to add custom apt repositories to judge chroot.
 - Added CLI script to configure the domserver with a yaml file.
 - Changed activation behaviour of contests imported via UI to be directly
   available.
 - New option added to reset login status of teams between contests.
 - Highlight submissions which were judged with compiler flags which since
   have changed. Useful when you find wrong flags during the contest.
 - Handle network errors for judgedaemon when domserver is unavailable.
 - Added super lazy mode useful for ICPC analyst instances. Here nothing is
   judged unless manually requested.
 - Split problem import messages in info/warning/danger, to make sure errors
   are not missed when importing.
 - Store user login sessions in database.
 - Contest import CLI script is now rewritten in python.
 - The example test problems are now imported via the contest package format.

Version 8.1.0 - 1 June 2022
---------------------------
 - Document that minimum PHP version is now 7.4.0.
 - Add support for PHP 8.1.
 - Upgrade Symfony to 5.4 LTS and upgrade other library dependencies.
 - Replace calls to deprecated `strftime` with `date`. Note: if you have
   configured a custom `time_format`, you need to update it to the format
   supported by `date`.
 - Dropped the presentation-error verdict, databases from before DOMjudge 5.0
   will be altered to replace the verdict with wrong-answer.
 - Changed API import to give admin users a team.
 - Balloon users can now be created via the API.
 - Shadow mode will now fix missing data by reading from the primary CCS.
 - Fixed cgroup naming for docker to prevent sharing the same container.
 - Removed python2 in the chroot, remove python3 in favor of pypy3 in chroot.
 - Added support for sentry for logging.
 - Added default external IDs on all places.
 - Fixed medals on scoreboard for filtered scoreboards.
 - Dropped old balloons CLI.
 - Reimplementation of runpipe for interactive problems.
 - Individual files can now be removed from executables.
 - Added mysql socket option, for when port/IP is not used.
 - Added support for accounts.{yaml,json} for import script.
 - Added support for judgeremaining for problems.
 - Add option to delete existing testcases/attachments/other data when
   importing a problem.
 - Dropped support for ICPC results HTML export feature.
 - Balloon runners can now always see the frozen scoreboard.
 - Custom CSS can now be used for the login page.
 - Removed option to use multiple timezones in same contest.
 - Fixed kotlin compile script for modern versions.

Version 8.0.0 - 30 January 2022
-------------------------------
 - Compilation of submissions now happens inside the chroot.
   NOTE when upgrading: you need to install compilers and other
   dependencies for the compile phase inside the DOMjudge chroot.
   Also you need to remove the '--tmpdir' switch from the mktemp
   call in the java_javac_detect compile script (when using this).
 - Python 3 now uses pypy by default and is default enabled on new
   installations.
 - Improve performance with large amounts of affiliations.
 - Judging verifier is now also available to jury users.
 - Search for @EXPECTED_RESULTS@ marker in all submitted files
   to validate test submissions.
 - Allow users to specify their full name in self-registration.
 - Add metrics API endpoint for use with Prometheus.
 - Always show banner.png, if present, on the public scoreboard.
 - Upgrade bundled libraries.
 - Add problem statistics to team/public problem pages.
 - Add support for specifying database port.
 - Update API documentation to OpenAPI 3.
 - Add support for loading custom CSS and JavaScript.
 - Speed up loading team pictures and affiliation logos.
 - Add filter on result to jury submissions page.
 - Add API actions to create single team, team affiliation, team category and user.
 - Add problem attachment support.
 - Judge a single submission on multiple judgedaemons in parallel if the
   judging queue is empty.
 - Limit the size of the program output stored by default in the database;
   with a button in the UI to retrieve the full output.
 - Add new clarification handler role.
 - Reduce cost of the hash function to handle large amounts of accounts when
   generating or storing passwords.
 - Improve API action to add submission to adhere to the CCS spec.
 - Add API action to create clarification following CCS spec.
 - Add support for showing (pending) awards on the scoreboard. Thanks @shuibinlong!
 - Remove JudgehostRestriction feature due to new Judgehost API.
 - Replace C++ submit client with (standalone) Python version.
 - Remove old way to run interactive problems.
   NOTE when upgrading: if you have an old-style interactive problem, you need
   to convert it to the new style (see 'boolfind' example) or change it to
   include the old run_wrapper.
 - Replace jscolor by coloris.
 - Created insights page in current work queue
 - Increase performance by not dynamically loading classes.
 - Added alternative inplace install mode
 - Added PHP8.0 support
 - Add option to default pause new judgedaemons
 - Added medals to scoreboard
 - Warn contestants if file has not been modified for some time
 - Make public/team pages mostly WCAG2A compliant
 - Add support to import multiple accounts per team and IP addresses for users.

Version 7.3.2 - 23 November 2020
--------------------------------
 - Be more tolerant of empty lines in restapi.secret.
 - Fix team manual build failure with recent rst2pdf versions.
 - Update URL for imports from ICPC CMS.
 - Fix team count on jury contest overview screen.
 - Truncate output for sample runs on team pages.
 - Fix compatibility with MySQL 8.x.

Version 7.3.1 - 10 November 2020
--------------------------------
 - Fix chroot install on Ubuntu 20.04.
 - Fix results.hml and results.tsv output.
 - Fix race condition in scoreboard related to a Doctrine bug.
 - Fix having fresh data for scheduling repeated rejudgings.
 - Fix clarification filter buttons when not using queues.
 - Fix database user creation for MySQL >= 8.0.
 - Fix warning about DataTables initialization on judgehosts page.
 - Documentation improvements.


Version 7.3.0 - 26 June 2020
----------------------------
 - Move specification of database configuration out of database and into
   a YAML file. Also show select boxes when appropriate.
 - Rename team.externalid to team.icpcid, since it is not an external ID in
   the sense the other ones are.
 - Add team display name support.
 - Add support for importing teams, organizations and groups using JSON.
 - Add script dj_judgehost_cleanup for maintenance on judgehosts.
 - Team manual source is now RestructeredText.
 - Log out an active user whose password is changed, and updates to the
   roles of a logged in user are effective immediately.
 - Allow to "delete" testcases even with associated judgings.
 - Fix permissions on webapp/var/* by using group setsid bit.
 - Allow public and team to view submissions, awards and clarifications
   using the API.
 - Allow users with API_READER role to fetch inactive contests
 - Drop smart renaming for Java public classes.
 - Show browser notifications also for new balloons to be handed out.
 - Add option to allow teams to download their own submission.
 - Change shadow import to read data from a configuration file and store
   a copy of the feed.
 - Pin scoreboard header to top when scrolling page.
 - Add console command to reset the password of any user.
 - Many code cleanups, improvements and tests.
 - Upgrade Symfony to 4.4 LTS and upgrade other library dependencies.

Version 7.2.1 - 6 May 2020
--------------------------
 - Various documentation fixes and improvements.
 - Fix filtering balloons by affiliation (Thanks Michael Baer).
 - Fix audit log entries for newly created entities.
 - Small fix to make API delete events adhere to the specification.
 - Fix some edge-case bugs in the scoreboard calculation.
 - Fix arguments to UploadedFile().
 - Fix SQL group by leading to errors on newer DB versions (Thanks
   Michael Baer).
 - Fix submit help to work when baseurl is invalid.
 - Various small fixes to the build/install system.
 - Fix user IP address field to accept IPv6 addresses.
 - Fix and document static scoreboard contest selection feature.
 - Fix a sed error message on internal compile error.
 - Fix link to documentation from the admin index page.
 - Fix problem text links from scoreboard header.
 - Fix that country select fields are hidden when show_flags is off.
 - Fix editing testcase descriptions.
 - Fix encoding of multiline testcase descriptions in submit graphs.
 - Fix hardcoded domjudge username in SystemD service file.
 - Fix compatibilty with PHP 7.4.
 - Document that minimum PHP version is now 7.2.5.

Version 7.2.0 - 4 January 2020
------------------------------
 - Rewrote documentation into a completely new DOMjudge Manual.
 - Reduce page load times and memory requirements, especially for contests
   with many problems.
 - Add DB indices to improve event log updates.
 - Fix doctrine query that lead to a polluted query cache.
 - Multiple bug fixes with respect to first to solve.
 - Fix contest clock update.
 - Improve submission and judging run display in jury interface.
 - Always display a flash message for skipped submissions in rejudgings
 - Restrict displayed balloons to currently selected contest.
 - Show affiliation logo's on jury affiliation overview page.
 - Fix AJAX refreshes with multiple active contests.
 - Add support for testdata subgroups.
 - Store original input filename of testcases.
 - API: Add endpoint to get users.
 - API: Improve awards endpoint.
 - API: Add endpoint to upload contest.yaml, groups.tsv, teams2.tsv, and
   accounts.tsv.
 - Update compiler options in internal build scripts.
 - Update default configuration values to modern system limits.
 - Add simple script to import a whole contest from a CLICS compatible
   ccsconfig directory.
 - Add a command to merge scoreboards from multiple ICPC Contest API
   endpoints (#632, thanks Ragnar Groot Koerkamp).

Version 7.1.1 - 20 October 2019
-------------------------------
 - Update documentation for Fedora (Thanks Marc Furon!).
 - Fix printing in jury interface.
 - Fix registration action.
 - Fix showing user last login info.
 - Fix balloon page when we do not have award info.
 - Fix logging events that require higher permissions than the user
   that triggers the action has.

Version 7.1.0 - 25 September 2019
---------------------------------
 - Minimum PHP version is now 7.1.3.
 - Use optimized composer autoloader.
 - During self-registration team name and affiliation can now be specified.
 - Judgedaemon will now keep retrying when an endpoint is unavailable.
 - Store external judgements and runs.
 - Move external CCS submission detail URL to database configuration.
 - Add support for showing shadow differences and external judgements.
 - Reduce dependencies of Judgedaemon.
 - Also install genrestapicredentials on judgehost.
 - Submit client will error early and explicitly when API calls fail.
 - Improve balloons page and make filtering persist when reloading.
 - Split up contest.public into contest.public and contest.open_to_all_teams,
   allow public contests with a limited set of teams and private contests
   with all teams.
 - Upgrade Symfony and dependencies to version 4.3.
 - Use Doctrine for migrations and initial data.
 - Add option (enabled by default) to limit files passed to
   language compilers by langauge extension list.
 - Add option to add a whole team category to a contest.
 - Allow admin to specify print command using configuration setting.
 - Show metadata for judging runs.
 - Restrict some API endpoints to jury or API users.
 - Allow to download statistic graphs as SVG.

Version 7.0.3 - 11 July 2019
----------------------------
 - Fix printing: disable debugging code.
 - Fix import/export SQL query to run with recent MySQL versions.
 - Make forms more robust against misconfigured application hostname.
 - Fix balloons page showing random balloon results.
 - Fix results.tsv export to always use externalId of team.
 - Fix contest edit form interfering with countdown clock on same page.

Version 7.0.2 - 4 June 2019
---------------------------
 - Fix first-to-solve indicators after applying a rejudging.
 - Fix the public interface when there are no active contests.
 - Fix performance when using the update_judging_seconds option.
 - Fix performance of applying a rejudging.
 - Fix judgedaemon error message on missing chroot.
 - Fix highlighting of own team row in team scoreboard.
 - Fix some title elements on jury submission page.
 - Fix type error on jury Analysis page.

Version 7.0.1 - 6 May 2019
--------------------------
 - Fix affiliation checking in Configration Checker.
 - Improve feedback on errors when uploading problem zip files.
 - Fix adding a team to a contest by editing the team.
 - Fix submitting when sourcefiles_limit is set to 1.

Version 7.0.0 - 28 April 2019
-----------------------------
 - Initial admin password is now generated on database creation, and written
   to etc/initial_admin_password.secret.
 - Rewrite the interface in Symfony and Bootstrap. Add many UI
   improvements in the process.
 - Rewrite API in Symfony, expose Swagger docs.
 - Rewrite jury analysis page.
 - Make interactive problem support more robust.
 - Fix first-to-solve check and make it consistent across UI and API.
 - Change judging directory layout to be hierarchical, i.e. to
   output/judgings/$judgehost-0/endpoint-default/$cid/$sid/$jid/.
 - Add explicit config check for max test case size and max_allowed_packet.
 - Add API endpoint to import problems to an existing contest.
 - Improve judgedaemon performance. New setting update_judging_seconds that
   allows to control how often updates are sent back; less often is faster.
 - Improve IP authentication and add X-headers based auth method.
 - Improve submit client usability.
 - Add support for the R programming language (#516 thanks Michał Kaczanowicz).
 - Add support for the Swift programming language.
 - Add support for creating a writable tempdirectory for submissions.
 - Add option to download all sample files of a problem in a single zip.
 - Upgrade Symfony to 3.4.
 - Upgrade jQuery to 3.3.
 - Upgrade Bootstrap to 4.1.
 - Remove old v3 API.
 - Remove combined_scoreboard tool.
 - Removed eventdaemon again and moved its logic to the event feed API
   action and just before inserting other events.

Version 6.0.3 - 15 December 2018
--------------------------------
 - Fix a race condition in runguard where in rare cases not all output was
   read from a pipe, resulting in wrong-answer verdicts.
 - Document that php-intl is now a requirement and fix results export.
 - Fix problem name sanitizing in zip upload.
 - Improve error detection while uploading test cases.
 - Don't break judgedaemon if in/output are missing for a testcase.
 - Fix scoreboard summary row when affiliation logos are enabled.
 - Do not try to set session params, fixes notices in newer PHP versions.
 - Remove mention of obsolete AUTH_METHOD configuration variable.
 - Fix problem import from Baylor after API change.
 - Set MySQL charset to UTF8mb4 for security and Emoji reasons.
 - Fix for modifying a user when the user has no roles.
 - Fix that users with balloons-only privileges could view more contest
   data than was strictly necessary.

Version 6.0.2 - 22 October 2018
-------------------------------
 - Fix config check for default admin password.
 - Fix balloon daemon for changed database structure.
 - Fix flash message on login page used after self-registration.
 - Fix scoreboard layout issue by preferring Roboto over sans-serif.
 - Fix a bug when submitting with entry_point containing spaces.
 - A few more fixes for potential errors.

Version 6.0.1 - 23 September 2018
---------------------------------
 - Security: disallow login for disabled user accounts.
   Thanks Henk van der Laan for reporting.
 - Fix eventlog for problems type.
 - dj_make_chroot: also install pypy for Ubuntu variant.
 - Finalise contest: fix all clarifications answered check.
   Thanks Thomas Verwoerd for reporting.
 - Clarify label for same-judgehost judgehost restriction.
 - Allow to import jury submissions without entry points.
 - Fix change contest dropdown when using Nginx.
 - API now also returns non-public contests for jury users,
   and non-public contests for users that are in them.
 - Fix DOMjudge logo display on Jury home.
 - Fix styling of navbar for non-started contest.

Version 6.0.0 - 4 September 2018
--------------------------------
 - Do not show affiliations more than once in pre-contest list.
 - Fix display of timelimits in team problem overview.
 - Improve SQL migration script.

Version 6.0.0RC1 - 28 July 2018
-------------------------------
 - Minimum PHP version is now 7.0.
 - New layout for team and public web interface including improved
   scoreboard layout.
 - Add "entry point" field for submissions to override auto detected
   main class or file.
 - Add clarification queues and allow to send canned answers.
 - Add eventdaemon to create some entries for event-feed API endpoint.
 - Update API to conform to ICPC Contest API specification.
 - Allow installing DB default data and examples separately.
 - Add option to disable starttime (pause countdown).
 - A contest can now be finalized (results declared final).
 - Allow to disable affiliation logos if desired.
 - Reduce memory reserved for JVM overhead and make stack size
   configurable in Java compile script.
 - Allow configuration variables to be publicly viewable or not.
 - Judgedaemon will now report 'internal error' on more failure
   conditions instead of just bailing out.
 - Jury edited submissions will be automatically 'claimed' by that user.
 - Include team location in header of documents printed.
 - No longer pass ONLINE_JUDGE and DOMJUDGE directives to submissions.
 - Fix runguard bug when stdout/stderr are not redirected to file.
 - Add helper script dj_run_chroot to perform chroot operations.
 - Support integration with ICPC Analytics' iCAT.
 - Migrate (parts of) the API and webpages to Symfony.
 - Use d3 charts instead of float for statistics.
 - Update ACE editor to version 1.3.3.
 - Removed likely unused Dutch translation of team manual.
 - Removed static_scoreboard script, use static=1 URL parameter via HTTP.
 - Many small issues fixed and documentation improvements.

Version 5.3.3 - 30 July 2018
----------------------------
 - Executables: allow edits only by admin.
 - Allow build with PHP >= 7.2.

Version 5.3.2 - 29 December 2017
--------------------------------
 - Fix runguard crash when deleting cgroups (#311).
 - Parse team IDs more flexible in accounts.tsv import (#310).
 - Add documentation on Apache KeepAlive settings.

Version 5.3.1 - 2 November 2017
-------------------------------
 - Fix runguard reusing cpuacct cgroup potentially giving wrong runtimes.
 - Increase length of auditlog.action DB column, fixing SQL error when
   updating some configuration settings (#308).
 - Fix testcase download filename.
 - Various small documentation fixes.

Version 5.3.0 - 21 October 2017
-------------------------------
 - Add support for Kotlin by mounting /bin in chroot environment.
 - Add options to have second scoreboard resolution and to suppress
   problem information from the scoreboard. Thanks Marc Furon.
 - Change judging feedback dir ownership after compare script ran.
   Fixes a crash when output validators have stderr output.
 - Fix display of user IP address on jury interface.
 - Various fixes to compile scripts.
 - Fix automatic setting of clarification category in jury interface.
 - Allow jury to view problems before contest start.
 - Various small fixes to test sources.
 - Delete team scoreboard cache data when deleting a team.

Version 5.2.0 - 3 October 2017
------------------------------
 - [security] bind PHP session cookie to specific web URI to prevent
   sharing sessions between different websites on the same host.
 - [security] Add RUNGROUP configure setting to make sure that submissions
   do not have access to group root files. (#250 thanks Richard Lobb)
 - Allow team to download testcase data marked as 'sample'.
 - Add icons to menu bars.
 - Allow to filter submissions on team, problem, language.
 - Show when a problem can not be judged on any judgehost.
 - Add "internal error" messages to deal more graceously with judgehost
   problems e.g. due to faulty compile or compare scripts.
 - Detect low disk space on judgehosts and decrease space usage.
 - Support OpenID Connect as login authentication provider.
 - Various improvements to the import/export functionality.
 - Use current contest as default when uploading problem archive.
 - Allow to add user during team creation in UI.
 - Make problem texts always downloadable for jury.
 - Decode HTML entities for proper display of error messages in
   submit client.
 - The event feed and REST API now comply with ICPC WF 2016 specs.
 - Disallow deleting a judgehost that has performed judgings,
   since the dangling reference from the judging table makes
   submissions being rejudged again.
 - Performance: merge jury and public versions of cache database
   tables into single tables. Please refresh scoreboard cache after
   upgrade.
 - Make Linux cgroups a requirement: running Java without it has
   become too painful with memory overheads, also when compiling.
 - Add 'output-limit' verdict.
 - Renamed dj-setup-database to dj_setup_database for consistency
   with other script names.
 - Update ACE editor to version 1.2.6, jQuery to version 2.2.4,
   and JavaScript Cookie to version 2.1.3.
 - Implement better password hashing (#237 thanks Bert Peters).
 - Allow float timelimits (#235).
 - Add filtering to balloons page (#251 thanks Michael Baer).
 - Changed semantics of dj_file_contents_get() optional size argument.
 - Make storage and display limits for output/error files configurable.
 - Changed special case handling of color name/hex conversion functions.
 - Update make_chroot, merge Debian and Ubuntu versions, and other fixes.
 - Add option -y to force yes to some make_chroot script questions.
 - Many smaller bugfixes, improvements and documentation updates.

Version 5.1.0 - 7 December 2015
-------------------------------
 - Minimum PHP version is now 5.4.
 - Minimum MySQL/MariaDB version is now 5.5.3.
 - More pervasive UTF-8 support.
   Also introduces new DJ_MYSQL_COLLATION configuration setting.
 - Remove CHROOT_SCRIPT configuration setting: automatically run
   chroot-startstop.sh if a pre-built chroot tree is found.
 - Update ACE editor to version 1.2.2, JScolor to version 1.4.5.
 - Support microsecond resolution contest times and timezones.
 - Port XML event feed from ICPC-live branch.
 - Port clarification categories feature from ICPC-live branch.
 - Merge Debian/Ubuntu chroot scripts and add minor fixes.
 - Fix float compare script output and relative checking.
 - Fix various small bugs in problem ZIP import.
 - Fix ACE editor to resize after tab change (#145).
 - Fix variance calculation in judging_statistics script.
 - [security] Disable GCC family automatic language detection to
   prevent submitting other languages or object/executable code.
 - Write compare script errors to logfile (#179).
 - Substitute invalid Unicode characters instead of producing
   blank output.
 - Various smaller fixes and improvements to the jury interface.

Version 5.0.0 - 11 August 2015
------------------------------
 - Removed support for 'presentation-error' judgement.
 - Various documentation improvements.
 - Preserve aspect ratio when creating testcase image thumbnails.
 - Fixed bug that REST API scoreboard "solved" was always true.
   Thanks Shuhei Takahashi.
 - Make REST API return properly typed values. Thanks Shuhei Takahashi.
 - Synchronise selected contest between jury/team/public interfaces.
 - By default only refresh caches of the selected contest.
 - Show differences of a resubmission with the original submission.
 - Fix length of role DB field. Thanks pinkston3 for pointing out.
 - Update ACE editor to version 1.2.0.
 - Update jQuery to version 2.1.4.
 - Update autoconf M4 macros from upstream.
 - Miscellaneous smaller fixes.

Version 5.0.0 Release Candidate 1 - 7 July 2015
-----------------------------------------------
 - Add support for the problemarchive.org problem package format, thereby
   dropping support for our custom format. In particular, the specification
   of compare scripts has changed.
 - Add support for multiple simultaneous contests.
 - Add support for HTML5 desktop notifications of clarifications,
   judgings and judgehost status (#133).
 - Add support for optional user self-registration.
 - Add support for problem points, allowing one to assign different
   scoring weights to diffent problems in a contest.
 - Add selection options for rejudging, and preview rejudging results
   before applying them.
 - Add optional per problem memory/output limits (Closes #152).
 - Apply runguard limits also to compare scripts (#68).
 - In runguard, kill all remaing processes in the cgroup at the end
   of the run; preventing leftover processes in corner cases like
   detaching from itself.
 - Allow to add restrictions on contests, problems and languages to
   judgehosts.
 - Allow judgedaemons to query multiple domservers.
 - Allow storing optional descriptive image for each test case.
 - Add support for accounts.tsv import, results.tsv and userdata.tsv export.
 - Add support for additional per-team penalty time (can be negative).
 - Move checktestdata to stand-alone repository.
 - Update dj_make_ubuntu_chroot to Trusty (#139, thanks Ruud Koot).
 - Fix diff display on team submission output page when showing the
   result of sample testcases is enabled (#137, thanks Ruud Koot).
 - In Haskell run script, set maximum stack size to someting small to
   prevent ghc from running out of memory (#138, thanks Ruud Koot).
 - Update ACE editor to 1.1.8, JScolor to 1.4.4.
 - Improve installation on and documentation for Red Hat(like) Linux.
 - Root is not required anymore for 'make install'.
 - Raise minimum required PHP version to 5.3.3.

Version 4.0.0 - 22 July 2014
----------------------------
 - Fix chroot create script when using an APT proxy.
 - Fix broken link to problem download for teams and public.
 - Small tweaks to new judgehost load display.
 - Display problem/language name instead of ID above submission lists.
 - Install ACE and flot Javascript library files.
 - Rename SQL upgrade snippet to release name.
 - A few miscellaneous minor code improvements.

Version 4.0.0 Release Candidate 1 - 8 July 2014
-----------------------------------------------
 - checktestdata logical operators are now '&&' and '||'.
 - Introduce REST API; used by judgedaemon and submit client to communicate
   with domserver. API is not officially declared 'stable' at this point.
 - Removed submitdeamon; submit client now always uses the REST API.
 - Removed xml plugin interface; use the REST API instead.
 - Move nearly all judgehost configuration to the database, making it
   controllable centrally from the DOMjudge web interface, including all
   compile and check scripts.
 - Problem, team and affiliation now have a numeric auto-incrementing ID.
   Problem short names now need to be unique per contest, but not globally.
 - Redesign authentication system: there's a single set of users for all
   interfaces, which may have different roles, such as team or admin.
 - Submitclient now also works with user/password authentication.
 - New authentication scheme 'external' leverages Apache to provide a
   REMOTE_USER value.
 - New scoreboard layout: more compact, affil. logos replaced by names.
 - Store timestamps in database as Unix epoch, independent of time zones
   with subsecond resolution.
 - Store recognized language extensions in database and query from
   submit client through REST API.
 - Show diff of team and reference output even if run stopped prematurely.
 - Make timelimit overshoot margin configurable.
 - Judge too-late submissions without scoring them (Closes #99).
 - Update jscolor and sorttable javascript to latest upstream versions.
 - Misc. minor bugs fixed reported by Coverity scan.
 - Replace flex++ by flexc++, fixes a missing build dep. and code cleanup.
 - Add support for new languages: Prolog, Ruby, JavaScript.
 - Replace GeSHi syntax highlighter with Ace javascript code editor.
 - [security] Compile as unprivileged user to prevent compile-time access
   to e.g. testdata files.
 - Added rankcache_* tables to improve scoreboard page for large contests
   (thanks to the Amrita people), renamed scoreboard_* tables to match.
 - Added support for publicly visible sample testcases.
 - Move compile/run/compare scripts to database (Closes #123).
 - Add option to have compiler-error not add penalty time (Closes #127).
 - Gather and store metadata from runguard and start work to completely
   separate program/runguard stderr output (Closes #122).
 - Add statistics page with a graph of submissions during the contest.
 - Add ICPC import/export, both via TSV files and via their web service.
 - Notify admin of judgehosts that are down by indicating this in the
   menu bar.
 - Overhauled layout of submission detail page.
 - Changed Java classname detection to use reflection instead of javap.
 - Added script misc-tools/judging_statistics to extract various
   statistics (variations in judging results and runtimes, etc.).

Version 3.4.0 - (unreleased)
----------------------------
 - Add problem text to database and support viewing in PDF/HTML/ASCII.
 - Add optional printing support via DOMjudge web interface. Using
   local system printing remains the preferred way.
 - Change non-lazy evaluation to also return the result to the team
   as soon as possible while continuing to judge the remaining test
   cases.
 - Display verification comment for previous run.
 - Check IP address equivalence with inet_pton.
 - Do not apply framing protection to public interface.
 - Update GeSHi to upstream 1.0.8.11.
 - Update JSColor to upstream 1.4.0.
 - Increase highlighted source limit from 10 kB to 32 kB.
 - Add mapping to GeSHi highlighting to translate DOMjudge language
   ID's to their GeSHi counterparts.
 - Move configuration data to separate SQL file.
 - Store CPU/wall time limits in double to prevent overflows.
 - Fix bug: CSS class missing in disabled balloon interfaces rows.
 - Fix bug: link to CSS colour names reference was broken.
 - Make Java class name detection compatible with Java 7.
 - Make Haskell example source compatible with newer GHC versions.
 - Make default colour for observers grey instead of yellow.
 - Fix bug: buffer underflow bug in runguard when compiled on Ubuntu 12.04:
   added check for closed pipe (file descriptor == -1). Thanks Keith Johnson.
 - Fix bug: change absolute time strings for those times which are specified
   as relative time when starttime was changed by "start now".
 - Fix bug: long overflow in runguard / output_exit_time.
 - Fix bug: add missing $pagename to check_judgings.php.
 - Fix bug: race condition in runguard where the forked child terminates
   before the parent could setup a signal handler.
 - Fix bug: handle gracefully events deleted from the database.
 - Fix bug: submitclient compile error with g++ (Debian 4.7.1-2) 4.7.1.
 - Don't let sudo try to read passwords.
 - Various documentation improvements.
 - Add cascading delete on submitid to balloons table.
 - Support stringwise token compare and ignoring whitespace in check_float.
 - Add option to generate testdata and add ASSERT to checktestdata syntax.
 - Extend checktestdata syntax: arrays, strings, UNIQUE, INARRAY tests.
 - Correct mount bind option, see Debian bug #677815. Ported from
   WISVCH/DOMjudge tree at GitHub.
 - Add program to "relive" simulate original contest submissions.
 - Add option to display favourite teams on top of the public scoreboard.
 - Make format of timestamps in web interfaces configurable.
 - Use PHP multibyte string functions where applicable. Thanks Vladimir
   Vassiliev for the bug report.
 - Use HTML5 for multiple file uploads and form validation, when available.
 - Fix: close all file descriptors when daemonizing (no PHP solution yet).
 - Upgrade to PHP's 'mysqli' extension instead of the legacy 'mysql'.
 - Switch make_chroot to Debian 7.0 'Wheezy' and OpenJDK 7.
 - Add support for memory control in rungard with Linux cgroups.
   Patch provided by Keith Johnson.
 - Prevent network access from runguard when cgroups are enabled.
 - Pass ONLINE_JUDGE and DOMJUDGE directives to submissions.
 - Add support for new languages: Python3, Ada, Fortran, Lua, Scala.
 - Make it explicit that rejudging 'all' does not include CORRECT submissions.
 - Allow to (de)activate judgehosts on the judgehosts overview page.
 - Apply the z-index to the clock only, otherwise the refresh button
   stops being clickable.
 - Remove unnecessary sleep from submitting test sources.
 - Run C preprocessor on Fortran source to be able to pass defines.
 - Also install an Ubuntu chroot creation script.
 - Support deleting a problem description.
 - Move the balloon daemon configuration into domserver-config, and install
   it by default.
 - Mount lib64 in the chroot if it exists.
 - Allow multiple judgedaemons to be run on the same host, and use cgroups
   to bind each to a separate CPU core.
 - Judgehosts will auto-register with the domserver and do not need to be
   manually listed beforehand.
 - Fix bug that teampage_first_visit would be updated on each visit.
 - Update clock in web interface each second through JavaScript.
 - Further tighten permissions on files written when judging submissions,
   to make the case when not using chroot more secure.
 - Add c++ as a language extension for C++.
 - Display a total and maximum of all testcase runtimes for a submission,
   and always print runtimes with two decimals.
 - Judgehosts update their status after each testcase to prevent
   warning/critical status with many testcases.

Version 3.3.0 - 29 May 2012
---------------------------
 - Fix bug: don't show unverified submission details if verification is
   required. Thanks Keith Johnson.
 - Add sourcefiles_limit setting, upper bound on the number of source
   files in one submission.
 - Improve polishing of multifile submission handling.
 - Preselect original text in clarification form.
 - Remove judgehost from submission overview tables.
 - Calculate team that first solved a problem per sortorder.
 - Do not show submission form when contest has not yet started.
 - Add button to submission list to view only unjudged submissions.
 - Improve performance of checkconfig under large databases.
 - Change runguard kill process to remove unnecessary sleep()s.
 - Create chroot once per judging instead of once per testcase to
   remove overhead of repeated chroot start/stopping.
 - Make chroot bind mounts read-only for extra security.
 - Refresh scoreboard cache only after a warning has been acknowledged.
 - Add advisory locking to calcScoreRow() updating of scoreboard cache,
   to prevent accidental high database load.
 - Check for unfinished judgings on judgehost startup and give
   them back to the queue.
 - Display problem description in submit confirmation dialog.
 - Add configure-variables-interpolated sudoers.d-snippet.
 - Fix JS sorting on id for several tables.
 - Sort problems from the current contest to the top on the problems
   overview page.
 - Add optional judge comment field to judging verification.
 - Redirect to originating page after verification of submission.
 - Move checktestdata grammar specification to separate file
   and publish as public domain.
 - Add possibility to export a problem to a zip-bundle.
 - Add specification of DOMjudge problem format zip-bundle.
 - Add admin button to rejudge all submissions in the current contest.

Version 3.3.0 Release Candidate 1 - 30 April 2012
-------------------------------------------------
 - [INCOMPATIBLE CHANGE,security] enable cURL SSL host/peer verification
   in the command line submit client. This requires any self-signed
   certificates now to be available to libcURL on a team machine.
 - Add compile script and test source for language 'bash'.
 - Prioritize to team's last judging (port from ETH tree).
 - Fix testing for empty output with strlen (port from ETH tree).
 - Update M4 macro's from upstream, fixing some problems.
 - Fix configure script to allow subdir customization in FHS mode.
 - Upgrade included dash shell to version 0.5.7-2.
 - Use Debian 6.0 Squeeze for building Java chroot.
 - Fix warning of runguard trying to reset resource limits to infinity.
 - Fix minor bug in diff output coloring due to line number overflow.
 - Rename SQL upgrade snippets and add README file for these.
 - Raise minimum required PHP version to 5.2.
 - Judges now use individual accounts to access the jury webinterface,
   which will be used to track claiming, verification, etc.
 - Add auditlog for all actions changing contest state.
 - Protect against clickjacking by forbidding framing using the
   X-Frame-Options HTTP header supported in modern browsers.
 - Reimplement balloon tracking and notification backend.
 - Display current contest prominently on contests page and provide
   button to have the next contest milestone happen now.
 - Add script to automatically submit solutions and clarifications.
 - Remove duplicate queries in scoreboard generation.
 - Add team 'enabled' switch which defaults to true, but when
   disabled makes a team to immediately disappear from the
   scoreboard and renders their team interface unusable.
 - Support 'first for contest/team/problem' comments for balloons.
 - Change ISO 3166-1 country codes from alpha-2 to alpha-3.
 - Use CPU time as primary limit (port from ETH tree).
 - Move checktestdata code to separate library for easier use in
   stand-alone checkers, and add 'IF() [ELSE] END' syntax.
 - Add option to display pending submissions on the scoreboard.
 - Remove 'identify daemon' experimental code. It hasn't been
   working for years and no-one discovered that.
 - Remove 'lib.config' experimental library for INI-file configuration.
   It was unused and we're moving to DB stored config with lib.dbconfig.
 - Merge all MySQL users into one omnipotent user (previously
   domjudge_jury). The differences between the levels were
   getting to a point where the separation provided not enough
   added benefit anymore. You should remove the users
   domjudge_{team,public,plugin} from MySQL and dbpasswords.secret.
 - Add configuration page to admin interface and move various variables
   from etc/*-config.php to the DB configuration table.
 - Support inclusion of external libraries under the lib/ext/ path.
 - Include a copy of the GeSHi syntax highlighter.
 - Result remapping is now done on each testcase result, in order
   to avoid surprising interactions with results_prio. A message
   is logged for each remapping done.
 - Transparant redirection of stdio through runguard, Closes: #89.
 - Display first solved in scoreboard (suggested by Andrés Mejía).
 - Fix source code diff function to work with resubmitting modified
   source from the jury interface.
 - Support submissions consisting of multiple source files.
 - Replace check_judgings script by web page in jury interface ('judging
   verifier').
 - Add toggle link for showing/hiding verdicts of previous submission by same
   team.

Version 3.2.0 - SVN r3594 (unreleased)
--------------------------------------
 - Add better support for interactive problems, add sample problem.
 - New, redesigned single page "dashboard" team web interface.
 - Change execute() function for more flexible I/O redirection.
 - Add runpipe program for connecting stdin/out of two processes.
 - Rename compare_program.sh to *_wrapper, allow symlinked usage.
 - Add FLOAT command and exponentiation to checktestdata program.
 - Add countdown before contest and timezone to clock.
 - Add daemon support in C/PHP libraries, use for submit/judgedaemon.
 - Add category to balloons list and button to view only unsent.
 - Lots of small changes to C/C++ sources and build system for better
   POSIX compliance and portability; support LLVM clang compiler.
 - Replace bash by POSIX shell in compile, testcase_run. (Closes: #1735673)
 - Create separate execdir subdir for judging. (Closes: #3041492)
 - Replace setuid root installation of runguard with invocation
   via sudo.
 - Fix missing permissions for plugin interface SQL user.
 - Remove CHROOTDIR (mountpoint prefix) variable to avoid confusion
   with the directory where the Java chroot was created.
 - Redirect to submissions overview page after verification.
 - Fix information leak in clarification problems list. (Closes: #3096018)
 - In JS problem name detection, probid needs to be casenormalised too.
 - Fix websubmit when using numeric problem ID's, thanks Vladimir Vassiliev.
 - Allow specification of contest times relative to starttime.
 - Add toggle button for autorefresh of jury pages (port from ETH tree).
 - Add support for team authentication via LDAP server (port from ETH tree).
 - Pass SYSLOG variable from PHP config to C/C++ programs via environment.
 - Set MySQL connection encoding explicitly. Introduces a new option:
   DJ_CHARACTER_SET_MYSQL.
 - Add 'frozen' flag option to scoreboard plugin interface.
 - Remove language 'extension' column from SQL database, langid is now
   used for source file extensions.
 - Add multiselect filters on scoreboard with javascript hiding.
 - Add cascaded deletes to DB tables: most data can now be deleted from
   the admin webinterface.

Version 3.1.0 - 14 July 2010
----------------------------
 - Add multiple testcases support.
 - Add PHP session support as alternative to IP address authentication.
   Based on patches by Tobias Werth.
 - Bugfixes and improvements to checktestdata program.
 - Fix error trapping in subshells, thanks Jan Jergus. (Closes: #2866430)
 - Fix bug in lib.database.php with array_map "class::method" notation.
 - Add 'enabled' field to contest to allow for easier editing.
 - Only show the configured submission methods in the team manual.
 - Fix install of gendbpasswords and use /dev/urandom.
 - Add documentation on static_scoreboard.
 - Add problem subject to clarifications, idea from DomJudge@FAU.
 - Add WHILE command and tests to checktestdata syntax.
 - Move PENALTY_TIME variable out of common-config into domserver-config.
 - Add combined_scoreboard script to view scoreboard of multiple sites.
 - The judgedaemon now tries to restore a lost db connection (Closes: #2897130)
 - Fix: check for both htpasswd{,2} binaries in configure.
 - Fix white problem colour by adding a circle image with black border.
 - Ports from ETH tree: use pipes with wc and gcc.
 - Fix bug: typo in presentation-error exitcode, and add safeguard.
 - Add security: check for stale judging directories (port from ETH tree).
 - Bugfix: allow zero size testcases (port from ETH tree).
 - Show config checker runtime (port from ETH tree).
 - Make syntax highlighting more modular, and add support for the
   GeSHi syntax highlighter.
 - Add sample PDF problem texts for inclusion in the database.
 - Fix bug in handling of libmagic cookie.
 - Refactor team authentication code to allow for other methods.
 - Eliminate WEBBASEURI setting.
 - Add JavaScript colour picker to balloon colour edit box, using
   jscolor 1.3.1 by Jan Odvárko.
 - Improve layout and usability of displayed tables.
 - Add "viewing" to verification status in jury submission list, idea
   from DomJudge@FAU.
 - Added AWK, C# and Python language support.
 - Added upgrade support for the SQL database.
 - Fix some HTML escaping issues found with skipfish.
 - In chroot-startstop, cope properly with /lib64 being a symlink to
   /lib. Thanks Christoph Dittmann.
 - Enforce the previously implicit notion that probid may only consist
   of characters in "a-zA-Z0-9_".
 - Fix SQL syntax error in restore_sources2db script.
 - Upgrade included dash shell to version 0.5.5.1-6.
 - Fix swapped error messages in submit client.
 - Correctly handle empty optional diff file argument.
 - Include standard C headers in misc/scanner.h.

Version 3.0.0 Release Candidate 2 - 3 September 2009
----------------------------------------------------
 - Fix directory install permissions.
 - Only show languages that are not submitable as 'disabled'
   and show a separator between contests on the problems page.
 - Minor updates to team manual.

Version 3.0.0 Release Candidate 1 - 16 June 2009
------------------------------------------------
 - Raise required PHP version to 5.
 - Replace included static bash by dash shell.
 - Revise team manual.
 - Add missing link to add testcases to a new problem.
 - Fix bug causing segfaults of submitdaemon. (Closes: #2046031)
 - Added script to check results of submitted test-sources.
 - Added 'checktestdata' script for checking testdata via grammar specification.
 - Add support for FHS directory structure installation.
 - Move all configure paths to globally included paths.mk file.
 - Repair broken documentation build/install system.
 - MySQL table types are now InnoDB. Define foreign key relations
   between tables (Closes: #2144325).
 - Use db values instead of the userinput. (Closes #2144718)
 - Add a FLUSH PRIVILEGES statement after user grants during
   installation, as this may be necessary to have MySQL pick up
   all changes correctly.
 - Don't use -fstack-protector under Cygwin. (Closes: #2144713)
 - Distribute prebuilt versions of the admin and judge manuals and
   remove svn,expdlist downloads for the team manual.
 - New compactified layout of team manual.
 - Add note about Java class naming in team manual. (Closes: #2153189)
 - Add Java compile script that autodetects class name. (Closes: #1964765)
 - Add binary file check in commandline submit. (Closes: #2046017)
 - Make HTML tables sortable in the jury view.
 - Removed "feature" of only allowing alnum chars in filename base
   for submit client problem parsing.
 - Show truncated team names instead of logins in submissions overview.
 - Fix bug of submittime==endtime not showing as too-late, thanks Tobias Werth.
 - Replace 'hostname --short' option, fixing inconsistent results.
 - Merge changes in ipv6 branch to trunk, IPv6 comparison not yet functional.
 - Show unread clafications in the title of the team clarifications page.
   (Closes: #2148054)
 - Added test sources for java class name, network and root user.
 - Only wrap unquoted lines in clarification texts. (Closes: #2244652)
 - Only build submit client/daemon on request via configure. (Closes: #2046029)
 - Flush results in config checker for better feedback.
 - Fixed DB installation support with script 'dj-setup-database'.
 - Update included dash shell to version 0.5.5.1-2 (Debian upstream).
 - Replace beep by alert plugin program. (Closes: #1878083)
 - Add functionality and fix security issue in runguard, thanks Thomas Rast.
 - Check for safe_mode before diff-ing tempfiles. (Closes: #1808354)
 - Proper error message when entering a team ip that's already in use.
 - Remove javascript sorting from table columns where it doesn't make sense.
 - Commandline submitclient supports only http by default now.
 - Remove redundant copies of testdata by symlinks. (Closes #2805385)
 - Java chroot script now uses Sun's OpenJDK-headless, allowing for a leaner
   chroot and more supported architectures.
 - Reorder source tree: removed bin dir, move test-sources to tests, cleanup.
 - Fix DEBUG_JUDGE option for debugging judging backend.
 - FreeBSD porting fixes, making DOMjudge more POSIX compliant.
 - Make DOMjudge work when PHP's short_open_tag = Off.
 - Add support for staged installs (DESTDIR).

Version 2.2.0 - 11 August 2008
------------------------------
 - Do not install domjudge straight in $HOME by default.
 - [security] Add sanity check in jury interface whether basic authentication
   is enabled, and lock down jury inferface also for non-GET/POST requests
 - Fix race condition in team password check.
 - Improved MySQL query performance.
 - Move .htaccess config to apache config.
 - Fix 'NONINTERACTIVE' undefined (Closes: #1814594, thanks Maks Verver)
 - Moved beep system call to separate function in lib.misc.{c,php}.
 - Switch to UTF-8 for output. (Closes: #1742460)
 - Represent balloon colours with a symbol rather than filling the background,
   making the scoreboard less cacophonic. (Closes: #1808561)
 - Add a web based tool for tracking balloon handouts.
 - Fix C compiler warnings by using 'const char *'.
 - Fix noninteractive/logging code in websubmit to restore submitclient
   error parsing (Closes: #1829621).
 - Fix variable name in judge/compare_program.sh.
 - Added make dist target and removed generated figures.
 - Added cookie for last verifier in jury webinterface (Closes: #1742044).
 - Added option to only show unverified submissions in jury interface.
 - Fix bug that jury was not allowed to set clarifications (un)answered.
 - Fix problem that runguard ignored SIGALRM on some distributions (thanks
   Tobias Werth).
 - New required activatetime field for a contest: defines the moment the
   team/public displays start to display this contest, but no submissions
   accepted yet. Solves the problem of testsession data still displayed upto
   the second before a contest starts (Closes: #1825555).
 - Rename contest.lastscoreupdate to freezetime to be more clear
   and in line with other table attributes.
 - Add salt to passwords' md5 hashes.
 - Move setting resource limit from run script to runguard.
 - Added signal detection to daemons for graceful shutdown (Closes: #1808478).
 - Fixed bug in test-stacksize.c due to compiler optimization
   (Closes: #1788820).
 - Add some rudimentary tests.
 - Remove websubmitdaemon, submit directly to database (Closes: #1737229).
 - Add script to restore submission table from SUBMITDIR files.
 - Complete implementation of syslog logging (now also for C/C++).
 - Send jury user back to referrer page after edits (Closes: #1821543).
 - Remove .php extensions from commandline scripts.
 - Higher displayed precision in float compare.
 - Fix submit_copy to use bash.
 - Make it easier to return custom result codes for a judging.
 - Added support for "presentation error" results.
 - Enable GCC security features for compiling DOMjudge helper programs.
 - Automatically generate apache.conf from global.conf (Closes: #1778059).
 - Added work-in-progress code for eventdaemon (Working on: #1682761).
 - Added printer friendly version of jury scoreboard.
 - Restyle configchecker and also check MySQL version and max_connections.
 - Explicitly use DBSERVER host with mysql install (Closes: #1955439).
 - Display time left to end of contest on every page (Closes: #1960940).
 - Move php files that shouldn't be served to lib/www (Closes: #1957891).
 - The admin can exclude submissions from a team's score (Closes: #1742043).
 - Added choice of view types to submissions page, default to 50 most recent
   submissions (Closes: #1964747). Choice is remembered in a cookie.
 - More flexible debugging settings with a bitmask (Closes: #1759103).
 - Store testdata in database and add interface to view/update it.
 - Add an anchor to the first changed line in the diff (Closes: #1818874).
 - Added 'domjudge_plugin' mysql user for the plugin webinterface.
 - Cache hostname in team table to prevent slowdown on hosts without
   working reverse.
 - Removed LGPL licence by relicensing 2 files to GPL.
 - Added ability to download source code for jury.
 - Allow bash-static to be replaced by any static POSIX shell.
 - In MySQL privileges table, add 'localhost' entries next to '%' entries
   to prevent Access Denied when DB is on localhost.

Version 2.1.1 - SVN
-------------------
 - Implement syslog logging (for PHP and shell scripts).
 - Fix typo in jury/submission.php causing a parse error when using
   PHP4 (Closes: #1808259, thanks mhil@fmf.nl).
 - Fix team unread clarification count to work cross-contest.
 - Update not the public, but the jury scoreboard after freeze.
 - Fix poblem colour input field to match its size in the database.
 - The colors of the problems are now shown in the jury problems overview
   (Closes: #1808308).
 - Improve contrast of default team category colours.
 - Some improvements to admin manual including submission diagram.

Version 2.1.0 - 5 September 2007
--------------------------------
 - Drop tempfile and mkstemps binaries, they are not necessary.
 - Change runguard licence to GPL 2 or higher. The current code
   is a different implementation of the original idea from timeout.
 - Make shell scripts /bin/sh where possible, set them to bash
   where we rely on bash-specific features.
 - Fixes to judge/compare.c for better handling of strange newlines and
   printing first difference summary as first line.
 - Allow admins to rejudge PENDING/CORRECT submissions (Closes: #1766222).
 - Fix include test for Text_Highlighter to cope with missing PEAR.php.
 - Fix password generation for more than one team.
 - Fix test-logic bug in judge/check_program.sh: reversing judging outcomes.
 - Make warning and error beeps default to something more noticeable.
 - Let show_source cope with empty file submissions gracefully.
 - Abort startup of judgedaemon if processes of RUNUSER still found running.
 - Added extra default problem 'fltcmp' for testing check_float and special
   run script code.
 - Fix make_passwords.sh to cope with htpasswd2 instead of htpasswd. Thanks
   Tobias Werth for the patch.
 - Fix 2 generate_config.sh bugs: quoting error and tempfile cleanup.
 - Print float abs/rel diffs in check_float (Closes: #1777195).
 - Allow teams to respond to received clarifications (Closes: #1777179).
 - Check LANG_EXTS array for consistency with languages table in configtest
   (Closes: #1777182).

Version 2.0.0 - SVN
-------------------
 - Use correct last modified date of team manual (Closes: #1744121).
 - Allow to set a specific new password for a team (Closes: #1737142).
 - Split general functions from submitcommon.cc to lib.misc.c and
   improved makefile structure and build process under Cygwin.
 - Replaced compare script by C program with better diff display.
 - Use AJAX instead of iframe to notify team/jury of new clarifications.
 - Added some security improvements to runguard.
 - Drop dependency on tempfile during distclean.
 - Fix compile errors/warnings in beep.c and compare.c (Closes: #1754218).

Version 2.0.0 Release Candidate 2 - 25 June 2007
------------------------------------------------
 - A shared file system between judgehosts and jury system is no
   longer required. The source is now communicated via the database.
 - Merge judging information into submission page (Closes: #1741620).
 - Improved portability to non-Linux systems (Closes: #1734046).
 - Use syntax highlighting in source code viewer when PEAR
   Text_Highlighter class is available.
 - Generated passwords only lowercase and length 6 (Closes: #1737142).
 - Split test-sources in normal and stress tests (Closes: #1737421).
 - Remove 'NOW()' from SQL update/insert queries to make replication
   time-independent.
 - Fixed bug in submit_db: report errors before too-late submission.
 - Fix bug in diff display when no newline present (Closes: #1741625).
 - Select recipient explicitly on clarification send (Closes: #1741622).
 - Use either wget or curl for downloading LaTeX packages.
 - Add more checking and verification to database input.
 - Upgrade bash to upstream Debian version 3.1dfsg and removed sources
   from package to website to reduce package size.
 - Bring lib.database.php up to date with latest upstream version.
 - Improved error handling in team file uploads.
 - Small-time cleanups.

Version 2.0.0 Release Candidate 1 - 28 May 2007
-----------------------------------------------
 - Minimum MySQL version required is now 4.1: simplify SQL privilege
   removal.
 - [INCOMPATIBLE CHANGE] Renamed judger to judgehost everywhere to
   remove ambiguity between human judges and judge computers.
 - [INCOMPATIBLE CHANGE] Renamed team to teamid in database tables
   refencing the 'team' table index 'login'.
 - Add numbering to scoreboard.
 - Make all cells in jury scoreboard links that refer to relevant
   data for that cell (Closes: #1582358).
 - Add affiliation icons to scoreboard (configurable). (Closes: #1355814).
 - Adapt and split sql script files to allow for easier upgrading and
   changing database name.
 - Fix possible buffer overflow in submitcommon.cc; thanks to
   Lennert Buytenhek for pointing out [CVE-2007-2977].
 - Add option to commandline submit to use websubmit (Closes: #1582376)
   and use libcurl for that (Closes: #1626222).
 - Add unfreezetime field to contests which allows to display the final
   standings to teams and public, and a button to unfreeze right away
   (Closes: #1582370).
 - Add problem and team category colours to MySQL DB.
 - Add team summary to all main team pages.
 - Add check_float program to compare floating point output.
 - Parse validator XML output if xsltproc is available (Closes: #1238454).
 - Add more summary data to tables.
 - Fix clarification wrapping.
 - Fix some language typos.
 - Improve webinterface layout.
 - Add MySQL transactions; will provide extra safety when the table type
   supports it (otherwise does nothing).
 - Rewrote submit daemon/client to use new networking code, which makes
   transition to IPv6 compatibility easy. (Closes: #1576565).
 - Change scoreboard sorting to use ACM ICPC (tie-breaker) rules.
 - Added team information pages for teams and public and included team
   members field in the SQL 'team' table.
 - Unify documentation into an administrator's manual, a judgers manual
   and a team manual.
 - Balloon notifications can continue after scoreboard freeze, and will
   list all balloons a team is supposed to have.
 - Add event table to DB to store major events of the contest
   (Working on: #1682761).
 - Only judge submissions that are submitted strictly before the contest
   end time.
 - Fix check_float testing for NaN and INF (thanks to Maks Verver).
 - Fix variable type to work on 64 bit systems in submit.cc (thanks to
   Maks Verver).
 - New script: static_scoreboard.php. Outputs a scoreboard suitable
   as a static HTML page.
 - Add DOMJUDGE_ADMINS variable in etc/passwords.php. This can be used
   to differentiate between judges and admins for the web interface:
   admins will be allowed to change more of the core data.
 - Bring lib.database.php up to date with latest upstream version.
 - Add Referential Integrity and HTTP Authentication check to configchecker.
 - Add option to admin interface to edit and delete most data types.
 - Improved build process of submit client under Windows/Cygwin.

Version 1.3.0 - 6 October 2006
------------------------------
 - Fix balloons notification for new database layout introduced
   in 1.1.0; thanks Lennert Buytenhek for the patch.
 - Handle unwritable logfiles more gracefully.
 - When scoreboard frozen, display since when.
 - Some very minor tweaks to code and documentation.

Version 1.3.0 Release Candidate 2 - 18 September 2006
-----------------------------------------------------
 - Large update and improvement of the documentation: more
   installation information, a quick-install checklist, FAQ
   is improved, example Apache configuration shipped and bugs
   fixed (Closes: #1560107).
 - Default hostname in MySQL privileges to '%' (all hosts), making
   sure that webinterface, command line and remote judgers can all
   connect (Closes: #1560108).
 - Change default memory limit in global.cfg to 512MB, since the Sun
   JVM consumes 200 MB by itself.
 - chmod uploaded files so the websubmitdaemon can handle them
   even if the webserver has a restrictive umask.
 - Auto-focus the clarification textarea.
 - Bring lib.database.php up to date with latest upstream version.
 - Some miscellaneous minor tweaks.

Version 1.3.0 Release Candidate 1 - 15 September 2006
-----------------------------------------------------
 - Added a separate script for extra setup of the chroot environment
   and pass memory limit to Sun Java run script for better javac/java
   support (Closes: #1508663).
 - Added script to generate Java chroot environment from Debian sources.
 - Added toggle buttons in jury interface for allowing submission
   and judging per problem and language.
 - Added option to enter verifier's name in jury interface.
 - Changed config option SUBM_VERIFY to VERIFICATION_REQUIRED and
   disabled "off" choice.
 - Fixed some more HTML to be fully XHTML 1.0 Strict compliant.
 - Included sources to comply with licences of included programs.
 - Multiple other small fixes and enhancements.

Version 1.2.0 - 26 June 2006
----------------------------
 - Added websubmit (Closes: #1103084).
 - Added support for team passwords (generating and validating).
 - Added team status light to jury teams overview (Closes: #1441783).
 - Added confirm dialog when sending a clarification (reply).
 - Added examples and documentation for how to use interpreted languages.
 - Added support for specialised run and compare scripts.
 - Timeout submitclient connection to server (Closes: #1477739).
 - Minimum required PHP version now 4.3.2.
 - Allow for IPv6 IP-addresses to be used.
 - Correct parameters to `diff`, since '-2' is obsoleted.
 - Checked all BASH scripts for 'set -e' (Closes: #1508492).
 - Tweak HTML to be fully XHTML 1.0 Strict compliant.

Version 1.1.0 - 22 December 2005
--------------------------------
 - Added 'make check' target which submits test-sources.
 - Fixed that no compiler output gives compilation error.
 - When solutions timeout, first try to kill graciously (Closes: #1312848).
 - Removed LaTeX packages from the sources to remove GPL/LPPL conflicts.
 - Changed runguard licence to IBM Public Licence.
 - Added diff to previous submission in source display (Closes: #1310244).
 - Extra check on submission filenames to prevent theoretical exploits
   (Closes: #1355816).
 - Added summary of solved problems to team submissions page
   (Closes: #1312241).
 - Automatically quote clarification request when replying
   (Closes: #1347688).
 - [INCOMPATIBLE CHANGE] Renamed table category to team_category,
   team_category.catid to categoryid and team.catid to categoryid,
   scoreboard_{jury,public}.problem to probid.
 - Added team_affiliation table which allows for storing the university,
   institution or company teams belong to.
 - Added room and comments fields to team table.
 - Display sort-order in category overview.
 - A lot of small webinterface enhancements.

Version 1.0.0 - 4 October 2005
------------------------------
 - Updates to team manual and other documentation (Closes: #1306335).
 - Fix case-bug in sql/mysql_privileges.sql example.
 - Drop checking for existence of testdata in www/jury/checkconfig.php,
   since the webserver doesn't need to be able to read that data.
 - Minor enhancements to the jury webinterface display.
 - Added config option to disable chroot environment for judging.
 - Improved sample data.
 - Add sort-order field to category table to enable some categories
   to be sorted at the bottom automatically (Closes: #1311885).
 - Some other small bugfixes.

Version 1.0.0 Release Candidate 1 - 21 September 2005
-----------------------------------------------------
 - Added config option to autoconfigure team IP addresses.
 - Added config option to (not) show compiler output to teams.
 - Moved C-code from headers to separate files.
 - Fixed bugs where submitdaemon couldn't handle spaces in language ext.
 - Added balloons notification script (Closes: #1238416).
 - Added feature: jury can do optional or required auditing of judgings
   (Closes: #1070240).
 - Accept late submissions, but do not judge them (Closes: #1238421).
 - Improve efficiency of requesting contest data.
 - Support the ICPC Validator Interface standard, concerning the
   parameters of the compare script. The result.xml file is generated
   but is not yet considered by test_solution (See: #1238454).
 - Small improvements in Makefile's and install scripts.
 - Some other small bugfixes.

Version 0.3.1 - 16 July 2005
----------------------------
 - Added documentation on MySQL DB layout to INSTALL.
 - Improved SQL installation/cleaning scripts.
 - Added make target to automatically generate passwords.
 - Fixed bug where teams received popups for their own clarifications.
   (Closes: #1233038)
 - Fixed missing privilege definition in MySQL table.
 - Miscellaneous other small fixes.

Version 0.3.0 - 5 July 2005
---------------------------
 - Added mass rejudging support per team,language,problem,judger.
   (Closes: #1070241)
 - Added FAQ in docs/FAQ.
 - Fix missing column_priv (domjudge_user,problem,cid).
 - Fix sorting for equal scores to be alphabetical on team name.
 - Miscellaneous documentation improvements.
 - Fix some problems with file permissions by setting those explicitly.
 - Config checker now checks for existence of testdata.{in,out}.
   (Closes: #1221427)
 - Web interface copes better with empty database tables.
 - Fixed that time_factor was inadvertently cast to int for output.
 - Add tooltips explaining the scoreboard summary row.
 - Made some enhancements to the Makefiles.
 - Support MySQL 3/4 privilege tables and sql files installation.

Version 0.2.0 - 23 February 2005
--------------------------------
 - Fixed faulty EPS-logo, finally.
 - Add database privileges and move sql-files to own directory.
   (Closes #1070236)
 - Improve config.tex dependency.
 - Make the base URI of the web interface configurable and fix redirects
   to be compatible with the HTTP-specification.
 - Fix bug in getSubmissions() that caused a syntax error on the
   team-overview in the jury interface.
 - Added some notes on security to the INSTALL docs.
 - Symbolic links now included (subversion >= 1.1).
 - Fixed buffer size bug in log/error C-code.
 - Fix bug in submit_db where the problem name got case-normalised.
 - Feature: Add caching to the Scoreboard. This vastly improves the
   responsiveness and scalability of DOMjudge; outputting the scoreboard
   is now an O(1) operation in queries. (Closes: #1070079)
 - Some fixes to XHTML1.0 compliance.
 - In tables, the time is now printed as hh:mm (without seconds).
 - Complete rewrite of the clarification interface of both teams and jury.
   Functional changes: added possibility to (un)set a request as "answered".
 - Remove Dutch text from lib.database.php. (Closes: #1103043)
 - Add functions for debugging and profiling (timing) the web interface.
 - Include placeholder config files which output an error when the
   system is unconfigured.
 - Fix layout error of differences output.
 - Only define STDERR when not already defined (differs per PHP version).

Version 0.1.1 - 24 November 2004
--------------------------------
 - Improve documentation layout.
 - Improve Makefiles and add global targets.
 - Move passwords to separate passwords.php file.
 - Redirect in webroot changed from permanent to temporary.
 - Recreated EPS logo, now 75% smaller filesize.

Version 0.1.0 - 18 November 2004
--------------------------------
 - First public release.
