DOMjudge Programming Contest Judging System

Version 10.0.0DEV
-----------------
 - Added support for IOI style partial scoring and optimization problems.
 - Removed support for multiple endpoints from judgedaemon.
 - Removed support for cgroup v1.
 - Various fixes to the Monaco submission comparison viewer.
 - Drop support for PHP 8.1, upgraded to Symfony 7.4.
 - Allow LaTeX inline math in clarifications.
 - Allow teams to be in more than one category and add more category types.
 - Do not expose internal IDs in interface or API anymore.
 - Make shadow mode a per contest setting.
 - Allow to specify whether to use internal or external judgings and runs in
   shadow mode.
 - Use application/x-www-form-urlencoded instead of multipart/form-data for
   API requests without file uploads to make them work with PUT/PATCH requests.
 - Removed email collection for selfregistered users.
 - Make penalty time a per contest setting.
 - Added `--with-instance-name` to configure, allowing multiple DOMjudge
   installations to coexist on one host. It determines the webserver and
   PHP-FPM configuration file names, the PHP-FPM pool and socket, the nginx
   upstream, and the default database name and user. For in-place
   (maintainer mode) installs it is derived from the directory name, so
   that several checkouts or worktrees can each have their own
   installation without any extra configuration. Linked git worktrees
   reuse the database, admin and judgehost credentials of the main
   checkout. A named instance gets an nginx server block and an Apache
   VirtualHost for the host in its base URL; with Apache it is installed
   as a site.
 - `etc/genrestapicredentials` now uses the configured base URL instead of
   always writing `http://localhost/domjudge/api`.
 - The path prefix in the generated webserver configuration is now derived
   from `--with-baseurl` instead of always being `/domjudge`. Installations
   configured with a base URL without a path, e.g.
   `--with-baseurl=https://example.org/`, now get a webserver configuration
   serving DOMjudge from the root rather than from `/domjudge`.
 - API: allow updating users, teams, groups and organizations with `PUT`
   (replaces the entity) and `PATCH` (updates only the given fields). `POST` to
   teams and organizations no longer updates an existing entity. Groups now
   accept `types`, `css_class` and `allow_password_change` in the API.
 - Configuration changes
   - `show_balloons_postfreeze` configuration variable superseded by
     `minimum_number_of_balloons` and `any_balloon_postfreeze`.
   - `event_feed_format` configuration variable superseded by
     `ccs_api_version`, which also applies to the API. It defaults to the
     new `2026-01` version, which uses RELTIME for relative times;
     installations that explicitly set the old variable keep that version.
     Changing it converts the existing events to the new version, as does
     `dj_setup_database upgrade` when the default changes. To do this from
     the command line, use `webapp/bin/console domjudge:upgrade-events`.
 - Support the `brute_force` and `rejected` submission directories and
   `submissions/submissions.yaml` from problem package format 2025-09.

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 language 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.
