Version 2.3.2 (r3929) (20070206) ================================ Many-many changes and improvements. Information necessary for migration from version 2.2.* of the ejudge system to the current version is in the `UPGRADE' file. The current versions of 3rd-party programs and libraries are supported: expat-2.0 jdk-1.6 httpd-2.2 configure --------- CGI-programs are installed to the ${prefix}/libexec/ejudge/cgi-bin directory by default instead of ${prefix}/cgi-bin. Thus you might need to update symbolic links in the `cgi-bin' directory of the HTTP server. New option `--enable-new-server-socket' is supported. This option allows specifying the default path to the `new-server' control socket. New options `--enable-ajax' is supported. This option enables AJAX in the `new-server' program. The client part uses the Dojo toolkit, which must be installed to the HTTP server (see `UPGRADE'). Note, however, that AJAX development is in progress and most features are not implemented yet. New option `--with-mysql' is supported, which enables MySQL for data storage. Note, however, that this feature currently is not implemented. New option `--enable-style-prefix' is supported, which enables specifying the URL prefix for accessing ejudge HTML style files, which are used in the HTML pages, generated by the `new-server' program. The default value of this option is `/ejudge/', i.e. the URL for accessing the style files looks like HOST/ejudge/file. Thus the style files must be located in the `ejudge' directory of the HTML Document root directory of the HTTP-server. If the HTML style files should be located in some user's home directory, the option's value may be set to to /~USER/. Many command line options of the `configure' script have default values, which are as follows: --enable-socket-path /tmp/userlist-socket --enable-super-serve-socket /tmp/super-serve-socket --enable-new-server-socket /tmp/new-server-socket --enable-contests-home-dir /home/judges --enable-conf-dir /home/judges/data --enable-cgi-conf-dir ../cgi-data Thus, if the desired value of the command line option is the same, as the default value, the option may be omitted. On the x86_64-*linux* systems the libraries directory is automatically set to ${exec_prefix}/lib64. The Sun JDK 1.6.* is supported. The `uudecode' program is no longer required for the ejudge installation. A simplified version of the GNU uudecode program is included in the ejudge source code. contest.xml ----------- New elements are added: , , , , , . These new elements are documented in the Wiki-section of the http://www.ejudge.ru site. New attributes are added to the element: "new_managed", "assign_logins", "force_registration", "disable_name", "enable_forgot_password", "exam_mode", "disable_locale_change". The attributes are documented in the Wiki-section of the http://www.ejudge.ru site. ejudge.xml ---------- New elements are added: , , , , , . The following attributes are supported for the element: "name", "type", "load", "default". serve.cfg --------- New global configuration variables are added: `disable_user_standings', `problem_navigation', `appeal_deadline', `statement_dir', `description_file', `disable_banner_page'. `is_virtual' global configuration variable is added for the replacement of `virtual' global configuration variable (`virtual' is a keyword in C++, so it's better to avoid using it as variable name in the source code). For backward compatibility, `virtual' is declared as alias to `is_virtual' global configuration variable. New problem configuration variables are added: `manual_checking', `examinator_num', `check_presentation', `ignore_exit_code', `disable_user_submit', `disable_submit_after_ok', `max_vm_size', `max_stack_size', `max_data_size', `enable_language', `require', `statement_file', `alternatives_file', `type', `alternative', `stand_attr'. The `output_only' problem configuration variable is now just an alias to the `type' problem configuration variable. The following problem types are supported: standard output-only short-answer text-answer select-one select-many New tester configuration variable `memory_limit_type' is added. The variable may have the following values: default dos java Support for memory limiting is reimplemented. Now the memory limit is specified in the problem configuration variables `max_vm_size', `max_stack_size' intead of tester configuration. The tester configuration specifies how memory limiting should be enforced (see `memory_limit_type' description above). runs.log -------- The submit information storage format is changed. One record now occupies 128 bytes. Space for IPv6 addresses is allocated, timestamps occupy 8 bytes each. test.inf -------- New configuration variables are supported: exit_code check_stderr userlist.xml ------------ New elements are added: , , , . New attributes are added: "ssl", "role", "cnts_last_login", "info_create", "recovery". javac ----- Java programs being submitted for testing are no longer required to have the main class named `Main'. Arbitrary names for the main class are supported. new-server ---------- This is brand new program, which is an improved reimplementation of the `serve' contest server. `new-server' supports many new features missing in the `serve' program: all the contest are managed by one process `new-serve' (so, there is no need for `super-serve' program to start and stop contest servers on demand), new HTML user interface is implemented. The `serve' program is rendered obsolete and should not be used for new contest. To enable new server during contest settings editing by the `serve-control' CGI program, enable "Use the new-server for this contest?" instead of "Manage the contest server?". New format conversion specifiers %Mr, %Ur are added for region information from the user database. The virtual OLYMPIAD contests are supported. The full testing of the participant's submissions is performed immediately after the virtual contest stops (when time expires or the participant presses the "Stop contest" button). The new commands are available for the contest administrator (as compared to the old `serve' contest administration interface): "Clear displayed runs" "Ignore displayed runs" "Disqualify displayed runs" "Add new runs in CSV format" "Download runs" Unprivileged users may request password restoration. The AJAX interface is partially implemented in the unprivileged users' HTML interface. Note, however, that the AJAX interface is currently in development and most planned features are not implemented. Problem statements may be displayed in the HTML user interface. Test-like problems (where one or several answers should be chosen out of displayed) are supported. new-client ---------- This is new program - CGI-client for the `new-server' contest server. The `new-client' program (and its symbolic links: `new-master', `new-judge', etc) replaces the old `team', `master', `judge' CGI-programs. The unprivileged HTML user interface is reimplemented. The privileged HTML user interface is basically the same. Certain user interface elements are reworked, and many new commands are added. libchecker ---------- The type for the character strings is changed from `unsigned char' to `char' for better compatibility with C++ and gcc-4.1. New data types for S-expressions are added. New function `checker_read_buf_2' is added: char *checker_read_buf_2( int ind, // stream number for reading const char *name, // the parameter name int eof_error_flag, // 1, if EOF is presentation error char *sbuf, // the fixed buffer address size_t ssz, // the fixed buffer size char **pdbuf, // the extendable buffer address size_t *pdsz); // the extendable buffer size The function reads one word from the specified input stream. The word is a longest possible sequence of non-whitespace characters. The word ends with whitespace character or EOF marker, which are not the part of the word and remain in the input stream. Before reading the word, whitespace in the input is skipped. The word is read into the fixed-size buffer or into the extendable buffer, or into both. To specify reading into the fixed-size buffer, non-zero values of `sbuf', `ssz' parameters should be specified. To specify reading into the extendable buffer, non-zero values of `pdbuf' and `pdsz' parameters should be specified. If only the fixed-size buffer parameters are specified, the word is read into the fixed-size buffer. If the word is too large for the fixed-size buffer, the checker is terminated with "Presentation error" or "Check failed" error depending on the input stream number. If only the extendable buffer parameters are specified, the word is read into the extendable buffer. Memory for the word is allocated on heap, so it should be freed with `free' when the buffer is no longer in use. If both the fixed-size buffer and the extendable buffer parameters are specified, the word is read into the fixed-size buffer unless its size is greater than the buffer size. In the latter case the word in read into the extendable buffer. In any case the function returns the pointer to the beginning of the buffer with the read word. If there is no word read because of the end of file, and the `eof_error_flag' is 0, NULL is returned. New function `checker_read_file_f' is added: void checker_read_file_f( FILE *f, // input stream char **pbuf, // buffer to read into size_t *psize); // the file size The function reads the file's content into memory. The binary files are supported. After the file's content one '\0' byte is added, so if the file is text file, its content in memory may be manipulated with C string functions. All functions `checker_read_team_*' are renamed to `checker_read_out_*'. The old names are preserved for backward compatibility. The `checker_team_eof' function is renamed to `checker_out_eof', the `checker_team_close' function is renamed to `checker_out_close'. New function `checker_out_eoln' is added: void checker_out_eoln(int lineno); The function skips all whitespace except `\n' in the program output file. If the next character is '\n' or EOF is reached, the function returns successfully. The "Presentation error" is diagnosted otherwise. Reading of integer values from input streams is improved. Integer overflow is handled correctly. New functions checker_eq_{float,double,long_double}_abs are added: int checker_eq_TYPE_abs(TYPE v1, TYPE v2, TYPE eps); The functions compare two numbers of the specified floating-point type using the specified absolute error. If the numbers are equal (with the specified absolute error), 1 is returned. Otherwise 0 is returned. New function `checker_read_sexpr' is added: checker_sexpr_t checker_read_sexpr(int ind); The function parses the S-expression from the specified stream. New function `checker_eq_sexpr' is added: int checker_eq_sexpr(checker_sexpr_t l_corr, checker_sexpr_t l_out); The function compares two S-expressions. The function returns 1, if the two S-expressions are equal, and 0 otherwise. New functions `checker_{koi8r,cp866,cp1251,iso,mac}_to_ucs2': int checker_CHARSET_to_ucs2(int c); The functions convert one character in the specified cyrillic character set into the UCS2 character set. New functions `checker_{koi8r,cp866,cp1251,iso,mac,utf8}_to_ucs2': unsigned short *checker_CHARSET_to_ucs2_buf( const char *str, unsigned short* buf, size_t size); The functions convert the character string `str' in the specified charset CHARSET into the string in the UCS2 charset. The length of the string `str' is specified explicitly in parameter `size', i.e. it is possible to convert strings containing NUL bytes. UCS4 codes greater 0xffff, which may appear in UTF8 string, are not supported. The result buffer is specified in the `buf' parameter. The result buffer `buf' should have size atleast "sizeof(short) * size" bytes. The function returns the pointer to the result, i.e. the value of the `buf' parameter. New function `checker_ucs2_tolower': int checker_ucs2_tolower(int c); The function lowercases character in UCS2 charset. Currently the english and russian alphabets are only supported. New function `checker_ucs2_tolower_buf': unsigned short *checker_ucs2_tolower_buf( unsigned short *buf, size_t size); The function lowercases the string in UCS2 charset. Currently the english and russian alphabets are only supported. The `buf' parameter specifies the string address, and `size' parameter specifies its size. New function `checker_strcmp_ucs2': int checker_strcmp_ucs2( const unsigned short *s1, const unsigned short *s2); The function compares two strings in UCS2 charset. The strings must terminate with 0x0000 UCS2 character. New function `checker_eq_str_rus_ucs2': int checker_eq_str_rus_ucs2( const char *s1, const unsigned short *s2); The function compares the `s1' string in one of the supported russian byte charsets (koi8r, cp1251, cp866, iso, mac, utf8) with the string `s2' in UCS2 charset. Because the exact charset of the string `s1' is unknown, all possible variants are checked. New function `checker_eq_str_rus_ucs2_nocase': int checker_eq_str_rus_ucs2_nocase( const char *s1, const unsigned short *s2); The function works like `checker_eq_str_rus_ucs2', but comparing strings case-insensitively. Standard checkers ----------------- The standard checkers cmp_{float,double,long_double}, cmp_{float,double,long_double}_seq support the `ABSOLUTE' environment variable. If the `ABSOLUTE' environment variable is set (to arbitrary value), the comparison of two floating-point values is performed in absolute error mode instead of relative error mode (see new functions checker_eq_TYPE_abs). The standard checker `cmp_huge_int' compares arbitrarily long numbers (without 1Mb limit). New standard checker `cmp_sexpr' compares two S-expressions for equality. New standard checker `cmp_yesno' compares `Yes'/'No' answers. If the program being tested outputs something different from Yes or No (case-insensitive), "Presentation error" is reported. If the program being tested outputs answer in different letter case, also the "Presentation error" is reported. compile ------- The `compile' program works correctly in the daemon mode. The program handles `SIGHUP' signal and restarts itself, so the `SIGHUP' may be used to force re-reading of the configuration files. The following new command line options are supported: -i initialization mode. In this mode all the necessary directories are created, then the `compile' terminates. The initialization mode is used during installation and setup of the ejudge system. -D start in daemon mode -u UID specify the user UID. May be used only if the `compile' is started by the `root' user. The option is used during installation and setup of the ejudge system. -g GID specify the group GID. May be used only if the `compile' is started by the `root' user. The option is used during installation and setup of the ejudge system. -C DIR change the current directory to `DIR'. compile-control --------------- A new program for controlling the `compile' program from the command line. Especially useful, when the `compile' program is started in daemon mode. Usage: compile-control [stop|restart] edit-userlist ------------- During viewing the registered users new command `o' is available, which may be used for copying the contest-specific information of user from one contest to another. ejudge-control -------------- A new program for controlling the ejudge system as the whole from the command line. The following command line options are supported: -u UID specify the user UID. May be used only if the `ejudge-control' is invoked by the `root' user. May be useful in system startup sctipts. -g GID specify the group GID. May be used only if the `ejudge-control' is invoked by the `root' user. May be useful in system startup sctipts. The following commands are supported: start start all the ejudge daemons (userlist-server, super-serve, compile, new-server, job-server). stop terminate all the ejudge daemons job-server ---------- The `sendmail' MTA is supported correctly. The `SIGHUP' signal is handled correctly and causes the program restart. New commands "stop" and "restart" are supported. The following new command line options are supported: -u UID specify the user UID. May be used only if the `job-server' is started by the `root' user. The option is used during installation and setup of the ejudge system. -g GID specify the group GID. May be used only if the `job-server' is started by the `root' user. The option is used during installation and setup of the ejudge system. -C DIR change the current directory to `DIR'. super-serve ----------- The following new commands are available during variant editing: "Clear variants" "Random variants" Daemon mode is supported. The following new command line options are supported: -D start as daemon -u UID specify the user UID. May be used only if the `job-server' is started by the `root' user. The option is used during installation and setup of the ejudge system. -g GID specify the group GID. May be used only if the `job-server' is started by the `root' user. The option is used during installation and setup of the ejudge system. -C DIR change the current directory to `DIR'. job-server-control ------------------ New program to control the `job-server' program. Especially useful when the latter runs in daemon mode. Usage: job-server-control [stop|restart] new-server-control ------------------ New program to control the `new-server' program. Especially useful when the latter runs in daemon mode. Usage: new-server-control [stop|restart] new-server-cmd -------------- New program to work with the new contest server `new-server' from the command line. The `new-server-cmd' program works similarly to the `serve-cmd' program. The following commands are currently implemented in the `new-server-cmd' program: login team-login user-login observer-login examiner-login chief-examiner-login coordinator-login judge-login admin-login master-login logout write-xml-runs export-xml-runs dump-runs dump-problems soft-update-stand suspend-testing resume-testing judge-suspended-runs has-transient-runs team-run-status run-status dump-source team-dump-source dump-clar team-dump-clar get-contest-name get-contest-type submit-run team-submit-run import-xml-runs dump-runs dump-master-runs dump-report full-import-xml-runs The following commands are not implemented, as compared to `serve-cmd': dump-team-report dump-standings dump-all-users super-serve-control ------------------ New program to control the `super-serve' program. Especially useful when the latter runs in daemon mode. Usage: super-serve-control [stop|restart] userlist-server --------------- Plugin support for storing the user information is implemented. Currently the inly implemented data storage plugin is XML files plugin. The MySQL plugin is in development. The `sendmail' MTA is supported correctly. The following new command line options are supported: -u UID specify the user UID. May be used only if the `userlist-server' is started by the `root' user. The option is used during installation and setup of the ejudge system. -g GID specify the group GID. May be used only if the `userlist-server' is started by the `root' user. The option is used during installation and setup of the ejudge system. -C DIR change the current directory to `DIR'. userlist-server-control ------------------ New program to control the `userlist-server' program. Especially useful when the latter runs in daemon mode. Usage: userlist-server-control [stop|restart]