blackav / ejudge Goto Github PK
View Code? Open in Web Editor NEWEjudge programming contest management system
Home Page: https://ejudge.ru
License: GNU General Public License v2.0
Ejudge programming contest management system
Home Page: https://ejudge.ru
License: GNU General Public License v2.0
Если данные пользователя содержат кавычки, то в таблице результатов данные этого пользователя отображаются примерно так:
Лицей "Вторая школа" 8 кл.
После обновления системы возникает следующая ошибка:
2020-04-20T19:46:43Z:info:loading contest 2 configuration file 2020-04-20T19:46:43Z:info:configuration file parsed ok mysql: SELECT config_val FROM config WHERE config_key = 'run_version' ; mysql: ALTER TABLE runs ADD COLUMN prob_uuid VARCHAR(40) DEFAULT NULL AFTER token_count 2020-04-20T19:46:44Z:error:database error: Invalid default value for 'create_time'
Во-первых, в дампе полей больше. Во-вторых, они называются по-другому (это вообще за гранью добра и зла).
Документация отсутствует.
Привет. Есть ли дока к API ejudge? Видел, что API появилась в последней версии.
От проверяющей системы мне нужна только песочница. Возможно ли её использовать отдельно, либо же через API? Как это лучше сделать?
В текущей версии в git можно в форме, в которой задают вопрос не указать, к какой задаче данный вопрос относится.
В таком случае вопрос будет отправлен жюри олимпиады, но при попытке просмотреть его в CGI-программе new-master будет происходить краш ej-contests.
Судя по всему, CSP-страничка пытается отобразить номер задачи, к которой относится clar, но такой задачи нет и происходит разименование нулевого указателя.
Пример backtrace:
Program received signal SIGSEGV, Segmentation fault.
0x00007f9786466cea in __strcmp_ssse3 () from /usr/lib/libc.so.6
(gdb) bt
#0 0x00007f9786466cea in __strcmp_ssse3 () from /usr/lib/libc.so.6
#1 0x00007f9783d793be in csp_view_priv_clar_page (ps=0x7f9783f7d138 <page_iface>, log_f=0x2666f90,
out_f=0x2669a40, phr=0x7ffeee5da790) at priv_clar_page.c:182
#2 0x0000000000426e8a in priv_external_action (out_f=out_f@entry=0x2669a40, phr=phr@entry=0x7ffeee5da790)
at new_server_html.c:7062
#3 0x000000000043ae85 in privileged_entry_point (fout=fout@entry=0x2669a40, phr=phr@entry=0x7ffeee5da790)
at new_server_html.c:7275
#4 0x0000000000441c16 in ns_handle_http_request (state=state@entry=0x1df78f0, p=p@entry=0x233c6d0,
fout=fout@entry=0x2669a40, phr=phr@entry=0x7ffeee5da790) at new_server_html.c:11758
#5 0x000000000041859c in cmd_http_request (state=<optimized out>, p=<optimized out>,
pkt_size=<optimized out>, pkt_gen=<optimized out>) at new-server.c:397
#6 0x000000000048d1a1 in handle_control_command (p=0x233c6d0, state=0x1df78f0) at server_framework.c:517
#7 nsf_main_loop (state=0x1df78f0) at server_framework.c:644
#8 0x0000000000417b53 in main (argc=<optimized out>, argv=<optimized out>) at new-server.c:838
Здравствуйте.
Столкнулся с такой проблемой - в одна и та же задача, два разрешенных языка - gcc и gcc-vg. При проверке решения на языке gcc отрабатывает скрипт в start_cmd, при проверке на gcc-vg - вместо него отрабатывает valgrind, и скрипт вообще не запускается.
При выдаче условий ejudge не экранирует потенциально опасные символы (<, >). Это означает, что, получив доступа к statements.xml одного контеста достаточно для XSS-атаки.
В поле "Выйти из системы [логин]" подставляется введенный пользователем логин без обработки html. Таким образом, вход под логином вида "qqq<script>alert(document.cookie);</script>" показывает куки пользователя и т.д.
При попытке импорта из Polygon вылетает ошибка polygon login action failed: invalid login or password
, хотя данные точно верны.
Can't open serve-control, getting an error "Server is down. The server is down. Try again later" or "Service is not available. Please, come later."
Ejudge version 3.5.1+(GIT 57c08df), compiled 2016-03-12 18:28:48 is running on virtual box, Fedora 23-32.
Будет ли в следующих версиях ejudge поддержка дробной оценки за тесты? Т.к. например за задачу максимальный балл нужен 10-20, но тестов 50-100. (Точность до сотых-тысячных)
ejudge contains following: "Веб-дизайн и AJAX-интерфейс © 2006-2018 Toto Lasvik."
Where Toto Lasvik is link to "www.lasvik.ru"
This domain is expired
In the default configuration, ejudge binaries are built unoptimized with debug symbols. This allows a potential attacker with local shell access (e.g. due to a kernel bug, or to secure_run/suid_run being improperly configured) to easily get administrative acccess (serve-control), for example by hooking passwd_check
in ej-users with gdb. If the binaries were optimized and stripped it would require much more effort (e.g. replacing the binaries with backdoored ones or manually tweaking the database).
Originally inspired by this blog post on Codeforces (in Russian).
mcs.in
looks like a shell script with /bin/sh
specified as a shell to run in shebang. However, it uses [[
command, which is specific to bash, zsh, korn and not supported by general shells. So, the script will fail if /bin/sh
points to something non-bash compatible.
My suggestion is to fix this by either:
[[
with [
or other POSIX-supported alternative.#!/bin/bash
I also suspect that other scripts in the repository may suffer from the same problem.
Сабж. Возникает сообщение при просмотре протокола проверки посылки в ответе ("А").
Есть какой-нибудь способ пересчитать эти хэши? И вообще, при каких условиях показывается это сообщение? Тесты при этом грузятся актуальные.
Пробовал check contest settings - не помогло.
Если делать задачу с потестовой компиляцией для языка mcs, компиляция, вроде бы проходит нормально (в /home/judges/var/ej-compile.log появляются строки ...:info:Compilation sucessful соответственно количеству тестов), но потом начинается вечный running, в /home/judges/var/ej-super-run.log появляется ...:emerg:Internal: unix/fileutl.c: 463: assertion failed: buf и слетает процесс ej-super-run
Строка 463 файла fileutl.c -- это
ASSERT(buf);
который вызывается в самом начале тела функции
int
generic_write_file(char const *buf, size_t size, int flags,
char const *dir, char const *name, char const *sfx)
Проблема не_возникает при на mcs без постестовой компиляции, ни при потестовой компиляции на g++.
Всё указанное воспроизводится на ejudge 3.7.9 #1 , а также на ejudge 3.7.6+ из виртуальной машины Fedora-26-32-ejudge-20180322.ova с сайта ejudge.ru
При генерации меню в ejudge/csp/contests/unpriv_menu.csp в пункт меню "Регистрация" (строка 21) генерируется неправильно, что приводит к неправильному отображению:
Особенно сильно видно если изменить стили под старый интерфейс:
Вместо
%><li class="contest_actions_item"><s:a class="menu" script="register" ac="main-page"><s:_>Registration</s:_></s:a><li>
Нужно
%><li><div class="contest_actions_item"><s:a class="menu" script="register" ac="main-page"><s:_>Registration</s:_></s:a></div><li>
В функции set_user_info_field_func в файле uldb_plugin_xml.c происходит что-то не то.
Функция дожна менять значение одного из полей профиля пользователя. При этом есть два случая: либо меняется базовый профиль, либо меняется профиль в одном из контестов. Соответственно функция находит нужное поле двумя if-ами: в строках 2147 и 2151.
Проблема в том, что между этими if-ами, она уже пытается использовать значение в строке 2149, чтобы проверить, не совпадает ли уже записываемое значение с имеющимся. Чтобы проверка работала, в строку 2148 добавлен код, который безусловно находит поле в профиле внутри контеста, перетирая информацию из предыдущего if-а.
Это приводит к тому, что при редактировании базового профиля через ejudge-edit-users, в последующую функцию userlist_set_user_info_field_str попадает NULL и срабатывает assert:
2018-09-19T09:20:52Z:2:emerg:Internal: userlist.c: 810: assertion failed: ui
Если я правильно понял, что должна делать эта функция и как, то для исправления необходимо удалить строку 2147 и перенести строку 2148 вниз после if-а.
После этого, правда, остается вопрос, может ли быть contest_id < 0? Обрабатываются только случай contest_id >= 0.
Lines 2147 to 2156 in 25f1163
На моем сервере на версии 3.6.2 в 100% случаев при создании нового контеста из web-интерфейса, а затем нажатии клавиши Forget Changes, ejudge падает. Иногда он даже падает при успешном создании контеста, но почему-то не всегда.
Прилагаю кусочек ej-super-server.log.
2017-04-30T11:57:38Z:info:cmd_http_request: 172773
2017-04-30T12:03:30Z:info:cmd_http_request: 47590
2017-04-30T12:03:40Z:info:cmd_http_request: 129
2017-04-30T12:03:40Z:info:cmd_http_request: 74742
*** Error in `/home/ejudge/inst-ejudge/bin/ej-super-server': double free or corruption (!prev): 0x00000000023f3d40 ***
======= Backtrace: =========
/usr/lib/libc.so.6(+0x722ab)[0x7f356a5802ab]
/usr/lib/libc.so.6(+0x7890e)[0x7f356a58690e]
/usr/lib/libc.so.6(+0x7911e)[0x7f356a58711e]
/home/ejudge/inst-ejudge/bin/ej-super-server[0x42e3d5]
/home/ejudge/inst-ejudge/bin/ej-super-server(param_free+0x76)[0x4aa496]
/home/ejudge/inst-ejudge/bin/ej-super-server(super_serve_clear_edited_contest+0x1a5)[0x41cdc5]
/home/ejudge/inst-ejudge/bin/ej-super-server[0x41e108]
/home/ejudge/inst-ejudge/bin/ej-super-server[0x41d757]
/home/ejudge/inst-ejudge/bin/ej-super-server(main+0x55f)[0x4196af]
/usr/lib/libc.so.6(__libc_start_main+0xf1)[0x7f356a52e511]
/home/ejudge/inst-ejudge/bin/ej-super-server(_start+0x2a)[0x41978a]
======= Memory map: ========
00400000-0056a000 r-xp 00000000 08:03 213 /home/ejudge/inst-ejudge/bin/ej-super-server
00769000-0076a000 r--p 00169000 08:03 213 /home/ejudge/inst-ejudge/bin/ej-super-server
0076a000-00772000 rw-p 0016a000 08:03 213 /home/ejudge/inst-ejudge/bin/ej-super-server
00772000-0077a000 rw-p 00000000 00:00 0
0239a000-023dc000 rw-p 00000000 00:00 0 [heap]
023dc000-0262a000 rw-p 00000000 00:00 0 [heap]
7f3564000000-7f3564021000 rw-p 00000000 00:00 0
7f3564021000-7f3568000000 ---p 00000000 00:00 0
7f3568dbf000-7f3568dd5000 r-xp 00000000 08:03 3315694 /usr/lib/libgcc_s.so.1
7f3568dd5000-7f3568fd4000 ---p 00016000 08:03 3315694 /usr/lib/libgcc_s.so.1
7f3568fd4000-7f3568fd5000 r--p 00015000 08:03 3315694 /usr/lib/libgcc_s.so.1
7f3568fd5000-7f3568fd6000 rw-p 00016000 08:03 3315694 /usr/lib/libgcc_s.so.1
7f3568fd6000-7f3568ff6000 r-xp 00000000 08:03 2360365 /home/judges/bin/csp/super-server/cnts_edit_cur_contest_page.so
7f3568ff6000-7f35691f5000 ---p 00020000 08:03 2360365 /home/judges/bin/csp/super-server/cnts_edit_cur_contest_page.so
7f35691f5000-7f35691f6000 r--p 0001f000 08:03 2360365 /home/judges/bin/csp/super-server/cnts_edit_cur_contest_page.so
7f35691f6000-7f35691f7000 rw-p 00020000 08:03 2360365 /home/judges/bin/csp/super-server/cnts_edit_cur_contest_page.so
7f35691f7000-7f35691f9000 r-xp 00000000 08:03 2382842 /home/judges/bin/csp/super-server/create_contest_2_action.so
7f35691f9000-7f35693f8000 ---p 00002000 08:03 2382842 /home/judges/bin/csp/super-server/create_contest_2_action.so
7f35693f8000-7f35693f9000 r--p 00001000 08:03 2382842 /home/judges/bin/csp/super-server/create_contest_2_action.so
7f35693f9000-7f35693fa000 rw-p 00002000 08:03 2382842 /home/judges/bin/csp/super-server/create_contest_2_action.so
7f35693fa000-7f35693fd000 r-xp 00000000 08:03 2383086 /home/judges/bin/csp/super-server/create_contest_page.so
7f35693fd000-7f35695fc000 ---p 00003000 08:03 2383086 /home/judges/bin/csp/super-server/create_contest_page.so
7f35695fc000-7f35695fd000 r--p 00002000 08:03 2383086 /home/judges/bin/csp/super-server/create_contest_page.so
7f35695fd000-7f35695fe000 rw-p 00003000 08:03 2383086 /home/judges/bin/csp/super-server/create_contest_page.so
7f35695fe000-7f3569603000 r-xp 00000000 08:03 2382847 /home/judges/bin/csp/super-server/main_page.so
7f3569603000-7f3569802000 ---p 00005000 08:03 2382847 /home/judges/bin/csp/super-server/main_page.so
7f3569802000-7f3569803000 r--p 00004000 08:03 2382847 /home/judges/bin/csp/super-server/main_page.so
7f3569803000-7f3569804000 rw-p 00005000 08:03 2382847 /home/judges/bin/csp/super-server/main_page.so
7f3569804000-7f3569acd000 r--p 00000000 08:03 3329311 /usr/lib/locale/locale-archive
7f3569acd000-7f3569acf000 r-xp 00000000 08:03 2368383 /home/judges/bin/csp/super-server/login_page.so
7f3569acf000-7f3569cce000 ---p 00002000 08:03 2368383 /home/judges/bin/csp/super-server/login_page.so
7f3569cce000-7f3569ccf000 r--p 00001000 08:03 2368383 /home/judges/bin/csp/super-server/login_page.so
7f3569ccf000-7f3569cd0000 rw-p 00002000 08:03 2368383 /home/judges/bin/csp/super-server/login_page.so
7f3569cd0000-7f3569cdb000 r-xp 00000000 08:03 3278915 /usr/lib/libnss_files-2.25.so
7f3569cdb000-7f3569eda000 ---p 0000b000 08:03 3278915 /usr/lib/libnss_files-2.25.so
7f3569eda000-7f3569edb000 r--p 0000a000 08:03 3278915 /usr/lib/libnss_files-2.25.so
7f3569edb000-7f3569edc000 rw-p 0000b000 08:03 3278915 /usr/lib/libnss_files-2.25.so
7f3569edc000-7f3569ee2000 rw-p 00000000 00:00 0
7f3569ee2000-7f3569eed000 r-xp 00000000 08:03 3278913 /usr/lib/libnss_nis-2.25.so
7f3569eed000-7f356a0ec000 ---p 0000b000 08:03 3278913 /usr/lib/libnss_nis-2.25.so
7f356a0ec000-7f356a0ed000 r--p 0000a000 08:03 3278913 /usr/lib/libnss_nis-2.25.so
7f356a0ed000-7f356a0ee000 rw-p 0000b000 08:03 3278913 /usr/lib/libnss_nis-2.25.so
7f356a0ee000-7f356a103000 r-xp 00000000 08:03 3278909 /usr/lib/libnsl-2.25.so
7f356a103000-7f356a302000 ---p 00015000 08:03 3278909 /usr/lib/libnsl-2.25.so
7f356a302000-7f356a303000 r--p 00014000 08:03 3278909 /usr/lib/libnsl-2.25.so
7f356a303000-7f356a304000 rw-p 00015000 08:03 3278909 /usr/lib/libnsl-2.25.so
7f356a304000-7f356a306000 rw-p 00000000 00:00 0
7f356a306000-7f356a30d000 r-xp 00000000 08:03 3278918 /usr/lib/libnss_compat-2.25.so
7f356a30d000-7f356a50c000 ---p 00007000 08:03 3278918 /usr/lib/libnss_compat-2.25.so
7f356a50c000-7f356a50d000 r--p 00006000 08:03 3278918 /usr/lib/libnss_compat-2.25.so
7f356a50d000-7f356a50e000 rw-p 00007000 08:03 3278918 /usr/lib/libnss_compat-2.25.so
7f356a50e000-7f356a6a9000 r-xp 00000000 08:03 3279004 /usr/lib/libc-2.25.so
7f356a6a9000-7f356a8a8000 ---p 0019b000 08:03 3279004 /usr/lib/libc-2.25.so
7f356a8a8000-7f356a8ac000 r--p 0019a000 08:03 3279004 /usr/lib/libc-2.25.so
7f356a8ac000-7f356a8ae000 rw-p 0019e000 08:03 3279004 /usr/lib/libc-2.25.so
7f356a8ae000-7f356a8b2000 rw-p 00000000 00:00 0
7f356a8b2000-7f356a8b6000 r-xp 00000000 08:03 3329228 /usr/lib/libuuid.so.1.3.0
7f356a8b6000-7f356aab5000 ---p 00004000 08:03 3329228 /usr/lib/libuuid.so.1.3.0
7f356aab5000-7f356aab6000 r--p 00003000 08:03 3329228 /usr/lib/libuuid.so.1.3.0
7f356aab6000-7f356aab7000 rw-p 00004000 08:03 3329228 /usr/lib/libuuid.so.1.3.0
7f356aab7000-7f356aaba000 r-xp 00000000 08:03 3278911 /usr/lib/libdl-2.25.so
7f356aaba000-7f356acb9000 ---p 00003000 08:03 3278911 /usr/lib/libdl-2.25.so
7f356acb9000-7f356acba000 r--p 00002000 08:03 3278911 /usr/lib/libdl-2.25.so
7f356acba000-7f356acbb000 rw-p 00003000 08:03 3278911 /usr/lib/libdl-2.25.so
7f356acbb000-7f356ace2000 r-xp 00000000 08:03 3311291 /usr/lib/libexpat.so.1.6.2
7f356ace2000-7f356aee2000 ---p 00027000 08:03 3311291 /usr/lib/libexpat.so.1.6.2
7f356aee2000-7f356aee4000 r--p 00027000 08:03 3311291 /usr/lib/libexpat.so.1.6.2
7f356aee4000-7f356aee5000 rw-p 00029000 08:03 3311291 /usr/lib/libexpat.so.1.6.2
7f356aee5000-7f356aff7000 r-xp 00000000 08:03 3278910 /usr/lib/libm-2.25.so
7f356aff7000-7f356b1f6000 ---p 00112000 08:03 3278910 /usr/lib/libm-2.25.so
7f356b1f6000-7f356b1f7000 r--p 00111000 08:03 3278910 /usr/lib/libm-2.25.so
7f356b1f7000-7f356b1f8000 rw-p 00112000 08:03 3278910 /usr/lib/libm-2.25.so
7f356b1f8000-7f356b20e000 r-xp 00000000 08:03 3283126 /usr/lib/libz.so.1.2.11
7f356b20e000-7f356b40d000 ---p 00016000 08:03 3283126 /usr/lib/libz.so.1.2.11
7f356b40d000-7f356b40e000 r--p 00015000 08:03 3283126 /usr/lib/libz.so.1.2.11
7f356b40e000-7f356b40f000 rw-p 00016000 08:03 3283126 /usr/lib/libz.so.1.2.11
7f356b40f000-7f356b432000 r-xp 00000000 08:03 3279005 /usr/lib/ld-2.25.so
7f356b599000-7f356b620000 rw-p 00000000 00:00 0
7f356b630000-7f356b631000 rw-p 00000000 00:00 0
7f356b631000-7f356b632000 r--p 00022000 08:03 3279005 /usr/lib/ld-2.25.so
7f356b632000-7f356b633000 rw-p 00023000 08:03 3279005 /usr/lib/ld-2.25.so
7f356b633000-7f356b634000 rw-p 00000000 00:00 0
7ffedfc4e000-7ffedfc6f000 rw-p 00000000 00:00 0 [stack]
7ffedfd0e000-7ffedfd10000 r--p 00000000 00:00 0 [vvar]
7ffedfd10000-7ffedfd12000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Сейчас KIROV прогоняет все тесты (в то время как ACM - до первого ошибочного).
Хотелось бы имень возможность настроить ejudge так, чтобы он оценивал по системе KIROV, но при этом запускал тесты только до первого ошибочного.
Hello!
How can I delete a contest?
Please, make such function so users can make it automatically.
Пользователь с правами master в контесте написал комментарий к коду размером 81788 байт через интерфейс master. Система позволила написать ему такой большой комментарий, и внесла его в базу. Кажется, только в таблицу clars, но не в таблицу clartexts.
Потом контест выгрузился. При попытке загрузить этот контест получались следующие ошибки:
Contest is not available
The contest is temporarily not available. Please, retry the request a bit later.
Additional information about this error:
2019-08-12T06:54:33Z:info:loading contest 36513 configuration file
2019-08-12T06:54:33Z:info:configuration file parsed ok
mysql: SELECT config_val FROM config WHERE config_key = 'run_version' ;
mysql: SELECT * FROM runheaders WHERE contest_id = 36513 ;
mysql: SELECT * FROM runs WHERE contest_id=36513 ORDER BY run_id ;
mysql: SELECT config_val FROM config WHERE config_key = 'clar_version' ;
mysql: SELECT * FROM clars WHERE contest_id=36513 ORDER BY clar_id;
2019-08-12T06:54:33Z:error:database error: invalid value of field size
Для исправления ошибки пришлось исправлять записи в базе MySQL.
В ejudge 3.7 появилась новая функция, которая подсвечивает команду, получившую первый OK по каждой задаче. Однако подсветка работает некорректно в режиме Virtual ACM, так как выбирается первая сдача по астрономическому времени, а не по времени в турнире.
Например, на картинке по задаче B первый OK был получен в 0:15 в турнире, но он был сделан командной, которая писала турнир позже по астрономическому времени.
Hi @blackav !
I would be nice if docker file will be added to this project, for example one user can easily install ejudge with one command
Если какой-либо участник имеет personal_deadline, то нужна возможность указать его персональный penalty. То есть нужен конфигурационный параметр задачи для определения персонального штрафа.
Nasm-x86 позволяет запускать код с возможностью вызова системных вызовов и других программ.
Пример кода:
SECTION .DATA
hello: db 'Hello world!',10
helloLen: equ $-hello
SECTION .TEXT
GLOBAL main
main:
xor edx, edx
push edx
mov esi, esp
; строка /bin//ls
push edx
push 0x736c2f2f
push 0x6e69622f
mov ebx, esp
; Блок 5
push edx
push ebx
mov ecx, esp
xor eax, eax
mov al,11
int 0x80
Лучше всего будет составить whitelist список вызовов доступных процессу.
Задаю чекер проверки стиля в соответствующем поле раздела настройки абстрактной задачи (Compiling -> Style checker name:). Остальные поля (Source header file, Source footer file) оставляю пустыми.
После сохранения настроек в конфигурацинном файле serve.cfg в разделе абстрактной задачи
добавляются две записи с пустыми значениями
source_header=""
source_footer=""
Теперь при проверке задачи выпадате ошибка Check failed с сообщением о том, что source_header не найден.
Приходится вручную удалять эти две строки из файла serve.cfg. После этого все работает.
Аналогичная проблема с полем Internal name задачи.
На данный момент, насколько я понимаю, поле comment из xml-файла с настройками задачи можно редактировать только через правку этого файла на сервере, что не очень удобно.
В веб-интерфейсе комментарии к контестам отображаются в serve-control, но при редактировании настроек контеста поменять комментарий нельзя.
После обновления до версии ejudge 3.7.4 (2018-01-10 11:48:07) в итоговой таблице перестал
срабатывать флаг Ignore success time in penalty calculation.
Не смторя на то, что он установлен, в таблице при подсчете penalty все равно учитывается время засчитанной отправки.
Hi, I have installed Ejudge in Fedora Linux and everything works fine, but as I see on most other judges there are subtasks and solving problems, which have subtasks is more interesting, is there any way to create subtasks on Ejudge? Thanks in advance!
При установке опции "Allow variable score for full solution?" в YES (конфигурационный параметр
variable_full_score) одновременно в конфигурационный файл добавляется параметр score_tokenized, то есть опция "Score only tokenized submits?" автоматом устанавливается в YES. Соответственно, с этой опцией для обычного контеста в таблице результатов ничего не отображается, ни автоматически, ни вручную заданный баллы за задачу
Приходится вручную в файле serve.cfg удалять параметр score_tokenized. После этого в итоговой таблице результатов отображаются установленные вручную баллы и подсчитывается итог.
При возникновении исключения в программе, написанной на питоне, или при ошибке синтаксиса (когда тоже выкидывается исключение интерпретатором) результатом проверки будет SE, хотя по идее там должен быть либо RT, либо CE соответственно.
Эта проблема возникает из-за того, что при выводе стека вызовов происходит чтение системных файлов, что запрещено модулем безопасности.
Участник получил комментарий к коду, в результате у него есть комментарии в форме сообщения, отмеченные, как непрочитанные.
Если участник открыл исходный код страницы, то он увидел эти комментарии. Между тем сообщения продолжают висеть, как "непрочитанные".
Issue: просмотр исходного кода сабмита должен отмечать все комментарии к этому сабмиту, как прочитанные.
В интернете уже давным давно при нажатии на кнопку "Регистрация" сразу открывается страница создания новой учётной записи.
В Ejudge реализована крайне неочевидная система, когда необходимо нажать на "Регистрацию", а после этого на "Создать учётную запись". Ещё в 8 классе я столкнулся с этой крайней неочевидностью Ejudge и за всю мою жизнь это была единственная платформа, где мне понадобилось читать гайд как зарегистрироваться, что явно показывает неочевидность данного интерфейса.
Прошу переработать интерфейс, так чтобы нажатие на кнопку "Регистрация" сразу перенаправляло к странице создания учётной записи.
Подключился к mysql напрямую, изменил данные. Если читаю из mysql - обновленные данные вижу, из веб-интерфейса и ejudge-edit-users - не вижу этих изменений. В ejudge есть какой кэш промежуточный? Как заставить его перечитать данные из базы?
During ACM/ICPC contest nobody was able to connect the server, and after several hours nothing has changed.
Please design a mechanism for a no-time service last successful state restoring.
Or if you have a better thoughts, please implement those ASAP.
With best regards,
ACM team Master Minds.
Компилировать под основным пользователем опасно, так как с помощью директив #include
и .incbin
вредоносный код может прочитать любые файлы системы, в том числе настройки задач, тесты и логи ejudge, содержащие админские куки. Компиляцию следует производить под отдельным пользователем или в песочнице.
In file reuse_exec.c
declaration of task_Start
is unsafe. As described here child process can change limit by calling setrlimit
. This can cause cancelling limitations that are in the task statement
Ejudge поддерживает опцию separate_user_score в настройках турнира. При установке open_tests
в конфиге задачи это позволяет полностью убрать упоминание о некоторых тестах из протокола проверки. Однако в текущий момент существует небольшая утечка информации о закрытых тестах.
А именно, система не показывает результат проверки до тех пор, пока тестирование не завершено полностью. Таким образом, недобросовестный участник узнает астрономическое время проверки на всех тестах, в том числе скрытых. Зная также процессорное время тестирования на нескрытых тестах, можно предположить суммарное время исполнения на скрытых. Из этого можно делать определенные выводы. Например, если мы знаем что в одной из скрытых групп 20 тестов, ограничение по времени 1 секунда, а тестирование на скрытых тестах шло больше 20 секунд, то наверное эта группа была пройдена.
Обновился отсюда и пересобрал версию 3.7.8+. После этого при выполнении команды
./ejudge-control start
все зависает вот на такой строке
2018-10-24T15:03:46Z:info:ej-super-server 3.7.8+ (GIT 0002312) #1, compiled 2018-10-24 17:15:09
после чего ни один из клиентов не запускается, за исключением serve-control
После запуска всех прописаных в ejudge-control.c в функции start ej-файлов вручную все заработало.
https://ejudge.ru/wiki/index.php/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
Вот тут подробно написано, что и как делать для параллельного тестирования
Но при запуске ej-super-run он только сообщает, сколько процессов сейчас работает
с xml конфигурациями тоже ничего не получилось
Как его запускать, с какими параметрами?
ps: Зато получилось распределить вычисления на несколько узлов
Заморозка таблицы участников при дорешивании для контестов по системе OLYMPIAD больше не работает. Теперь все участники (а не только судьи) видят в итоговой таблице результаты с учётом посылок в дорешку, даже несмотря на то что в заголовке стоит "заморожено"
Пытаюсь подобрать альтернативу g++-vg, т.к. он очень медленный.
Самый перспективный вариант - clang с sanitizer'ами.
https://github.com/google/sanitizers
https://clang.llvm.org/docs/AddressSanitizer.html
Пока удалось только заставить работать address sanitizer.
Для этого в флагах компиляции поставил -fsanitize=address -g -fno-omit-frame-pointer
И добавил start_env для linux_shared: start_env = "ASAN_OPTIONS=symbolize=0:detect_leaks=0"
(кстати, это окружение можно где-нибудь через пользовательский интерфейс установить?)
Какие-то ошибки работы с памятью удается обнаружить, но есть проблемы:
LeakSanitizer does not work under ptrace (strace, gdb, etc)
- из-за этого пришлось поставить detect_leaks=0
.symbolize=0
В связи с этим вопрос - есть ли какой-нибудь опыт по внедрению санитайзеров? Или, возможно, какие-нибудь идеи, как решить возникшие проблемы?
Сейчас аргументы командной строки можно задать только на тест (по крайней мере, как я понял из документации).
Если аргументы одинаковые для всех тестов - то делать конфиг на каждый тест муторно (хоть это и решается скриптом).
Предложение: сделать у задачи настройку params, которая применяется ко всем тестам. (В абстрактную задачу это тоже можно добавить).
При этом предлагаю если этот параметр есть и у теста, и у задачи, передавать сначала аргументы от задачи, потом от теста.
Это может пригодиться если аргументы мало отличаются, например 5 одинаковых для всех тестов, а 6 отличается от теста к тесту.
При импорте задачи с полигона выдает ошибку:
GET: https://polygon.codeforces.com/login
Request failed: SSL connect error.
Ejudge запущен через Docker на macOS Catallina.
{ "ok" : true, "result": { "server_time": 1560716114, "problem": { "id": 1, "short_name": "A", "long_name": "Олимпиада", "type": 0, "full_score": 100, "use_stdin": true, "use_stdout": true, "combined_stdin": true, "combined_stdout": true, "team_enable_rep_view": true, "team_enable_ce_view": true, "ignore_compile_errors": true, "real_time_limit_ms": 5000, "time_limit_ms": 2000, "test_score": 1, "run_penalty": 0, "disqualified_penalty": 1, "input_file": input.txt, "output_file": output.txt, "enable_max_stack_size": true, "max_vm_size": "268435456", "max_stack_size": "268435456", "is_statement_avaiable": true, "est_stmt_size": 4096 }, "problem_status": { "is_viewable" : true, "is_submittable" : false, "is_tabable" : true, "is_solved" : true, "best_run" : 6530, "best_score" : 100, "all_attempts" : 1, "eff_attempts" : 1 } } }
The offending lines are lines 23 and 24:
"input_file": input.txt, "output_file": output.txt,
Если включена компиляция под отдельным пользователем, то новые каталоги для обмена данными с компиляцией создаются с такими правами:
$ ls -l
итого 12
drwxr-sr-x 2 ejudge ejcompile 4096 окт 17 14:02 dir
drwxr-sr-x 2 ejudge ejcompile 4096 окт 17 14:02 in
drwxr-sr-x 2 ejudge ejcompile 4096 окт 17 14:02 out
$ pwd
/home/judges/compile/var/compile/000942/status
То есть пользователь ejcompile в эти каталоги ничего писать не умеет.
Каталог report аналогично.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.