Несоблюдение ограничений

Обсуждение вопросов, связанных с системой проведения турниров ejudge.
hotsnr
Posts:67
Joined:19 October 2012, 22:14
Несоблюдение ограничений

Post by hotsnr » 18 October 2013, 17:16

В контесте типа Kirov я дал пользователю доступ к интерфейсу судьи(new-judge) с такими правами
JUDGE_LOGIN,LIST_USERS,GET_USER,
VIEW_STANDINGS,VIEW_REPORT,
А на самом деле пользователь может читать сообщения и даже отправлять их.

Как решить такую проблему?

Версия ejudge: 2.3.27

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Несоблюдение ограничений

Post by cher » 18 October 2013, 21:37

Сейчас перепроверил: читать сообщения не может.
Отправлять сообщения может, это будет исправлено в следующей версии.

hotsnr
Posts:67
Joined:19 October 2012, 22:14

Re: Несоблюдение ограничений

Post by hotsnr » 19 October 2013, 11:52

Вы проверяли по последней версии в SVN?
Я не могу скомпилировать тот код, потому вопрос: когда будет след. версия?

hotsnr
Posts:67
Joined:19 October 2012, 22:14

Re: Несоблюдение ограничений

Post by hotsnr » 19 October 2013, 12:21

Я посмотрел код последней версии из SVN и вот что интересно:
проверки на права при отображении нет, а при отправке - есть(проверка при самой отправке, форму отправки показывает всегда).
(если я смотрел правильно - new_server_html.c)
При том у вас отправлять может, а читать - нет. А у меня вообще может все.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Несоблюдение ограничений

Post by cher » 19 October 2013, 12:55

Должно все компилироваться. Напишите сообщения об ошибках.

hotsnr
Posts:67
Joined:19 October 2012, 22:14

Re: Несоблюдение ограничений

Post by hotsnr » 19 October 2013, 19:37

Загружал так:
svn checkout https://ejudge.ru/svn/ejudge/trunk/ejudge

./configure
make

ej-polygon.c: В функции «process_login_page»:
ej-polygon.c:1420:38: ошибка: доступ по указателю на неполный тип
ej-polygon.c: В функции «process_contests_page»:
ej-polygon.c:1672:38: ошибка: доступ по указателю на неполный тип
ej-polygon.c: В функции «process_contest_page»:
ej-polygon.c:1715:38: ошибка: доступ по указателю на неполный тип
ej-polygon.c: В функции «do_work»:
ej-polygon.c:2943:5: предупреждение: неявная декларация функции «ends_with» [-Wimplicit-function-declaration]
ej-polygon.c:2943:25: ошибка: доступ по указателю на неполный тип
ej-polygon.c:2945:20: ошибка: доступ по указателю на неполный тип
ej-polygon.c:2946:14: ошибка: доступ по указателю на неполный тип
ej-polygon.c:2946:48: ошибка: доступ по указателю на неполный тип
ej-polygon.c: На верхнем уровне:
ej-polygon.c:683:1: предупреждение: «get_curl_download_interface» определена, но нигде не используется [-Wunused-function]
ej-polygon.c:821:1: предупреждение: «get_zip_interface» определена, но нигде не используется [-Wunused-function]

hotsnr
Posts:67
Joined:19 October 2012, 22:14

Re: Несоблюдение ограничений

Post by hotsnr » 19 October 2013, 19:45

gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3
glib-2.36.0

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Несоблюдение ограничений

Post by cher » 20 October 2013, 00:00

исправлено.

но у Вас не установлены libcurl-devel и/или libzip-devel. Имеет смысл их установить, чтобы была функциональна программа ej-polygon для импорта задач из системы полигон.

hotsnr
Posts:67
Joined:19 October 2012, 22:14

Re: Несоблюдение ограничений

Post by hotsnr » 21 October 2013, 11:51

Спасибо за исправление, исправил код под свои нужды (часть с ограничениями).

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Несоблюдение ограничений

Post by cher » 21 October 2013, 17:10

А что за исправления Вы сделали, если не секрет? Возможно, они были бы полезны другим пользователям.

hotsnr
Posts:67
Joined:19 October 2012, 22:14

Re: Несоблюдение ограничений

Post by hotsnr » 21 October 2013, 20:28

Просто это не единственное исправление в том файле (еще одно - реализация ограничения посылок по каждой задаче отдельно), потому нужно было время отделить.
Вот, собственно, различия:

Code: Select all

--- ejudge/new_server_html.c	2013-10-21 20:20:08.608115328 +0300
+++ ejudge-new/new_server_html.c	2013-10-21 19:40:18.012099014 +0300
@@ -9031,38 +9031,39 @@ priv_main_page(FILE *fout,
       prob = 0;
     }
   }
-
-  ns_write_all_clars(fout, phr, cnts, extra, filter_mode_clar,
-                     filter_first_clar_str, filter_last_clar_str);
-
-  fprintf(fout, "<hr><h2>%s</h2>", _("Compose a message to all participants"));
-  html_start_form(fout, 1, phr->self_url, phr->hidden_vars);
-  fprintf(fout, "<table>\n"
-          "<tr>"
-          "<td>%s:</td>"
-          "<td><input type=\"text\" size=\"16\" name=\"msg_dest_id\"/></td>"
-          "</tr>\n"
-          "<tr>"
-          "<td>%s:</td>"
-          "<td><input type=\"text\" size=\"32\" name=\"msg_dest_login\"/></td>"
-          "</tr>\n"
-          "<tr>"
-          "<td>%s:</td>"
-          "<td><input type=\"text\" size=\"64\" name=\"msg_subj\"/></td>"
-          "</tr>\n",
-          _("To user id"),
-          _("To user login"),
-          _("Subject"));
-  if (start_time <= 0) {
-    fprintf(fout, "<tr><td>%s</td><td><select name=\"msg_hide_flag\"><option value=\"0\">NO</option><option value=\"1\">YES</option></select></td></tr>\n",
-            _("Do not show before the contest starts?"));
+  
+  if (opcaps_check(phr->caps, OPCAP_VIEW_CLAR) >= 0)
+    ns_write_all_clars(fout, phr, cnts, extra, filter_mode_clar,
+                       filter_first_clar_str, filter_last_clar_str);
+  if (opcaps_check(phr->caps, OPCAP_NEW_MESSAGE) >= 0) {
+    fprintf(fout, "<hr><h2>%s</h2>", _("Compose a message to all participants"));
+    html_start_form(fout, 1, phr->self_url, phr->hidden_vars);
+    fprintf(fout, "<table>\n"
+            "<tr>"
+            "<td>%s:</td>"
+            "<td><input type=\"text\" size=\"16\" name=\"msg_dest_id\"/></td>"
+            "</tr>\n"
+            "<tr>"
+            "<td>%s:</td>"
+            "<td><input type=\"text\" size=\"32\" name=\"msg_dest_login\"/></td>"  
+            "</tr>\n"
+            "<tr>"
+            "<td>%s:</td>"
+            "<td><input type=\"text\" size=\"64\" name=\"msg_subj\"/></td>"
+            "</tr>\n",
+            _("To user id"),
+            _("To user login"),
+            _("Subject"));
+    if (start_time <= 0) {
+      fprintf(fout, "<tr><td>%s</td><td><select name=\"msg_hide_flag\"><option value=\"0\">NO</option><option value=\"1\">YES</option></select></td></tr>\n",
+              _("Do not show before the contest starts?"));
+    }
+    fprintf(fout, "</table>\n"
+            "<p><textarea name=\"msg_text\" rows=\"20\" cols=\"60\">"
+            "</textarea></p>"
+            "<p>%s\n</form>\n",
+            BUTTON(NEW_SRV_ACTION_PRIV_SUBMIT_CLAR));  
   }
-  fprintf(fout, "</table>\n"
-          "<p><textarea name=\"msg_text\" rows=\"20\" cols=\"60\">"
-          "</textarea></p>"
-          "<p>%s\n</form>\n",
-          BUTTON(NEW_SRV_ACTION_PRIV_SUBMIT_CLAR));
-
   /* change the password */
   fprintf(fout, "<hr><a name=\"chgpasswd\"></a>\n<%s>%s</%s>\n",
           /*cnts->priv_head_style*/ "h2",
Теперь правильно работают ограничения VIEW_CLAR, NEW_MESSAGE, REPLY_MESSAGE.
Я проверил, но стоит проверить еще.
Это исправление касается последней версии из SVN.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Несоблюдение ограничений

Post by cher » 22 October 2013, 12:22

Спасибо. Однако данное исправление просто отключает показ соответствующих таблиц, если нет прав.
На возможность выполнения действий это не влияет (в предположении, что пользователь знает прямой URL
на посылку сообщений).

hotsnr
Posts:67
Joined:19 October 2012, 22:14

Re: Несоблюдение ограничений

Post by hotsnr » 22 October 2013, 14:43

Я знаю, оно временное. Разбираться в вашем коде у меня пока времени нет. Что бы такое сделать (с отправкой) нужно потрудиться.
Я ожидаю, что в след. версии это будет исправлено.
Хотя я уже пользуюсь своим другим патчем уже полгода, а в SVN до сих пор нет реализации этого.
Спасибо.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Несоблюдение ограничений

Post by cher » 22 October 2013, 15:09

hotsnr wrote:Я знаю, оно временное. Разбираться в вашем коде у меня пока времени нет. Что бы такое сделать (с отправкой) нужно потрудиться.
Я ожидаю, что в след. версии это будет исправлено.
Так при отправке все права уже проверяются.
hotsnr wrote:Хотя я уже пользуюсь своим другим патчем уже полгода, а в SVN до сих пор нет реализации этого.
Спасибо.
О чем идет речь?

hotsnr
Posts:67
Joined:19 October 2012, 22:14

Re: Несоблюдение ограничений

Post by hotsnr » 22 October 2013, 15:51

viewtopic.php?f=5&t=1768

Я работал с ним по системе Kirov.
На других не пробовал, но работать должно.
Глюков вроде не замечал, хотя, опять же, стоит проверить.

У вас в последней версии появился параметр конфигурации, но он не реализован вот уже сколько.
Я тогда же его написал.

Post Reply