% -*- mode: LaTeX; coding: koi8-r -*-
% $Id: rm_ejudge.tex 67 2006-03-04 16:09:51Z cher $
% Copyright (C) 2002-2006 Alexander Chernov <cher@unicorn.cmc.msu.ru>

\chapter{Обзор системы \S{ejudge}}

\section{Общая архитектура системы}

Система \S{ejudge} состоит из нескольких компонент, отвечающих за
разные аспекты работы:
\begin{itemize}
\item
Управляющие компоненты, отвечающие за доступ к основной базе данных
пользователей, мониторинг активных турниров, выполнение низкоприоритетных
вспомогательных задач и компиляцию решений участников.
\item
Компоненты, обслуживающие турниры и выполняющие запросы пользователей
и администраторов турнира и тестирование решений.
\item
CGI-программы, непосредственно обрабатывающие запросы пользователей и
администраторов системы и предоставляющие интерфейс к программам
первой и второй групп.
\item
Вспомогательные программы, предоставляющие доступ к функциям системы
из командной строки и выполняющие другие функции.
\end{itemize}

Управляющие компоненты системы работают в режиме демона все время работы
системы, начиная от создания турнира, регистрации пользователей,
проведения турнира и все время, когда предоставляется доступ к результатам
турниров. Управляющие компоненты работают в одном экземпляре на все
существующие в данный момент в системе турниры. Запуск системы \S{ejudge}
заключается в запуске управляющих компонент.
К этой группе относятся следующие программы:
\hyperlink{P:userlist-server}{\S{userlist-server}},
\hyperlink{P:super-serve}{\S{super-serve}},
\hyperlink{P:compile}{\S{compile}},
\hyperlink{P:job-server}{\S{job-server}}.

\begin{itemize}
\item
Программа \hyperlink{P:userlist-server}{\S{userlist-server}}
выполняет функции сервера базы пользователей предоставляя возможности
регистрации на турнир, просмотра участников турнира, администрирования
участников турнира, а также выполняет аутентификацию участников турнира
и привилегированных пользователей. Программа взаимодействует со своими
клиентами с помощью UNIX-сокетов.
\item
Программа \hyperlink{P:super-serve}{\S{super-serve}}
выполняет мониторинг активных турниров, при необходимости запуская
программы обслуживания турнира. Кроме того, данная программа
выполняет запросы на создание и изменение настроек турниров.
Программа взаимодействует со своими клиентами с помощью UNIX-сокетов,
а также отслеживает запросы, поступающие в адрес программ обслуживания
турниров
\item
Программа \hyperlink{P:compile}{\S{compile}}
выполняет запросы на компиляцию решений, поступающих на проверку во
все турниры. Программа взаимодействует с серверами турниров
с помощью разделяемых каталогов.
\item
Программа \hyperlink{P:job-server}{\S{job-server}}
выполняет низкоприоритеные запросы со стороны серверов турнира.
К таким запросам относятся запросы на рассылку e-mail сообщений,
воспроизведение звуковых записей и т. д. Программа взаимодействует
с другими программами с помощью общих каталогов.
\end{itemize}

Компоненты обслуживания турнира выполняют запросы пользователей
на тестирование решений и другие операции с турниром. К этой группе
относятся следующие программы:
\hyperlink{P:serve}{\S{serve}},
\hyperlink{P:run}{\S{run}}.
\begin{itemize}
\item
Программа \hyperlink{P:serve}{\S{serve}} выполняет общее управление турниром,
включая прием решений на проверку, генерацию HTML-страниц и т. д.
Программа работает на серверном компьютере
в одном экземпляре для каждого турнира. Как правило (в стандартной
конфигурации), программа \S{serve} работает под управлением программы
\hyperlink{P:super-serve}{\S{super-serve}},
которая запускает программу \S{serve} при поступлении запроса к турниру,
если \S{serve} еще не была запущена или уже завершила работу.
Возможна и автономная работа программы \S{serve}.
\item
Программа \hyperlink{P:run}{\S{run}} выполняет тестирование решений.
Программа может работать как на серверном компьютере в одном экземпляре
для каждого турнира, так и на специально выделенных тестирующих
компьютерах в нескольких экземплярах для одного турнира.
В стандартной конфигурации программа \S{run} работает на серверном
компьютере в одном экземпляре для турнира и управляется
программой \hyperlink{P:super-serve}{\S{super-serve}},
которая запускает программу \S{run} при поступлении запроса на тестирование,
если программа \S{run} еще не была запущена или уже завершила работу.
Возможна и автономная работа программы \S{run}.
\end{itemize}

CGI-программы запускаются веб-сервером при поступлении запроса от клиента.
Как правило, CGI-программы выполняют предварительный анализ запроса
и передают запрос на генерацию HTML-страниц соответствующим программам
серверной части
\hyperlink{P:userlist-server}{\S{userlist-server}},
\hyperlink{P:super-serve}{\S{super-serve}},
\hyperlink{P:serve}{\S{serve}}.
К группе CGI-программ относятся следующие программы:
\hyperlink{P:register}{\S{register}},
\hyperlink{P:users}{\S{users}},
\hyperlink{P:team}{\S{team}},
\hyperlink{P:serve-control}{\S{serve-control}},
\hyperlink{P:master}{\S{master}},
\hyperlink{P:judge}{\S{judge}}.

\begin{itemize}
\item
CGI-программа \hyperlink{P:register}{\S{register}} обрабатывает запросы
на регистрацию новых пользователей в системе, изменение данных
пользователей, регистрацию пользователей на турниры.
Запросы пользователей перенаправляются на обработку в программу
\hyperlink{P:userlist-server}{\S{userlist-server}}.
\item
CGI-программа \hyperlink{P:users}{\S{users}} обрабатывает запросы
на просмотр списка зарегистрированных пользователей турнира и
детальной информации по зарегистрированным пользователям.
Запросы пользователей перенаправляются на обработку в программу
\hyperlink{P:userlist-server}{\S{userlist-server}}.
\item
CGI-программа \hyperlink{P:team}{\S{team}} обрабатывает запросы
участников турнира во время турнира и позволяет отправлять решения
на тестирование, просматривать результаты тестирования, отправлять
вопросы жюри и просматривать текст ответов на вопросы.
Аутентификация пользователей выполняется с помощью запроса к
программе \hyperlink{P:userlist-server}{\S{userlist-server}},
а основные запросы пользователей перенаправляются на обработку
в программу \hyperlink{P:serve}{\S{serve}}.
\item
{\raggedright
CGI-программа \hyperlink{P:judge}{\S{judge}} предоставляет привилегированный
(судейский) интерфейс для проведения турнира. Только пользователи,
у которых установлена привилегия \V{JUDGE\_LOGIN} для данного турнира
могут использовать
программу \S{judge}. Программа \S{judge} позволяет просматривать
исходный код и результаты тестирования всех участников, просматривать
вопросы от участников и давать на них ответы, просматривать таблицу
текущих результатов турнира, когда она заморожена для непривилегированных
участников. Для каждого из этих действий необходима отдельная привилегия,
что позволяет тонко настраивать возможности каждого пользователя.
Аутентификация пользователей выполняется с помощью запроса к
программе \hyperlink{P:userlist-server}{\S{userlist-server}},
а основные запросы пользователей перенаправляются на обработку
в программу \hyperlink{P:serve}{\S{serve}}.\par

}
\item
CGI-программа \hyperlink{P:master}{\S{master}} предоставляет привилегированный
административный интерфейс для управления турниром. Только пользователи,
у которых установлена привилегия \V{MASTER\_LOGIN} для данного турнира
могут использовать программу \S{master}.
Помимо всех возможностей, предоставляемых программой \S{judge},
программа \S{master} позволяет начинать и заканчивать турнир,
изменять его продолжительность, пересуживать поступившие решения
и выполнять много других действий.
Аутентификация пользователей выполняется с помощью запроса к
программе \hyperlink{P:userlist-server}{\S{userlist-server}},
а основные запросы пользователей перенаправляются на обработку
в программу \hyperlink{P:serve}{\S{serve}}.
\item
CGI-программа \hyperlink{P:serve-control}{\S{serve-control}}
предоставляет административный интерфейс для управления всеми
турнирами и создания и изменения настроек турниров. Только пользователи,
у которых установлена глобальная привилегия \V{MASTER\_LOGIN} или
\V{JUDGE\_LOGIN} могут использовать программу \S{serve-control}.
Аутентификация пользователей выполняется с помощью запроса к
программе \hyperlink{P:userlist-server}{\S{userlist-server}},
а основные запросы пользователей перенаправляются на обработку
в программу \hyperlink{P:super-serve}{\S{super-serve}}.
\end{itemize}

Вспомогательные программы выполняют прочие функции. Вспомогательные
программы запускаются из командной строки и предназначены для
использования администратором системы \S{ejudge}.

\begin{itemize}
\item
Программа \hyperlink{P:ejudge-config}{\S{ejudge-config}}
печатает некоторые настройки, сделанные при компиляции системы \S{ejudge}.
В частности, программа позволяет получить пути к заголовочным и библиотечным
файлам, необходимые для компиляции проверяющих программ с библиотекой
\hyperlink{P:libchecker}{\S{libchecker}}.
\item
Программа \hyperlink{P:ejudge-setup}{\S{ejudge-setup}}
предоставляет пользовательский консольный
интерфейс для начального конфигурирования
\S{ejudge} после компиляции и для создания необходимых конфигурационных
файлов, рабочих каталогов и пробного турнира.
\item
Программа \hyperlink{P:edit-userlist}{\S{edit-userlist}}
предоставляет пользовательский консольный интерфейс для просмотра
и редактирования базы пользователей системы \S{ejudge}.
Для выполнения запросов используется программа
\hyperlink{P:userlist-server}{\S{userlist-server}}.
\item
Программа \hyperlink{P:serve-cmd}{\S{serve-cmd}}
предоставляет интерфейс командной строки для выполнения некоторых
административных и пользовательских операций в активном турнире.
В настоящий момент реализовано подмножество операций, доступных
с помощью CGI-программ
\hyperlink{P:master}{\S{master}} и
\hyperlink{P:team}{\S{team}}.
\item
Программа \hyperlink{P:job-server-cmd}{\S{job-server-cmd}}
предоставляет интерфейс командной строки для формирования запросов
к серверу низкоприоритетных задач
\hyperlink{P:job-server}{\S{job-server}}.
\item
Программа \hyperlink{P:clean-users}{\S{clean-users}} выполняет
поиск по всем турнирам пользователей, которые не сделали ни одной попытки
сдачи решения и не задали ни одного вопроса. Такие пользователи
могут затем безболезненно быть удалены из базы пользователей.
Программа работает с файлами базы пользователей и баз посылок турниров
напрямую, поэтому перед выполнением этой программы система \S{ejudge}
должна быть полностью остановлена.
\item
Программа \hyperlink{P:collect-emails}{\S{collect-emails}}
выполняет сбор адресов электронной почты для всех пользователей,
зарегистрировавшихся на указанное множество турниров.
Программа работает с файлом базы пользователей напрямую,
поэтому перед выполнением этой программы система \S{ejudge} должна быть
полностью остановлена.
\item
Программа \hyperlink{P:slice-userlist}{\S{slice-userlist}}
генерирует <<срез>> базы пользователей по заданному множеству турниров.
В выходной XML-файл в формате базы турниров попадают только те
пользователи, которые были зарегистрированы на указанное множество
турниров. Все остальные пользователи, присутствующие в базе пользователей,
игнорируются.
Полученный XML-файл может использоваться как файл базы пользователей
в другой конфигурации системы \S{ejudge}.
Программа работает с файлом базы пользователей напрямую,
поэтому перед выполнением этой программы система \S{ejudge} должна быть
полностью остановлена.
\end{itemize}

\section{Обзор конфигурационных файлов}

Программы системы \S{ejudge} используют в своей работе несколько
конфигурационных файлов. Полное описание каждого конфигурационного
файла находится в соответствующем разделе.
\begin{itemize}
\item
Глобальный конфигурационный файл
\hyperlink{F:ejudge.xml}{\V{ejudge.xml}} содержит глобальные
настройки системы. Этот конфигурационный файл используется всеми
программами системы.
\item
Конфигурационные файлы общих настроек турниров. Каждому турниру,
созданному в системе, соответствует отдельный конфигурационный
файл. Все конфигурационные файлы турниров находятся в отдельном
каталоге и называются по номеру турнира, например,
\hyperlink{F:contest.xml}{\V{000001.xml}},
\hyperlink{F:contest.xml}{\V{000002.xml}} и т. д.
Формат этого конфигурационного файла описан в разделе
\hyperlink{F:contest.xml}{\V{contest.xml}}.
\item
Конфигурационный файл \V{compile.cfg} программы-сервера компиляции
\hyperlink{P:compile}{\S{compile}}. В этом конфигурационном файле
находятся правила компиляции для языков программирования,
поддерживаемых системой.
\item
Конфигурационные файлы рабочих настроек турниров. Каждому турниру,
созданному в системе, соответствует конфигурационный файл
\hyperlink{F:serve.cfg}{\V{serve.cfg}}. Этот конфигурационный файл
находится в каталоге конфигурационных файлов домашнего каталога
каждого турнира и используется программами
\hyperlink{P:serve}{\S{serve}} и
\hyperlink{P:run}{\S{run}}.
\item
Конфигурационные файлы CGI-программ. Конфигурационные файлы
располагаются в специальном каталоге конфигурационных файлов,
который задаётся с помощью опции
\verb|--enable-cgi-conf-dir|
скрипта конфигурации \hyperlink{P:configure}{\S{configure}}
при компиляции системы \S{ejudge}. При стандартных настройках
системы каталог конфигурационных файлов называется \verb|cgi-data|
и располагается в том же каталоге, в котором находится каталог
\verb|cgi-bin| веб-сервера.

Как правило, если все необходимые настройки указаны при
компиляции системы, конфигурационные файлы не обязательны для
нормальной настройки CGI-программ. Соответствие между
CGI-программами и их конфигурационными файлами
приведено на таблице ниже.

\begin{center}
\begin{tabular}{|l|l|}
\hline
Программа & Конфигурационный файл\\
\hline
\hyperlink{P:team}{\S{team}} & \hyperlink{F:team.cfg}{\V{team.cfg}} \\
\hyperlink{P:judge}{\S{judge}} & \hyperlink{F:judge.cfg}{\V{judge.cfg}} \\
\hyperlink{P:master}{\S{master}} & \hyperlink{F:master.cfg}{\V{master.cfg}} \\
\hyperlink{P:register}{\S{register}} & \hyperlink{F:register.xml}{\V{register.xml}} \\
\hyperlink{P:users}{\S{users}} & \hyperlink{F:users.xml}{\V{users.xml}} \\
\hyperlink{P:serve-control}{\S{serve-control}} & \hyperlink{F:serve-control.xml}{\V{serve-control.xml}}\\
\hline
\end{tabular}
\end{center}
\end{itemize}

\section{Структура инсталляции системы}

В данном разделе описывается структура инсталляционных и
рабочих каталогов системы.

\subsection{Инсталляционные каталоги}

Для документации по процедуре инсталляции системы обратитесь
к соответствующему разделу документации или к файлу \V{INSTALL}.

{\raggedright
Инсталляционные каталоги --- это каталоги, в которые инсталлируются
программы системы \S{ejudge}, вспомогательные программы и некоторые
вспомогательные данные для этих программ. Корневой каталог
инсталляции задаётся с помощью опции \verb|--prefix| скрипта
\S{configure} при компиляции системы \S{ejudge}.
В качестве корневого каталога можно указывать как стандартные
системные корневые каталоги инсталляции программ
(\verb|/usr|, \verb|/usr/local|), так и специально выделенный
для \S{ejudge} каталог, например \verb|/home/user/inst-ejudge|,
где \verb|/home/user| --- это домашний каталог пользователя.
В дальнейшем корневой каталог инсталляции системы \S{ejudge}
будет обозначаться как \verb|${prefix}|.

}

\begin{itemize}
\item \verb|${prefix}/bin|. В этот каталог инсталлируются исполняемые
файлы управляющих программ, программ, обслуживающих турниры и
вспомогательных программ. Для более удобной работы с системой \S{ejudge},
если она проинсталлирована не в системные каталоги, рекомендуется
добавить каталог \verb|${prefix}/bin| к переменной окружения \V{PATH}.

{\small
При необходимости, каталог инсталляции исполняемых файлов может
быть изменен с помощью опции \verb|--bindir| программы \S{configure}.
}

\item \verb|${prefix}/cgi-bin|. В этот каталог инсталлируются
CGI-программы. Поскольку, скорее всего, этот каталог недоступен для
веб-сервера, требуется либо скопировать файлы из этого каталога
в каталог CGI-программ веб-сервера, либо включить поддержку символических
ссылок в конфигурационном файле веб-сервера и создать символические ссылки.

Создание символических ссылок выпоняется автоматически настроечным
скриптом, который генерируется программой \S{ejudge-setup}.

\item \verb|${prefix}/include|. В этот каталог инсталлируются
заголовочные файлы библиотеки \hyperlink{P:libchecker}{\S{libchecker}}.
При сборке проверяющих программ, использующих библиотеку \S{libchecker}
рекомендуется использовать программу \S{ejudge-config} для получения
необходимых опций командной строки компилятора.

{\small
При необходимости, каталог инсталляции исполняемых файлов может
быть изменен с помощью опции \verb|--includedir| программы \S{configure}.
}

\item \verb|${prefix}/lib|. В этот каталог инсталлируются
библиотечные модули библиотеки \hyperlink{P:libchecker}{\S{libchecker}}.
При сборке проверяющих программ, использующих библиотеку \S{libchecker}
рекомендуется использовать программу \S{ejudge-config} для получения
необходимых опций командной строки компилятора. В частности, в этом
случае будут автоматически добавлены опции, необходимые для
правильной работы проверяющих программ в случае динамической компоновки
с библиотекой \S{libchecker}.

{\small
При необходимости, каталог инсталляции исполняемых файлов может
быть изменен с помощью опции \verb|--libdir| программы \S{configure}.
}

\item \verb|${prefix}/share/ejudge|. В этот каталог инсталлируются
файлы настройки политики безопасности языка \S{Java}. Кроме того,
в подкаталогах располагаются файлы библиотеки
\hyperlink{P:testlib}{\S{testlib}}.

\item \verb|${prefix}/share/ejudge/fpc|. В этот каталог инсталлируется
версия библиотеки \hyperlink{P:testlib}{\S{testlib}} для компилятора
\S{Free Pascal}.

\item \verb|${prefix}/share/ejudge/delphi|. В этот каталог инсталлируется
версия библиотеки \hyperlink{P:testlib}{\S{testlib}} для компилятора
\S{Kylix} (Delphi)

\item \verb|${prefix}/share/locale|. Сюда инсталлируются файлы,
необходимые для локализации сообщений системы.

\item \verb|${prefix}/libexec/ejudge|. Сюда инсталлируются различные
вспомогательные программы, не предназначенные для непосредственного
запуска пользователем: вспомогательные скрипты для компиляции решений,
вспомогательные программы для запуска DOS-эмулятора и сброса
привилегий, стандартные проверяющие программы.
\end{itemize}

\subsection{Рабочие каталоги}

В рабочих каталогах системы хранятся конфигурационные файлы системы
и турниров, накапливается архив посылок каждого турнира, а также
здесь находятся текущие каталоги программ.
Корень рабочего каталога системы задаётся при компиляции системы
\S{ejudge} с помощью опции \verb|--enable-contests-home-dir|
скрипта \S{configure}. Рекомендуемое значение этой опции ---
\verb|/home/judges|. В дальнейшем значение рабочего каталога
системы будет обозначаться \verb|${home}|.

\begin{itemize}
\item \verb|${home}/data|. Каталог конфигурационных файлов и
базы пользователей. Содержит один файл и два подкаталога:
\begin{itemize}
\item {\raggedright\verb|${home}/data/ejudge.xml|. Глобальный конфигурационный
файл \hyperlink{F:ejudge.xml}{\V{ejudge.xml}}. Содержит глобальные
настройки системы \S{ejudge}.\par}
\item \verb|${home}/data/contests|. Каталог с конфигурационными
файлами турниров в формате XML \hyperlink{F:contest.xml}{\V{contest.xml}}.
Файлы называются \V{000001.xml}, \V{000002.xml} и. т. д.
по номеру турнира.
\begin{itemize}
\item \verb|${home}/data/contests/|$N$\verb|.xml|.
\hyperlink{F:contest.xml}{Конфигурационный файл} турнира с номером $N$.
\end{itemize}
\item \verb|${home}/data/db|. Каталог с файлом базы пользователей
и архивными копиями базы.
\begin{itemize}
\item \verb|${home}/data/db/userlist.xml|. Файл базы пользователей.
\item \verb|${home}/data/db/userlist.xml.|$D$. Архивная копия файла
базы пользователей. $D$ --- это дата, когда была сделана архивная копия.
Программа \hyperlink{P:userlist-server}{\S{userlist-server}}
создаёт архивные копии раз в сутки.
\end{itemize}
\end{itemize}
\item \verb|${home}/compile|. Каталог сервера компиляции
\hyperlink{P:compile}{\S{compile}}. Здесь находится конфигурационный
файл и рабочие каталоги программы.
\begin{itemize}
\item \verb|${home}/compile/conf|. Каталог конфигурационного файла.
\begin{itemize}
\item \verb|${home}/compile/conf/compile.cfg|.
Конфигурационный файл программы \hyperlink{P:compile}{\S{compile}}.
\end{itemize}
\item \verb|${home}/compile/var|.
Рабочие каталоги программы \hyperlink{P:compile}{\S{compile}}.
\end{itemize}
\item \verb|${home}/var|.
В этом каталоге хранятся файлы журналов программ
\hyperlink{P:userlist-server}{\S{userlist-server}},
\hyperlink{P:job-server}{\S{job-server}}, рабочие каталог и
каталог обмена программы \hyperlink{P:job-server}{\S{job-server}}.
\begin{itemize}
\item \verb|${home}/var/userlist.log|.
Файл журнала программы \S{userlist-server}.
\item \verb|${home}/var/job_server.log|.
Файл журнала программы \S{job-server}.
\item \verb|${home}/var/jspool|.
Каталог обмена программы \S{job-server}.
\item \verb|${home}/var/jwork|.
Рабочий каталог программы \S{job-server}.
\end{itemize}
\item \verb|${home}/work-img|.
Файл образа виртуального диска, который используется для
ограничения доступного дискового пространства для работающих программ.
\item \verb|${home}/work-disk|.
Точка монтирования виртуального диска.
В этом каталоге располагается рабочий каталог программ, запускаемых
на выполнение.
\item \verb|${home}/|$N$.
Домашний каталог турнира. Здесь $N$ --- это номер (идентификатор) турнира,
записываемый шестью цифрами с ведущими нулями, то есть
\verb|000001|, \verb|000002|, \verb|000003| и т. д.
В домашнем каталоге турнира размещаются конфигурационные файлы турнира,
каталог тестов и проверяющих программ, рабочий каталог сервера турнира.
Подробно структура домашнего каталога турнира описывается
в соответствующем разделе.
\end{itemize}

\chapter{Конфигурационные файлы}

В данном разделе описываются конфигурационные файлы системы.

\section{Полномочия пользователей}
\label{sectionCapabilities}
\hypertarget{S:capabilities}{}

Система \S{ejudge} поддерживает тонкую настройку прав выполнения
всех привилегированных операций для пользователей системы.
К привилегированным операциям относятся операции управления турниром
(запуск, останов, просмотр и изменения результатов проверки программы
и пр.) и операции управления базой данных пользователей.
Настройка осуществляется с помощью указаний полномочий пользователя
для выполнения операций над базой пользователей и полномочий
пользователя для выполнения операций над каждым из созданных в системе
турниров.

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

Все привилегии системы \S{ejudge} перечислены ниже.

\setlongtables
\noindent
\begin{longtable}{|>{\ttfamily\small}l|>{\small}l|>{\small}c|>{\small}p{8.5cm}|}
\hline
\rmfamily\normalsize Название & Бит & Где & Описание\\
\hline
\endhead

\hline
\multicolumn{4}{|r|}%
{\small\itshape Продолжение на следующей странице}\\
\hline
\endfoot

\hline
\endlastfoot

MASTER\_LOGIN             & 0  & CU  & {\raggedright
  (C) Пользователь может использовать CGI-программу
  \hyperlink{P:master}{\S{master}}.
  (U) Пользователь может использовать CGI-программу
  \hyperlink{P:serve-control}{\S{serve-control}}.\par}\\
JUDGE\_LOGIN              & 1  & CU  & {\raggedright
  (C) Пользователь может использовать CGI-программу
  \hyperlink{P:judge}{\S{judge}}.
  (U) Пользователь может использовать CGI-программу
  \hyperlink{P:serve-control}{\S{serve-control}}.\par}\\
SUBMIT\_RUN               & 2  & C  &
  Пользователь может посылать решения, пользуясь
  привилегированными CGI-программами
  \hyperlink{P:master}{\S{master}} или
  \hyperlink{P:judge}{\S{judge}}.\\
MAP\_CONTEST              & 3  & C  &
  Пользователь может запускать сервер турнира
  программу \hyperlink{P:serve}{\S{serve}}.\\
LIST\_CONTEST\_USERS      & 4  & C  &
  Пользователь может просматривать список пользователей,
  зарегистрировавшихся на турнир.\\
LIST\_ALL\_USERS          & 5  & U  &
  Пользователь может просматривать список всех пользователей
  в базе пользователей.\\
CREATE\_USER              & 6  & U  &
  Пользователь может создавать новых пользователей.\\
GET\_USER                 & 7  & CU &
  Пользователь может получать информацию
  о другом непривилегированном пользователе.\\
EDIT\_USER                & 8  & CU &
  Пользователь может редактировать информацию
  о другом непривилегированном пользователе.\\
DELETE\_USER              & 9  & U  &
  Пользователь может удалять другого непривилегированного пользователя
  из базы пользователей.\\
PRIV\_EDIT\_USER          & 10 & CU &
  Пользователь может редактировать другого информацию о
  другом привилегированном пользователе.\\
PRIV\_DELETE\_USER        & 11 & U  &
  Пользователь может удалять другого привилегированного пользователя
  из базы пользователей.\\
GENERATE\_TEAM\_PASSWORDS & 12 & C  &
  Пользователь может генерировать пароли для CGI-программы
  \hyperlink{P:team}{\S{team}} для всех других непривилегированных
  пользователей, зарегистрировавшихся на данный турнир.\\
CREATE\_REG               & 13 & C  &
  Пользователь может регистрировать других непривилегированных
  пользователей для участия в турнире.\\
EDIT\_REG                 & 14 & C  &
  Пользователь может редактировать статус регистрации других
  пользователей в турнире.\\
DELETE\_REG               & 15 & C  &
  Пользователь может удалять регистрацию других непривилегированных
  пользователей в турнире.\\
PRIV\_CREATE\_REG         & 16 & C  &
  Пользователь может регистрировать других привилегированных
  пользователей для участия в турнире.\\
PRIV\_DELETE\_REG         & 17 & C  &
  Пользователь может удалять регистрацию других привилегированных
  пользователей в турнире.\\
DUMP\_USERS               & 18 & CU &
  Пользователь может получать базу пользователей в CSV-формате.\\
DUMP\_RUNS                & 19 & C  &
  Пользователь может получать базу попыток сдачи в CSV-формате.\\
DUMP\_STANDINGS           & 20 & C  &
  Пользователь может получать результаты турнира в CSV-формате.\\
VIEW\_STANDINGS           & 21 & C  &
  Пользователь может просматривать судейскую таблицу результатов,
  которая никогда не замораживается.\\
VIEW\_SOURCE              & 22 & C  &
  Пользователь может просматривать исходный код попыток сдачи
  программ участников.\\
VIEW\_REPORT              & 23 & C  &
  Пользователь может просматривать отчёт о тестировании программ
  участников.\\
VIEW\_CLAR                & 24 & C  &
  Пользователь может просматривать вопросы к судьям от участников
  и ответы судей.\\
EDIT\_RUN                 & 25 & C  &
  Пользователь может произвольным образом изменять информацию
  о попытке участника.\\
REJUDGE\_RUN              & 26 & C  &
  Пользователь может отправить попытку участника на перетестирование.\\
NEW\_MESSAGE              & 27 & C  &
  Пользователь может послать сообщение произвольному участнику.\\
REPLY\_MESSAGE            & 28 & C  &
  Пользователь может ответить на сообщение от участника.\\
CONTROL\_CONTEST          & 29 & C  &
  Пользователь может управлять турниром (стартовать, останавливать и т. д.).\\
IMPORT\_XML\_RUNS         & 30 & C  &
  Пользователь может импортировать таблицу посылок турнира в
  XML-формате.\\
PRINT\_RUN                & 31 & C  &
  Пользователь может распечатывать на принтере текст программы
  из-под привилегированных программ \S{master} или \S{judge}.\\
EDIT\_CONTEST             & 32 & CU &
  (C) Пользователь может редактировать настройки турнира
  с помощью программы \hyperlink{P:serve-control}{\S{serve-control}}.
  (U) Пользователь может создавать новые турниры
  с помощью программы \hyperlink{P:serve-control}{\S{serve-control}}.\\
\hline
\end{longtable}
%\caption{Все полномочия системы ejudge}
%\label{tableCapabilityBits}

\V{U} в колонке <<где>> обозначает, что данный бит полномочий
может использоваться в глобальном конфигурационном
файле \hyperlink{F:ejudge.xml}{\V{ejudge.xml}},
\V{C} обозначает, что данный бит полномочий может использоваться
в конфигурационном файле турнира
\hyperlink{F:contest.xml}{\V{contest.xml}}.

Полномочия пользователей для базы данных пользователей
и управления турнирами
задаются в общем конфигурационном файле
\hyperlink{F:ejudge.xml}{\V{ejudge.xml}}
с помощью элемента
\hyperlink{F:ejudge.xml,T:cap}{\V{cap}}. В этом элементе
через запятую перечисляются полномочия указанного пользователя.
Пробельные символы игнорируются. Например:

{\small
\begin{verbatim}
<cap login="vasya">
  LIST_ALL_USERS,
  GET_USER,
</cap>
\end{verbatim}
}

Текст в элементе \V{cap} может быть пустым, тогда множество
полномочий пользователя пусто, но такой пользователь будет считаться
привилегированным пользователем. Например:

{\small
\begin{verbatim}
<cap login="petya"/>
\end{verbatim}
}

Полномочия пользователя по отношению к турниру задаются
в конфигурационном файле турнира
\hyperlink{F:contest.xml}{\V{contest.xml}}
с помощью элемента
\hyperlink{F:contest.xml}{\V{cap}}. В элементе через запятую
перечисляются полномочия указанного пользователя. Пустое
множество полномочий для турнира допускается, но не имеет смысла.

\section{Ограничение доступа по IP-адресам}
\hypertarget{F:all,IPAddressLimitations}{}
\label{sectionIPAddressLimitation}

Система \S{ejudge} включает в себя несколько программ:
\hyperlink{P:register}{\S{register}},
\hyperlink{P:users}{\S{users}},
\hyperlink{P:master}{\S{master}},
\hyperlink{P:judge}{\S{judge}},
\hyperlink{P:team}{\S{team}},
\hyperlink{P:serve-control}{\S{serve-control}}~---
запускаемых как CGI-программы.
Каждая из этих программ позволяет ограничивать диапазон IP-адресов
клиента, которым разрешается использование CGI-программы. В текущей
версии системы ограничение диапазонов возможно только с помощью
указания IPv4-адресов клиентов. Ни DNS-имена, ни IP протокол версии 6
в текущей версии не поддерживаются.

Кроме того, каждый турнир может накладывать дополнительные ограничения
на допустимые IP-адреса для всех CGI-программ. Эти ограничения
указываются в конфигурационном файле турнира
\hyperlink{F:contest.xml}{\V{contest.xml}}.

Спецификация ограничения адреса может либо задавать конкретный IP-адрес,
либо задавать адрес сети классов A, B или C. Задание подсетей в
сетях этих классов в настоящее время не поддерживается. Допустимые
спецификации ограничения IP-адреса перечислены в таблице
\ref{tableIPAddressSpecification}.

\begin{table}
\hypertarget{F:all,IPAddressSpecification}{}
\begin{center}
\begin{tabular}{|l|p{13cm}|}
\hline
\V{A.B.C.D} & Здесь \V{A}, \V{B}, \V{C} и \V{D} --- десятичные числа
от 0 до 255. В этом случае задаётся один IP-адрес.\\
\V{A.B.C.}  & \V{A}, \V{B} и \V{C} --- десятичные числа от 0 до 255.
В этом случае задаётся IP-адрес сети класса C. Обратите внимание
на заключительную точку в записи шаблона. \\
\V{A.B.}  & \V{A} и \V{B} --- десятичные числа от 0 до 255.
В этом случае задаётся IP-адрес сети класса B. Обратите внимание
на заключительную точку в записи шаблона. \\
\V{A.}    & \V{A} --- десятичное число от 0 до 255.
В этом случае задаётся IP-адрес сети класса A. Обратите внимание
на заключительную точку в записи шаблона.\\
\V{0}     & Произвольный IP-адрес.\\
\hline
\end{tabular}
\end{center}
\caption{Допустимые спецификации ограничения IP-адреса}
\label{tableIPAddressSpecification}
\end{table}

Синтаксис задания IP-ограничений отличается для CGI-программ, использующих
конфигурационные файлы в формате XML
(\hyperlink{P:register}{\S{register}},
\hyperlink{P:users}{\S{users}},
\hyperlink{P:serve-control}{\S{serve-control}}),
и для CGI-программ, использующих традиционные текстовые файлы
(\hyperlink{P:master}{\S{master}},
\hyperlink{P:judge}{\S{judge}},
\hyperlink{P:team}{\S{team}}). Далее рассматриваются оба варианта.
В конфигурационном файле турнира
\hyperlink{F:contest.xml}{\V{contest.xml}}
ограничения задаются в формате XML.

\subsection{Ограничения IP-адресов в формате XML}
\hypertarget{F:all,IPLimitationsXML}{}

Спецификация ограничений на IP-адрес представляет собой список
спецификаций IP-адресов, для каждого из которых указано, допустимо ли
использование CGI-программы клиентом с IP-адресом, удовлетворяющим
спецификации, или нет. Кроме этого может задаваться флаг,
определяющий, используется ли безопасное соединение по протоколу
HTTPS. Элементы списка задаются элементом
\hyperlink{F:all,T:ip}{\V{ip}} XML-файла.
Описание этого элемента дано ниже.

{\raggedright
Для конфигурационных файлов программ
(\hyperlink{P:register}{\S{register}},\hyperlink{P:users}{\S{users}},
\hyperlink{P:serve-control}{\S{serve-control}}),
элементы списка находятся в элементе \V{access}
(см. описание элемента
\hyperlink{F:register.xml,T:access}{\V{access}} конфигурационного
файла \hyperlink{F:register.xml}{\V{register.xml}},
описание элемента 
\hyperlink{F:users.xml,T:access}{\V{access}} конфигурационного
файла \hyperlink{F:users.xml}{\V{users.xml}} и
описание элемента 
\hyperlink{F:serve-control.xml,T:access}{\V{access}} конфигурационного
файла \hyperlink{F:serve-control.xml}{\V{serve-control.xml}}).
Для конфигурационного файла турнира
\hyperlink{F:contest.xml}{\V{contest.xml}} используются элементы
\hyperlink{F:contest.xml,T:register_access}{\V{register\_access}},
\hyperlink{F:contest.xml,T:users_access}{\V{users\_access}},
\hyperlink{F:contest.xml,T:master_access}{\V{master\_access}},
\hyperlink{F:contest.xml,T:judge_access}{\V{judge\_access}},
\hyperlink{F:contest.xml,T:team_access}{\V{team\_access}},
\hyperlink{F:contest.xml,T:serve_control_access}{\V{serve\_control\_access}},
задающие дополнительные ограничения на допустимые IP-адреса
для программ
\hyperlink{P:register}{\S{register}},
\hyperlink{P:users}{\S{users}},
\hyperlink{P:master}{\S{master}},
\hyperlink{P:judge}{\S{judge}} и
\hyperlink{P:team}{\S{team}}
\hyperlink{P:serve-control}{\S{serve-control}} соответственно.
Далее даётся описание
XML-элемента \hyperlink{F:all,T:access}{\V{access}},
справедливое для всех вышеперечисленных элементов.

}

При работе CGI-программы список ограничений просматривается последовательно
от первого элемента к последнему. Как только будет найдена первая
спецификация, которой удовлетворяет IP-адрес клиента, дальнейший
просмотр прекращается и выполняется действие, указанное в этой спецификации.
Если IP-адрес клиента не удовлетворяет ни одной спецификации,
выполняется действие по умолчанию, заданное в элементе
верхнего уровня.

\newpage
\subsection{Элемент \V{access}}
\hypertarget{F:all,T:access}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{access} \\
Может содержать:     & \strut\hyperlink{F:all,T:ip}{\V{ip}}\\
Атрибуты:            &
  \strut\hyperlink{F:all,T:access,A:default}{\V{default}}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

\B{Описание.} Данный элемент является элементом верхнего уровня списка
ограничений IP-адресов для CGI-программ.

\subsubsection{Атрибут \V{default}}
\hypertarget{F:all,T:access,A:default}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{default} \\
Содержится в:          & \strut\hyperlink{F:all,T:access}{\V{access}} \\
Тип значения:          & \I{allow} или \I{deny} \\
Значение по умолчанию: & \I{deny} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Данный атрибут задаёт права доступа в случае, если
IP-адрес клиента не перечислен в списке IP-адресов. Если
атрибут установлен в \I{allow}, такие IP-адреса считаются допустимыми,
а если атрибут установлен в \I{deny}, доступ с таких IP-адресов
запрещается.

\subsection{Элемент \V{ip}}
\hypertarget{F:all,T:ip}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{ip} \\
Содержится в:        & \strut\hyperlink{F:all,T:access}{\V{access}}\\
Может содержать:     & \I{нет} \\
Атрибуты:            & \strut\hyperlink{F:all,T:ip,A:allow}{\V{allow}},
                       \strut\hyperlink{F:all,T:ip,A:ssl}{\V{ssl}}\\
Тип содержимого:     &
  \strut\hyperlink{F:all,IPAddressSpecification}{шаблон IP-адреса}
  (см. табл. \ref{tableIPAddressSpecification})\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{да}\\
\end{tabular}

\B{Описание.} Данный элемент определяет права доступа для клиентов с
заданным шаблоном IP-адреса. Если атрибут \V{allow} установлен
в \I{true}, таким клиентам разрешается работа с
соответствующей CGI-программой. В противном случае доступ
запрещается. Если атрибут \V{ssl} установлен в значение \V{yes},
то данное правило применяется только к соединениям по протоколу
HTTPS, если атрибут \V{ssl} установлен в значение \V{no},
то данное правило применяется только к соединениям по протоколу
HTTP, если атрибут \V{ssl} не указан, то правило применяется
вне зависимости от типа соединения.

\subsubsection{Атрибут \V{allow}}
\hypertarget{F:all,T:ip,A:allow}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{allow} \\
Содержится в:          & \strut\hyperlink{F:all,T:access}{\V{access}} \\
Тип значения:          & \I{boolean} \\
Значение по умолчанию: & \I{false} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Данный атрибут задаёт права доступа в случае, если
IP-адрес клиента удовлетворяет спецификации IP-адреса в данном
элементе. Если значение атрибута равно
\I{true}, такой IP-адрес считаются допустимым,
а если значение атрибут установлено в \I{false}, доступ с этого IP-адреса
запрещается.

\subsubsection{Атрибут \V{ssl}}
\hypertarget{F:all,T:ip,A:ssl}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{ssl} \\
Содержится в:          & \strut\hyperlink{F:all,T:access}{\V{access}} \\
Тип значения:          & может принимать значения \V{yes}, \V{no} и \V{any} \\
Значение по умолчанию: & \I{any} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Данный атрибут задаёт тип соединения, к которому
применимо данное правило. Если значение атрибута равно \V{yes},
то данное правило применимо только к соединениям по протоколу
HTTPS, если значение атрибута равно \V{no}, то данное правило
применимо только к соединениям по протоколу HTTP.
Если значение атрибута равно \V{any}, или атрибут отсутствует,
то данное правило применимо к соединениям и по протоколу HTTP,
и по протоколу HTTPS.

\subsection{Пример использования элемента \V{access}}

{\small
\begin{verbatim}
<access default="deny">
  <ip allow="yes">127.</ip>
  <ip allow="no">192.168.0.14</ip>
  <ip allow="yes">192.168.0.</ip>
  <ip allow="yes" ssl="yes">0</ip>
</access>
\end{verbatim}
}

Данная спецификация ограничений IP-адресов задаёт, что клиентам,
находящимся в сети класса A с адресом \V{127.} (то есть, соединениям,
устанавливаемым с того же компьютера, на котором работает WEB-сервер
и CGI-программы) доступ открыт. Всем клиентам, находящимся в сети
класса C с адресом \V{192.168.0} (то есть всем клиентам, имеющим
IP-адрес в диапазоне \V{192.168.0.1}---\V{192.168.0.254}),
за исключением клиента с IP-адресом \V{192.168.0.14} доступ также открыт.
По протоколу HTTPS доступ открыт с любого адреса.
Всем прочим клиентам доступ закрыт.

\subsection{Ограничения IP-адресов в текстовом формате}
\hypertarget{F:all.cfg,T:allow_deny}{}
\label{sectionCFGIPLimitations}

Текстовый формат конфигурационного файла используется в текущей версии
системы для CGI-программ \hypertarget{P:master}{\S{master}},
\hypertarget{P:judge}{\S{judge}} и
\hypertarget{P:team}{\S{team}}. Для задания ограничений на допустимые
IP-адреса используются параметры конфигурационного файла
\V{allow\_from}, \V{deny\_from} и \V{allow\_deny}.

Значениями параметров \V{allow\_from} и \V{deny\_from} является
текстовая строка, в которой перечислены
\hyperlink{F:all,IPAddressSpecification}{спецификации IP-адресов}
(см. табл. \ref{tableIPAddressSpecification}), разделённые пробелами.
Параметр \V{allow\_deny} принимает булевское значение. Значение
\I{false} устанавливается по умолчанию (то есть если этот параметр не
задан), либо может быть указано явно константой \V{0}. Значение
\I{true} устанавливается, либо если в конфигурационном файле
присутствует только имя параметра без указания значения, либо при
явном указании значения \V{1}.

Параметр \V{allow\_deny} определяет порядок просмотра IP-адресов,
заданных в параметрах \V{allow\_from} и \V{deny\_from}.
\begin{itemize}
\item
Если параметр \V{allow\_deny} установлен в \I{false}, включается режим
<<недоступный по умолчанию>>. В этом случае IP-адрес клиента сначала
сопоставляется с IP-спецификациями, перечисленными в параметре
\V{deny\_from}. Если какая-либо из IP-спецификаций сопоставляется
успешно, доступ этому клиенту запрещается. Если IP-адрес не
удовлетворяет ни одной из спецификаций параметра \V{deny\_from},
IP-адрес клиента сопоставляется с IP-спецификациями, перечисленными в
параметре \V{allow\_from}. Если какая-либо из IP-спецификаций
сопоставляется успешно, клиенту доступ предоставляется. Если IP-адрес
не удовлетворяет ни одной из спецификаций параметра \V{allow\_from},
доступ этому клиенту запрещается.
\item
Если параметр \V{allow\_deny} установлен в \I{true}, включается режим
<<доступный по умолчанию>>.
В этом случае IP-адрес клиента сначала
сопоставляется с IP-спецификациями, перечисленными в параметре
\V{allow\_from}. Если какая-либо из IP-спецификаций сопоставляется
успешно, доступ этому клиенту предоставляется. Если IP-адрес не
удовлетворяет ни одной из спецификаций параметра \V{allow\_from},
IP-адрес клиента сопоставляется с IP-спецификациями, перечисленными в
параметре \V{deny\_from}. Если какая-либо из IP-спецификаций
сопоставляется успешно, доступ клиенту запрещается. Если IP-адрес
не удовлетворяет ни одной из спецификаций параметра \V{deny\_from},
доступ этому клиенту предоставляется.
\end{itemize}

В примере
{\small
\begin{verbatim}
allow_deny
\end{verbatim}
}
доступ открывается клиентам со всех адресов.

В примере
{\small
\begin{verbatim}
allow_deny = 1
allow_from = "192.168.0.1 192.168.1."
deny_from = "192.168."
\end{verbatim}
}
доступ открывается клиентом со всех адресов, IP-адреса которых
не начинаются с \V{192.168}. Из клиентов с IP-адресами,
начинающимися с \V{192.168} допускаются лишь клиенты с IP-адресом,
начинающимся на \V{192.168.1} и клиенты с IP-адресом \V{192.168.0.1}.

В примере
{\small
\begin{verbatim}
allow_deny = 0
allow_from = "127. 192.168.0.1 192.168.1."
\end{verbatim}
}
доступ закрывается всем, кроме клиентов с IP-адресом, начинающихся с
\V{127} (то есть для локально устанавливаемых соединений), клиентом с
IP-адресом, начинающимся с \V{192.168.1} и клиентов с IP-адресом
\V{192.168.0.1}.

\section{Локализация системы}
\hypertarget{F:all.cfg,localization}{}
\label{sectionLocalization}

Система \S{ejudge} поддерживает настройку языка
пользовательского интерфейса, хотя текущая версия системы
обладает рядом недостатков.

Переключения языка пользовательского интерфейса выполняется
через стандартный механизм трансляции сообщений \V{gettext}. В
настоящее время система поддерживает только два языковых
окружения --- \V{C} (окружение по умолчанию для программ на Си) и
\V{ru\_RU.KOI8-R} (русский язык в кодировке koi-r), которые имеют
идентификаторы 0 и 1 соответственно. Для того, чтобы добавить
новое языковое окружение, необходимо модифицировать исходный
файл \V{l10n.c}. Переведённые тексты сообщений находятся в
файлах \V{ejudge.\I{LOCALE}.po}, где \V{\I{LOCALE}} --- имя
языкового окружения.

Если при компиляции системы \S{ejudge} скрипт
\hyperlink{P:configure}{\S{configure}} обнаружил в системе
все необходимые библиотеки и программы, поддержка языкового
окружения включается автоматически. В этом случае нет необходимости
в ручной правке конфигурационных файлов. Однако, если необходимо
отключить поддержку языкового окружения нужно воспользоваться
опцией \verb|--disable-nls| скрипта
\hyperlink{P:configure}{\S{configure}}.

Поэтому дальнейшие подразделы представляют интерес только в случае,
если требуется вручную изменить настройки поддержки языкового
окружения.

\subsection{Включение поддержки языкового окружения}
\label{sectionL10nSupport}

{\small
Чтобы включить поддержку языкового окружения, необходимо
установить конфигурационный параметр в файлах настройки
утилит. Для конфигурационных файлов в формате XML
(\hyperlink{F:ejudge.xml}{\V{ejudge.xml}}
\hyperlink{F:register.xml}{\V{register.xml}},
\hyperlink{F:users.xml}{\V{users.xml}}) это атрибут \V{l10n}
элемента верхнего уровня конфигурационного файла. Например, для
конфигурационного файла \V{ejudge.xml} установка атрибута
локализации сообщений может выглядеть следующим образом:
{\small
\begin{verbatim}
<?xml version="1.0" encoding="koi8-r"?>
<config l10n="yes">
  <!-- прочие элементы -->
</config>
\end{verbatim}
}
Для конфигурационных файлов в текстовом формате
(\hyperlink{F:serve.cfg}{\V{serve.cfg}},
\hyperlink{F:master.cfg}{\V{master.cfg}},
\hyperlink{F:judge.cfg}{\V{judge.cfg}},
\hyperlink{F:team.cfg}{\V{team.cfg}})
это параметр
\V{enable\_l10n}, который необходимо установить. Для любого
конфигурационного установка атрибута локализации может выглядеть
следующим образом:
{\small
\begin{verbatim}
enable_l10n
\end{verbatim}
}

\subsection{Установка каталога сообщений}

Чтобы система \S{ejudge} смогла использовать переводы сообщений,
в конфигурационных файлах утилит необходимо указать каталог
сообщений (message catalog), в котором находятся файлы c
переведёнными сообщениями. По умолчанию после выполнения команды
\V{make install} каталоги сообщений помещаются в каталог,
определяемой переменной \V{INST\_LOCALE\_PATH} в
\V{makefile}. Именно этот каталог должен быть указан в
конфигурационных файлах. Для конфигурационных файлов в формате
XML
(\hyperlink{F:ejudge.xml}{\V{ejudge.xml}}
\hyperlink{F:register.xml}{\V{register.xml}},
\hyperlink{F:users.xml}{\V{users.xml}})
каталог сообщений устанавливается с помощью элемента
\V{l10n\_dir}, например, следующим образом:
{\small
\begin{verbatim}
  <l10n_dir>/usr/share/locale</l10n_dir>
\end{verbatim}
}

Для конфигурационных файлов в текстовом формате
(\hyperlink{F:serve.cfg}{\V{serve.cfg}},
\hyperlink{F:master.cfg}{\V{master.cfg}},
\hyperlink{F:judge.cfg}{\V{judge.cfg}},
\hyperlink{F:team.cfg}{\V{team.cfg}})
каталог сообщений устанавливается с помощью параметра \V{l10n\_dir},
например, следующим образом:
{\small
\begin{verbatim}
l10n_dir = "/usr/share/locale"
\end{verbatim}
}
}

\section{Поддержка кодировок символов}
\label{sectionCharsetSupport}

Система \S{ejudge} не привязана к какой-либо конкретной кодировке
символов, а может работать с произвольной однобайтовой кодировкой, которая
поддерживается функцией \V{iconv} стандартной библиотеки языка Си.
Ограничение на то, что кодировка должна быть однобайтовой накладывается тем,
что для работы со строками используются функции стандартной
библиотеки предполагающие, что строка оканчивается нулевым байтом.
К однобайтовым здесь отнесена и кодировка \V{utf-8} в которой один
символ может кодироваться группой подряд расположенных байтов.
Другие примеры однобайтных кодировок: \V{koi8-r}, \V{windows-1251},
\V{cp866}, \V{iso8859-1}. При работе с кодировкой \V{utf-8} возможны
неожиданные визуальные эффекты из-за обрезания строк.

Кодировка, используемая для хранения строк в памяти программ
системы \S{ejudge}, далее называется \I{внутренней кодировкой}.
Это может быть произвольная однобайтовая кодировка, поддерживаемая
функцией \V{iconv} стандартной библиотеки.
Внутренняя кодировка задаётся с помощью опции \verb|--enable-charset|
программы \hyperlink{P:configure}{\S{configure}}
при компиляции системы. Если внутренняя кодировка с помощью этой
опции не задана, в качестве внутренней кодировки используется
\V{iso8859-1}.

При запуске внешних программ (например, программ участников на
тестирование, или проверяющих программ, или скриптов компиляции)
взаимодействие с ними ведётся во внутренней кодировке \S{ejudge}.
Другими словами, текст из памяти копируется на вход внешних программ
без изменений и наоборот, вывод внешних программ считывается в
память тоже без изменений.

Генерация HTML страниц также ведётся во внутренней кодировке.
Несмотря на то, что в конфигурационных файлах присутствует
параметр \V{charset}, позволяющий менять заголовок HTML-страниц,
перекодирование текста сообщения из внутренней кодировки в кодировку
HTML-страницы не происходит.

Кроме того, если включена поддержка локализованных сообщений,
при переключении в русское языковое окружение автоматически
включается локализация \verb|ru_RU.KOI8-R|, то есть все тексты сообщений
окажутся в кодировке \V{koi8-r}.

Тем не менее, в некоторых случаях можно указывать кодировки файлов,
отличные от внутренней кодировки системы \S{ejudge}. Эти случаи
рассмотрены далее.

\subsection{Кодировка конфигурационных файлов}

Кодировка конфигурационных файлов в формате XML
(\hyperlink{F:ejudge.xml}{\V{ejudge.xml}}
\hyperlink{F:register.xml}{\V{register.xml}},
\hyperlink{F:users.xml}{\V{users.xml}},
\hyperlink{F:contest.xml}{\V{contest.xml}},
\hyperlink{F:userlist.xml}{\V{userlist.xml}},
\hyperlink{F:serve-control.xml}{\V{serve-control.xml}})
задаётся непосредственно в заголовке соответствующего файла,
например,
{\small
\begin{verbatim}
<?xml version="1.0" encoding="koi8-r"?>
\end{verbatim}
}
Как уже было сказано выше, поддерживаются любые однобайтовые
кодировки, поддерживаемые функцией \V{iconv} стандартной библиотеки
языка Си.

Кодировка конфигурационных файлов в текстовом формате
(\hyperlink{F:serve.cfg}{\V{serve.cfg}},
\hyperlink{F:master.cfg}{\V{master.cfg}},
\hyperlink{F:judge.cfg}{\V{judge.cfg}},
\hyperlink{F:team.cfg}{\V{team.cfg}})
в настоящее время не может быть задана явно, и всегда
подразумевается внутренняя кодировка.

\subsection{Кодировка генерируемых файлов}

Текст всех HTML-страниц генерируется во внутренней кодировке
системы \S{ejudge}. В конфигурационных файлах существует
параметр \V{charset}, который позволяет изменять кодировку
генерируемых файлов, однако в текущей версии этот параметр
влияет только на генерируемый заголовок HTML-страницы
(поле \V{Content-type:}), а не
на содержимое страницы. Поэтому использование
этих параметров \B{не рекомендуется}.

%Исключением в этой ситуации является таблица текущих
%результатов турнира. Кодировка этой html-страницы может быть
%задана явно с помощью параметра
%\hyperlink{F:serve.cfg,T:standings_charset}{\V{standings\_charset}}
%конфигурационного файла
%\hyperlink{F:serve.cfg}{\V{serve.cfg}}.
%Если эта кодировка
%отличается от кодировки koi8-r, будет выполнено необходимое преобразование.

{\raggedright
Для конфигурационных файлов утилит в формате XML
(\hyperlink{F:register.xml}{\V{register.xml}},
\hyperlink{F:users.xml}{\V{users.xml}},
\hyperlink{F:serve-control.xml}{\V{serve-control.xml}})
кодировка генерируемой страницы указывается с помощью атрибута
\V{charset} элемента верхнего уровня. Например, в конфигурационном
файле \V{register.xml} кодировка может быть задана следующим
образом:
{\small
\begin{verbatim}
<?xml version="1.0" encoding="koi8-r"?>
<register_config
  charset = "KOI8-R"
  <!-- прочие атрибуты -->
>
  <!-- прочие элементы -->
</register_config>
\end{verbatim}
}

}

Для конфигурационных файлов утилит в текстовом формате
(\hyperlink{F:serve.cfg}{\V{serve.cfg}},
\hyperlink{F:master.cfg}{\V{master.cfg}},
\hyperlink{F:judge.cfg}{\V{judge.cfg}},
\hyperlink{F:team.cfg}{\V{team.cfg}})
кодировка генерируемых html-страниц указывается с помощью
параметра \V{charset}, например, следующим образом:
{\small
\begin{verbatim}
charset = "koi8-r"
\end{verbatim}
}

\section{Общий конфигурационный файл \V{ejudge.xml}}
\hypertarget{F:ejudge.xml}{}

Данный конфигурационный файл, который далее в тексте этого документа
будет называться \V{ejudge.xml}, содержит настройки утилит командной
строки, как непосредственно работающих с базой данных, так и являющихся
клиентами сервера пользователей. Файл используется утилитами
\hyperlink{P:clean-users}{\S{clean-users}},
\hyperlink{P:collect-emails}{\S{collect-emails}},
\hyperlink{P:edit-userlist}{\S{edit-userlist}},
\hyperlink{P:job-server}{\S{job-server}},
\hyperlink{P:job-server-cmd}{\S{job-server-cmd}},
\hyperlink{P:serve-cmd}{\S{serve-cmd}},
\hyperlink{P:super-serve}{\S{super-serve}},
\hyperlink{P:slice-userlist}{\S{slice-userlist}},
\hyperlink{P:userlist-server}{\S{userlist-server}}.

\newpage
\subsection{Общая структура}

Конфигурационный файл должен быть корректным XML-файлом. Он должен состоять
из единственного элемента первого уровня \V{config}. Иерархия элементов
приведена на схеме ниже.

\begin{tabbing}
\hspace{1cm}\=\hspace{1cm}\=\kill
\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
\>\hyperlink{F:ejudge.xml,T:caps}{\V{caps}}\\
\>\>\hyperlink{F:ejudge.xml,T:cap}{\V{cap}}\\
\>\hyperlink{F:ejudge.xml,T:charset}{\V{charset}} (*)\\
\>\hyperlink{F:ejudge.xml,T:compile_home_dir}{\V{compile\_home\_dir}} (**)\\
\>\hyperlink{F:ejudge.xml,T:compile_log}{\V{compile\_log}} (**)\\
\>\hyperlink{F:ejudge.xml,T:config_dir}{\V{config\_dir}} (*)\\
\>\hyperlink{F:ejudge.xml,T:contests_dir}{\V{contests\_dir}} (*)\\
\>\hyperlink{F:ejudge.xml,T:contests_home_dir}{\V{contests\_home\_dir}} (*)\\
\>\hyperlink{F:ejudge.xml,T:email_program}{\V{email\_program}} (**)\\
\>\hyperlink{F:ejudge.xml,T:full_cgi_data_dir}{\V{full\_cgi\_data\_dir}} (**)\\
\>\hyperlink{F:ejudge.xml,T:job_server_log}{\V{job\_server\_log}} (**)\\
\>\hyperlink{F:ejudge.xml,T:job_server_spool}{\V{job\_server\_spool}} (**)\\
\>\hyperlink{F:ejudge.xml,T:job_server_work}{\V{job\_server\_work}} (**)\\
\>\hyperlink{F:ejudge.xml,T:l10n_dir}{\V{l10n\_dir}} (*)\\
\>\hyperlink{F:ejudge.xml,T:register_email}{\V{register\_email}}\\
\>\hyperlink{F:ejudge.xml,T:register_url}{\V{register\_url}}\\
\>\hyperlink{F:ejudge.xml,T:run_path}{\V{run\_path}} (*)\\
\>\hyperlink{F:ejudge.xml,T:script_dir}{\V{script\_dir}} (*)\\
\>\hyperlink{F:ejudge.xml,T:serialization_key}{\V{serialization\_key}} (**)\\
\>\hyperlink{F:ejudge.xml,T:serve_path}{\V{serve\_path}} (*)\\
\>\hyperlink{F:ejudge.xml,T:socket_path}{\V{socket\_path}} (*)\\
\>\hyperlink{F:ejudge.xml,T:super_serve_log}{\V{super\_serve\_log}} (**)\\
\>\hyperlink{F:ejudge.xml,T:super_serve_socket}{\V{super\_serve\_socket}} (*)\\
\>\hyperlink{F:ejudge.xml,T:testing_work_dir}{\V{testing\_work\_dir}} (**)\\
\>\hyperlink{F:ejudge.xml,T:userdb_file}{\V{userdb\_file}} (**)\\
\>\hyperlink{F:ejudge.xml,T:userlist_log}{\V{userlist\_log}} (**)\\
\>\hyperlink{F:ejudge.xml,T:user_map}{\V{user\_map}}\\
\>\>\hyperlink{F:ejudge.xml,T:map}{\V{map}}\\
\>\hyperlink{F:ejudge.xml,T:var_dir}{\V{var\_dir}} (**)\\
\end{tabbing}

{\small
(*) обозначены элементы, не рекомендуемые к явному использованию,
поскольку их значение предпочтительнее задавать при
компиляции системы опциями скрипта \hyperlink{P:configure}{\S{configure}}.

(**) Обозначены элементы, корректное значение которых устанавливается
при первоначальной настройке системы \S{ejudge}, и которые не рекомендуется
изменять в дальнейшем.

}

% NEW:
%  charset			X	X	X
%  config_dir			X	X	X
%  contests_home_dir		X	X
%  full_cgi_data_dir		X	X
%  compile_home_dir		X	X
%  testing_work_dir		X	X
%  script_dir			X	X
%  serialization_key		X	X
%  userlist_log			X	X
%  var_dir			X	X
%  super_serve_log		X	X
%  compile_log			X	X
%  super_serve_socket		X	X
%  job_server_log		X	X
%  job_server_spool		X	X
%  job_server_work		X	X
%  admin_email			NOT USED?
%  super_serve_user		NOT IMPLEMENTED
%  super_serve_group		NOT IMPLEMENTED
%  userlist_user		NOT IMPLEMENTED
%  userlist_group		NOT IMPLEMENTED

Описание каждого элемента дано ниже.

\subsection{Тег \V{config}}
\hypertarget{F:ejudge.xml,T:config}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{config} \\
Содержится в:        & \I{нет}\\
Может содержать:     & {\raggedright\strut\hyperlink{F:ejudge.xml,T:caps}{\V{caps}},
  \hyperlink{F:ejudge.xml,T:charset}{\V{charset}},
  \hyperlink{F:ejudge.xml,T:compile_home_dir}{\V{compile\_home\_dir}},
  \hyperlink{F:ejudge.xml,T:compile_log}{\V{compile\_log}},
  \hyperlink{F:ejudge.xml,T:config_dir}{\V{config\_dir}},
  \hyperlink{F:ejudge.xml,T:contests_dir}{\V{contests\_dir}},
  \hyperlink{F:ejudge.xml,T:contests_home_dir}{\V{contests\_home\_dir}},
  \hyperlink{F:ejudge.xml,T:email_program}{\V{email\_program}},
  \hyperlink{F:ejudge.xml,T:full_cgi_data_dir}{\V{full\_cgi\_data\_dir}},
  \hyperlink{F:ejudge.xml,T:job_server_log}{\V{job\_server\_log}},
  \hyperlink{F:ejudge.xml,T:job_server_spool}{\V{job\_server\_spool}},
  \hyperlink{F:ejudge.xml,T:job_server_work}{\V{job\_server\_work}},
  \hyperlink{F:ejudge.xml,T:l10n_dir}{\V{l10n\_dir}},
  \hyperlink{F:ejudge.xml,T:register_email}{\V{register\_email}},
  \hyperlink{F:ejudge.xml,T:register_url}{\V{register\_url}},
  \hyperlink{F:ejudge.xml,T:run_path}{\V{run\_path}},
  \hyperlink{F:ejudge.xml,T:script_dir}{\V{script\_dir}},
  \hyperlink{F:ejudge.xml,T:serialization_key}{\V{serialization\_key}},
  \hyperlink{F:ejudge.xml,T:serve_path}{\V{serve\_path}},
  \hyperlink{F:ejudge.xml,T:socket_path}{\V{socket\_path}},
  \hyperlink{F:ejudge.xml,T:super_serve_log}{\V{super\_serve\_log}},
  \hyperlink{F:ejudge.xml,T:super_serve_socket}{\V{super\_serve\_socket}},
  \hyperlink{F:ejudge.xml,T:testing_work_dir}{\V{testing\_work\_dir}},
  \hyperlink{F:ejudge.xml,T:userdb_file}{\V{userdb\_file}},
  \hyperlink{F:ejudge.xml,T:userlist_log}{\V{userlist\_log}},
  \hyperlink{F:ejudge.xml,T:user_map}{\V{user\_map}},
  \hyperlink{F:ejudge.xml,T:var_dir}{\V{var\_dir}}\par}\\
Атрибуты:            &
  \strut\hyperlink{F:ejudge.xml,T:config,A:l10n}{\V{l10n}}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

\B{Описание.} Тег верхнего уровня конфигурационного файла.

\subsection{Тег \V{cap}}
\hypertarget{F:ejudge.xml,T:cap}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{cap} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:caps}{\V{caps}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \strut\hyperlink{F:ejudge.xml,T:cap,A:login}{\V{login}}\\
Тип содержимого:     &
  \strut\hyperlink{S:capabilities}{список битов полномочий}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{да}\\
Используется в:      &
  \strut\hyperlink{P:userlist-server}{\S{userlist-server}}.
        \hyperlink{P:super-serve}{\S{super-serve}}\\
\end{tabular}

\B{Описание.} Данный элемент позволяет задавать полномочия
на выполнение операций над базой данных пользователей.
Описание полномочий, поддерживаемых системой \S{ejudge},
приведено в разделе \ref{sectionCapabilities}.

Атрибут \hypertarget{F:ejudge.xml,T:cap,A:login}{\V{login}}
задаёт регистрационное имя пользователя, для которого устанавливаются
полномочия.

\B{Пример.}
{\small
\begin{verbatim}
<cap login="dima">MAP_CONTEST</cap>
\end{verbatim}
}

\subsection{Тег \V{caps}}
\hypertarget{F:ejudge.xml,T:caps}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{caps} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \strut\hyperlink{F:ejudge.xml,T:cap}{\V{cap}}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{да}\\
Используется в:      &
  \strut\hyperlink{P:userlist-server}{\S{userlist-server}},
        \hyperlink{P:super-serve}{\S{super-serve}}\\
\end{tabular}

\B{Описание.} Данный элемент является элементом верхнего уровня
списка списков полномочий пользователей по отношению к базе данных
пользователей. Элемент внутри себя может содержать только
элементы \V{cap}. Если элемент \V{caps} встречается в конфигурационном
файле несколько раз, списки списков полномочий сливаются друг с другом.

\B{Пример.}
{\small
\begin{verbatim}
<caps>
  <cap login="a"></cap>
  <cap login="b"></cap>
</caps>
\end{verbatim}
}

\subsection{Тег \V{contests\_dir}}
\hypertarget{F:ejudge.xml,T:contests_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{contests\_dir} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к каталогу\\
Значение по умолчанию: & задается скриптом \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется:        & всеми программами \\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к каталогу, в котором
хранятся описания турниров
\hyperlink{F:contest.xml}{\V{contest.xml}}.
Каждое описание турнира находится
в отдельном файле с именем, равным шестизначному номеру
турнира, например, \V{000001.xml}.

Если при компиляции системы \S{ejudge} было указано значение данного
пути по умолчанию, то элемент \V{contests\_dir} может отсутствовать.
Для указания пути к каталогам по умолчанию используется
опция \verb|--enable-contests-dir| или опция \verb|--enable-conf-dir|
скрипта \hyperlink{P:configure}{\S{configure}} при компиляции
системы \S{ejudge}.

\B{Пример.}
{\small
\begin{verbatim}
<contests_dir>/var/ejudge/contests</contests_dir>
\end{verbatim}
}

\subsection{Тег \V{email\_program}}
\hypertarget{F:ejudge.xml,T:email_program}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{email\_program} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к программе\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:userlist-server}{\S{userlist-server}},
        \hyperlink{P:job-server}{\S{job-server}}\\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь программе отсылки
электронной почты. Эта программа запускается без аргументов
командной строки, и на её стандартный поток ввода подаются
служебные поля письма (\V{From}, \V{To} и т. д.),
а затем текст письма.

Почтовое сообщение отсылается по адресу, указанному в регистрационной
анкете, при регистрации нового
пользователя и содержит его регистрационное имя (login)
и пароль. Кроме этого, почтовое сообщение может отсылаться при
поступлении в турнир вопроса от участника или при возникновении
в турнире ошибки ``Check failed'', либо один раз в сутки с суточной
статистикой по турниру.

\B{Пример.}
{\small
\begin{verbatim}
<email_program>/var/qmail/bin/qmail-inject</email_program>
\end{verbatim}
}

\subsection{Тег \V{l10n\_dir}}
\hypertarget{F:ejudge.xml,T:l10n_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{l10n\_dir} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к каталогу\\
Значение по умолчанию: & задается скриптом \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:userlist-server}{\S{userlist-server}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к каталогу, в котором
хранятся локализованные сообщения.
Для локализации сообщений используется \S{GNU gettext}.
См. раздел \ref{sectionLocalization} для информации о локализации системы.

При компиляции системы скрипт \hyperlink{P:configure}{\S{configure}}
автоматически устанавливается правильный путь к каталогу сообщений,
основываясь на значении опции \verb|--prefix|. Поэтому явное
использование этого тега в конфигурационном файле не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
<l10n_dir>/usr/share/ejudge/locale</l10n_dir>
\end{verbatim}
}

\subsection{Тег \V{map}}
\hypertarget{F:ejudge.xml,T:map}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{map} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:user_map}{\V{user\_map}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            &
  \strut\hyperlink{F:ejudge.xml,T:map,A:system_user}{\V{system\_user}}
  \hyperlink{F:ejudge.xml,T:map,A:local_user}{\V{ejudge\_user}} \\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{да}\\
Используется в:      &
  \strut\hyperlink{P:userlist-server}{\S{userlist-server}}\\
\end{tabular}

\B{Описание.} Данный элемент задаёт отображение регистрационных
имён UNIX в регистрационные имена системы \S{ejudge}.
Атрибут \hypertarget{F:ejudge.xml,T:map,A:system_user}{\V{system\_user}}
задаёт регистрационное имя UNIX. Пользователь с таким регистрационным
именем должен существовать в системе.
Атрибут \hypertarget{F:ejudge.xml,T:map,A:ejudge_user}{\V{ejudge\_user}}
задаёт регистрационное имя системы \S{ejudge}.

\B{Пример.}
{\small
\begin{verbatim}
<map system_user="aaa" ejudge_user="tolik"/>
\end{verbatim}
}

В данном примере если пользователь \V{aaa} запустит
программу \hypertarget{P:edit-userlist}{\S{edit-userlist}},
то программа автоматически получит привилегия доступа к базе пользователей,
установленные для пользователя \V{tolik} в базе пользователей \S{ejudge}.

\subsection{Тег \V{register\_email}}
\hypertarget{F:ejudge.xml,T:register_email}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{register\_email} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & адрес электронной почты\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:userlist-server}{\S{userlist-server}}\\
\end{tabular}

\B{Описание.} Данный элемент задаёт электронный адрес,
от имени которого рассылаются уведомления о регистрации
новых пользователей.
Если этот элемент не определен ни в этом файле, ни
в файле конфигурации турнира, регистрационные сообщения
рассылаются от имени пользователя Unix, под которым запущена
программа \S{userlist-server}.
Значение, устанавливаемое этим
элементом может быть переопределено
элементом \hyperlink{F:contest.xml,T:register_email}{\V{register\_email}}
конфигурационного файла турнира \hyperlink{F:contest.xml}{\V{contest.xml}}.

\B{Пример.}
{\small
\begin{verbatim}
<register_email>ejudge@olympiads.ru</register_email>
\end{verbatim}
}

\subsection{Тег \V{register\_url}}
\hypertarget{F:ejudge.xml,T:register_url}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{register\_url} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & URL\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:userlist-server}{\S{userlist-server}}\\
\end{tabular}

\B{Описание.} Данный элемент задаёт URL
CGI программы \hyperlink{P:register}{\S{register}},
которая отвечает за регистрацию новых пользователей, изменение
пользователями своих персональных данных и регистрацию пользователей
на турниры. Этот URL добавляется в текст уведомления о регистрации.
Если этот элемент не определён, используется URL
по умолчанию \V{http://contest.cmc.msu.ru/cgi-bin/register}.
Значение, устанавливаемое этим
элементом может быть переопределено
элементом \hyperlink{F:contest.xml,T:register_url}{\V{register\_url}}
конфигурационного файла турнира \hyperlink{F:contest.xml}{\V{contest.xml}}.

\B{Пример.}
{\small
\begin{verbatim}
<register_url>http://www.olympiads.ru/cgi-bin/register</register_url>
\end{verbatim}
}

\subsection{Тег \V{serve\_path}}
\hypertarget{F:ejudge.xml,T:serve_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{serve\_path} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к программе
  \hyperlink{P:serve}{\S{serve}}\\
Значение по умолчанию: & задается скриптом \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:super-serve}{\S{super-serve}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к программе
\hyperlink{P:serve}{\S{serve}} системы \S{ejudge}.
При компиляции системы скрипт \hyperlink{P:configure}{\S{configure}}
автоматически устанавливает правильный путь к программе \S{serve},
основываясь на значении опции \verb|--prefix|. Поэтому явное
использование этого тега в конфигурационном файле не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
<serve_path>/usr/ejudge/bin/serve</serve_path>
\end{verbatim}
}

\subsection{Тег \V{run\_path}}
\hypertarget{F:ejudge.xml,T:run_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{run\_path} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к программе
  \hyperlink{P:run}{\S{run}}\\
Значение по умолчанию: & задается скриптом \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:super-serve}{\S{super-serve}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к программе
\hyperlink{P:run}{\S{run}} системы \S{ejudge}.
При компиляции системы скрипт \hyperlink{P:configure}{\S{configure}}
автоматически устанавливает правильный путь к программе \S{serve},
основываясь на значении опции \verb|--prefix|. Поэтому явное
использование этого тега в конфигурационном файле не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
<serve_path>/usr/ejudge/bin/run</serve_path>
\end{verbatim}
}

\subsection{Тег \V{socket\_path}}
\hypertarget{F:ejudge.xml,T:socket_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{socket\_path} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к UNIX-сокету\\
Значение по умолчанию: & задается скриптом \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:edit-userlist}{\S{edit-userlist}},
  \hyperlink{P:judge}{\S{judge}},
  \hyperlink{P:master}{\S{master}},
  \hyperlink{P:register}{\S{register}},
  \hyperlink{P:serve}{\S{serve}},
  \hyperlink{P:serve-control}{\S{serve-control}},
  \hyperlink{P:super-serve}{\S{super-serve}},
  \hyperlink{P:team}{\S{team}},
  \hyperlink{P:userlist-server}{\S{userlist-server}},
  \hyperlink{P:users}{\S{users}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к UNIX-сокету, который
используется для связи с сервером информации о пользователях
\hyperlink{P:userlist-server}{\S{userlist-server}}.
Сокет создаётся при старте этой программы, поэтому должен находится
в каталоге, доступном ей на запись.
Смотри также
элемент \hyperlink{F:users.xml,T:socket_path}{\V{socket\_path}}
конфигурационного файла \hyperlink{F:users.xml}{\V{users.xml}},
элемент \hyperlink{F:register.xml,T:socket_path}{\V{socket\_path}}
конфигурационного файла \hyperlink{F:register.xml}{\V{register.xml}},
параметр \hyperlink{F:master.cfg,T:socket_path}{\V{socket\_path}}
конфигурационного файла \hyperlink{F:master.cfg}{\V{master.cfg}},
параметр \hyperlink{F:judge.cfg,T:socket_path}{\V{socket\_path}}
конфигурационного файла \hyperlink{F:judge.cfg}{\V{judge.cfg}},
параметр \hyperlink{F:team.cfg,T:socket_path}{\V{socket\_path}}
конфигурационного файла \hyperlink{F:team.cfg}{\V{team.cfg}},
параметр \hyperlink{F:serve.cfg,T:socket_path}{\V{socket\_path}}
конфигурационного файла \hyperlink{F:serve.cfg}{\V{serve.cfg}}.

Рекомендуется при компиляции системы указывать путь к сокету
с помощью опции \verb|--enable-socket-path| скрипта
\hyperlink{P:configure}{\S{configure}}. Тогда указанный путь
будет использоваться как путь по умолчанию, и может не устанавливаться
явно в конфигурационных файлах. Поэтому явное использование
тега \verb|socket_path| не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
<socket_path>/var/ejudge/userlist-socket</socket_path>
\end{verbatim}
}

\subsection{Тег \V{super\_serve\_socket}}
\hypertarget{F:ejudge.xml,T:super_serve_socket}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{super\_serve\_socket} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к UNIX-сокету\\
Значение по умолчанию: & задается скриптом \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \hyperlink{P:serve-control}{\S{serve-control}},
  \hyperlink{P:super-serve}{\S{super-serve}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание}.
Данный элемент задаёт путь к UNIX-сокету, который используется
для управления программой \hyperlink{P:super-serve}{\S{super-serve}}.
Этот сокет используется CGI-программой
\hyperlink{P:serve-control}{\S{serve-control}} для пересылки команд
и получения сгенерированных HTML-страниц.

Путь к управляющему сокету рекомендуется указывать при компиляции
системы \S{ejudge} с помощью опции \verb|--enable-super-serve-socket|
скрипта \hyperlink{P:configure}{\S{configure}}. Таким образом
указанный путь станет путём по умолчанию и может не указываться
явно в конфигурационных файлах. Поэтому явное использование
тега \verb|super_serve_socket| не рекомендуется.

\subsection{Тег \V{user\_map}}
\hypertarget{F:ejudge.xml,T:user_map}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{user\_map} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \strut\hyperlink{F:ejudge.xml,T:map}{\V{map}}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:userlist-server}{\S{userlist-server}}\\
\end{tabular}

\B{Описание.} Данный элемент является элементом верхнего уровня
списка отображения системных (Unix) пользователей в пользователей
\S{ejudge}. Используется для определения уровня привилегий пользователя
при запуске им утилит \hyperlink{P:edit-userlist}{\S{edit-userlist}} и
\hyperlink{P:serve}{\S{serve}}, когда последние подключаются к базе данных
пользователей.

\B{Пример.}
{\small
\begin{verbatim}
<user_map>
  <map system_user="john" ejudge_user="vasya_petrov"/>
</user_map>
\end{verbatim}
}

В данном примере если пользователь \V{john} запустит
программу \hypertarget{P:edit-userlist}{\S{edit-userlist}},
то программа автоматически получит привилегия доступа к базе пользователей,
установленные для пользователя \V{vasya\_petrov}
в базе пользователей \S{ejudge}.

\subsection{Тег \V{userdb\_file}}
\hypertarget{F:ejudge.xml,T:userdb_file}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{userdb\_file} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к файлу\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:clean-users}{\S{clean-users}},
  \hyperlink{P:collect-emails}{\S{collect-emails}},
  \hyperlink{P:slice-userlist}{\S{slice-userlist}},
  \hyperlink{P:userlist-server}{\S{userlist-server}}\\
Примечание:          & изменение не рекомендуется\\
\end{tabular}

\B{Описание.} Текст в данном элементе задаёт путь к файлу, хранящему
информацию о пользователях системы
\hyperlink{F:userlist.xml}{\V{userlist.xml}}.

Корректное значение данного элемента устанавливается на этапе
начальной настройки системы с помощью программы
\hyperlink{P:ejudge-setup}{\S{ejudge-setup}}. В дальнейшем при
работе системы значение этого элемента изменять не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
<userdb_file>/var/ejudge/db/userlist.xml</userdb_file>
\end{verbatim}
}

\subsection{Тег \V{charset}}
\hypertarget{F:ejudge.xml,T:charset}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{charset} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & название кодировки символов\\
Значение по умолчанию: & задается скриптом \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:super-serve}{\S{super-serve}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент позволяет задать кодировку символов,
которая будет использоваться программой
\hyperlink{P:super-serve}{\S{super-serve}} при создании конфигурационных
файлов новых турниров.

Рекомендуется указывать кодировку символов по умолчанию при компиляции
системы \S{ejudge} с помощью опции \verb|--enable-charset|
скрипта \hyperlink{P:configure}{\S{configure}}. В этом случае задание
элемента \V{charset} в данном конфигурационном файле не требуется.

\B{Пример.}
{\small
\begin{verbatim}
<charset>koi8-r</charset>
\end{verbatim}
}

\subsection{Тег \V{config\_dir}}
\hypertarget{F:ejudge.xml,T:config_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{config\_dir} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к конфигурационному каталогу \S{ejudge}\\
Значение по умолчанию: & задается скриптом \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.}
Данный элемент позволяет задать каталог конфигурационных файлов
и базы пользователей системы \S{ejudge}.
Рекомендуется использовать значение по умолчанию,
задаваемое при компиляции системы \S{ejudge}
с помощью опции \verb|--enable-contests-home-dir| скрипта
\hyperlink{P:configure}{\S{configure}}.
Поэтому явное использование данного элемента не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
<config_dir>/home/judges/data</config_dir>
\end{verbatim}
}

\subsection{Тег \V{contests\_home\_dir}}
\hypertarget{F:ejudge.xml,T:contests_home_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{contests\_home\_dir} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к рабочему каталогу \S{ejudge}\\
Значение по умолчанию: & задается скриптом \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      & \hyperlink{P:super-serve}{\S{super-serve}} \\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание}.
Данный элемент позволяет задать <<домашний>> каталог системы
\S{ejudge}. В подкаталогах домашнего каталога находятся
каталоги конфигурационных файлов, каталоги турниров и
разнообразные рабочие каталоги, необходимые для работы системы.
В частности, программа \hyperlink{P:super-serve}{\S{super-serve}}
создаёт новые турниры именно в этом каталоге.

Рекомендуется задавать домашний каталог системы при компиляции системы
\S{ejudge} с помощью опции \verb|--enable-contests-home-dir|
скрипта \hyperlink{P:configure}{\S{configure}}. В этом случае
явное задание элемента \verb|contests_home_dir| не требуется
и не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
<contests_home_dir>/home/judges</contests_home_dir>
\end{verbatim}
}

\subsection{Тег \V{full\_cgi\_data\_dir}}
\hypertarget{F:ejudge.xml,T:full_cgi_data_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{full\_cgi\_data\_dir} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & полный путь к каталогу конфигурационных
                       файлов CGI-программ \S{ejudge}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & модификация не рекомендуется \\
\end{tabular}

\B{Описание.}
В данном элементе хранится полный путь к каталогу конфигурационных файлов
CGI-програм системы \S{ejudge}. Этот путь строится в зависимости
от значения полного пути к каталогу CGI-программ веб-сервера,
которое задаётся с помощью опции \verb|--with-httpd-cgi-bin-dir|
скрипта \hyperlink{P:configure}{\S{configure}}, и от значения
опции \verb|--enable-cgi-conf-dir| скрипта \S{configure}.
Так, если значение опции \verb|--enable-cgi-conf-dir| является
абсолютным путём, то значение элемента \verb|full_cgi_data_dir|
будет совпадать со значением опции.

Установка значения этого элемента выполняется программой
\hyperlink{P:ejudge-setup}{\S{ejudge-setup}} при начальной настройке
системы \S{ejudge} после инсталляции. Поэтому изменение значения
этого элемента при дальнейшей работе системы не рекомендуется.

\subsection{Тег \V{compile\_home\_dir}}
\hypertarget{F:ejudge.xml,T:compile_home_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{compile\_home\_dir} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & полный путь к <<домашнему>> каталогу
                       программы \hyperlink{P:compile}{\S{compile}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      & \hyperlink{P:super-serve}{\S{super-serve}}\\
Примечание:          & модификация не рекомендуется \\
\end{tabular}

\B{Описание}.
В данном элементе хранится путь к <<домашнему>> каталогу
программы \hyperlink{P:compile}{\S{compile}}.
Значение этого элемента используется при создании новых турниров
в программе \hyperlink{P:super-serve}{\S{super-serve}}.

Правильное значение этого элемента устанавливается на этапе
первоначальной настройки системы \S{ejudge} после инсталляции
с помощью программы \hyperlink{P:ejudge-setup}{\S{ejudge-setup}}.
После этого изменять значение этого элемента не рекомендуется.

\subsection{Тег \V{testing\_work\_dir}}
\hypertarget{F:ejudge.xml,T:testing_work_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{compile\_home\_dir} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & полный путь к рабочему каталогу для тестирования
                       программ\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      & \hyperlink{P:super-serve}{\S{super-serve}}\\
Примечание:          & модификация не рекомендуется \\
\end{tabular}

\B{Описание}.
Данных элемент хранит путь к рабочему каталогу для тестирования программ.
Значение этого элемента используется при создании новых турниров
в программе \hyperlink{P:super-serve}{\S{super-serve}}.

Правильное значение этого элемента устанавливается на этапе
первоначальной настройки системы \S{ejudge} после инсталляции
с помощью программы \hyperlink{P:ejudge-setup}{\S{ejudge-setup}}.
После этого изменять значение этого элемента не рекомендуется.

\subsection{Тег \V{script\_dir}}
\hypertarget{F:ejudge.xml,T:script_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{script\_dir} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & полный путь к каталогу вспомогательных программ
                       системы \S{ejudge}\\
Значение по умолчанию: & задается скриптом \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      & \hyperlink{P:super-serve}{\S{super-serve}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание}.
Значение данного элемента --- это путь к каталогу в инсталляции
\S{ejudge}, в котором хранятся вспомогательные программы и
скрипты.

Корректное значение пути к каталогу вспомогательных программ
автоматически устанавливается скриптом 
\hyperlink{P:configure}{\S{configure}} по пути к корню
инсталляции, задаваемому с помощью опции \verb|--prefix|.
Явное использование элемента \verb|script_dir| не рекомендуется.

\subsection{Тег \V{serialization\_key}}
\hypertarget{F:ejudge.xml,T:serialization_key}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{serialization\_key} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & полный путь к каталогу вспомогательных программ
                       системы \S{ejudge}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      & \hyperlink{P:super-serve}{\S{super-serve}}\\
Примечание:          & модификация не рекомендуется \\
\end{tabular}

\B{Описание.}
В данном элементе хранится номер ключа семафора, который используется
программами \hyperlink{P:compile}{\S{compile}} и
\hyperlink{P:run}{\S{run}} для исключения одновременной компиляции
или запуска на выполнение тестируемых программ. Значение этого ключа
используется программой \hyperlink{P:ejudge-setup}{\S{ejudge-setup}}
для генерации конфигурационного файла \V{compile.cfg} сервера компиляции,
а также программой \hyperlink{P:super-serve}{\S{super-serve}}
при генерации конфигурационных файлов создаваемого турнира.

Значение ключа рекомендуется устанавливать при начальной настройке
системы \S{ejudge} с помощью программы
\hyperlink{P:ejudge-setup}{\S{ejudge-setup}}, а дальнейшее изменение
не рекомендуется.

\subsection{Тег \V{var\_dir}}
\hypertarget{F:ejudge.xml,T:var_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{var\_dir} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & полный путь к рабочему каталогу системы \S{ejudge}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \hyperlink{P:job-server}{\S{job-server}},
  \hyperlink{P:super-serve}{\S{super-serve}},
  \hyperlink{P:userlist-server}{\S{userlist-server}}\\
Примечание:          & модификация не рекомендуется \\
\end{tabular}

\B{Описание.}
Значение данного элемента содержит полный путь к рабочему
каталогу системы \S{ejudge}. В рабочем каталоге располагаются
файлы журналов программ системы, а также рабочие каталоги программ
системы.

Рекомендуемое значение данного пути устанавливается автоматически
на этапе первоначальной настройки системы
программой \hyperlink{P:ejudge-setup}{\S{ejudge-setup}}
на основе значения, указанного в опции
\verb|--enable-contests-home-dir|. После этого изменять значение
этого элемента не рекомендуется.

\subsection{Тег \V{userlist\_log}}
\hypertarget{F:ejudge.xml,T:userlist_log}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{userlist\_log} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & имя файла журнала программы
  \hyperlink{P:userlist-server}{\S{userlist-server}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \hyperlink{P:userlist-server}{\S{userlist-server}}\\
Примечание:          & модификация не рекомендуется \\
\end{tabular}

\B{Описание.}
В данном элементе хранится имя файла журнала программы
\hyperlink{P:userlist-server}{\S{userlist-server}}. Файл журнала
используется только тогда, когда программа работает в режиме демона,
т. е. запущена с опцией \verb|-D| командной строки. Если в этом случае
файл журнала не задан, программа выдает ошибку при запуске.
Имя файла может быть как относительным путём, так и абсолютным.
В случае относительного пути абсолютный вычисляется с использованием
значения элемента \verb|var_dir|.

Рекомендуемое значение данного пути устанавливается автоматически
на этапе первоначальной настройки системы
программой \hyperlink{P:ejudge-setup}{\S{ejudge-setup}}.
После этого изменять значение этого элемента не рекомендуется.

{\raggedright
\B{Пример.}
{\small
\begin{verbatim}
<var_dir>/home/judges/var</contests>
<userlist_log>userlist.log</userlist_log>
\end{verbatim}
}
В данном случае файл журнала будет иметь полный путь
\verb|/home/judges/var/userlist.log|.

}

\subsection{Тег \V{super\_serve\_log}}
\hypertarget{F:ejudge.xml,T:super_serve_log}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{super\_serve\_log} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & имя файла журнала программы
  \hyperlink{P:super-serve}{\S{super-serve}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \hyperlink{P:super-serve}{\S{super-serve}}\\
Примечание:          & модификация не рекомендуется \\
\end{tabular}

\B{Описание.}
В данном элементе хранится имя файла журнала программы
\hyperlink{P:super-serve}{\S{super-serve}}. Файл журнала
используется только тогда, когда программа работает в режиме демона,
т. е. запущена с опцией \verb|-D| командной строки. Если в этом случае
файл журнала не задан, программа выдает ошибку при запуске.
Имя файла может быть как относительным путём, так и абсолютным.
В случае относительного пути абсолютный вычисляется с использованием
значения элемента \verb|var_dir|.

Рекомендуемое значение данного пути устанавливается автоматически
на этапе первоначальной настройки системы
программой \hyperlink{P:ejudge-setup}{\S{ejudge-setup}}.
После этого изменять значение этого элемента не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
<var_dir>/home/judges/var</contests>
<super_serve_log>super-serve.log</super_serve_log>
\end{verbatim}
}
В данном случае файл журнала будет иметь полный путь
\verb|/home/judges/var/super-serve.log|.

\subsection{Тег \V{compile\_log}}
\hypertarget{F:ejudge.xml,T:compile_log}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{compile\_log} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & имя файла журнала программы
  \hyperlink{P:compile}{\S{compile}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \hyperlink{P:compile}{\S{compile}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.}
В данном элементе хранится имя файла журнала программы
\hyperlink{P:compile}{\S{compile}}. Файл журнала
используется только тогда, когда программа работает в режиме демона,
т. е. запущена с опцией \verb|-D| командной строки. Однако, в текущей
версии \S{ejudge} режим демона для программы \S{compile} пока не
реализован. Если значение элемента не задано, то по умолчанию
используется имя файла \verb|compile.log|.
Имя файла может быть как относительным путём, так и абсолютным.
В случае относительного пути абсолютный вычисляется с использованием
значения элемента \verb|var_dir|.

Рекомендуемое значение данного элемента встроено по умолчанию, поэтому
явное использование не рекомендуется.


\subsection{Тег \V{job\_server\_log}}
\hypertarget{F:ejudge.xml,T:job_server_log}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{job\_server\_log} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & имя файла журнала программы
  \hyperlink{P:job-server}{\S{job-server}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \hyperlink{P:job-server}{\S{job-server}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.}
В данном элементе хранится имя файла журнала программы
\hyperlink{P:job-server}{\S{job-server}}. Файл журнала
используется только тогда, когда программа работает в режиме демона,
т. е. запущена с опцией \verb|-D| командной строки.
Если значение элемента не задано, то по умолчанию
используется имя файла \verb|job-server.log|.
Имя файла может быть как относительным путём, так и абсолютным.
В случае относительного пути абсолютный вычисляется с использованием
значения элемента \verb|var_dir|.

Рекомендуемое значение данного элемента встроено по умолчанию, поэтому
явное использование не рекомендуется.

\subsection{Тег \V{job\_server\_spool}}
\hypertarget{F:ejudge.xml,T:job_server_spool}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{job\_server\_spool} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & имя каталога обмена программы
  \hyperlink{P:job-server}{\S{job-server}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \hyperlink{P:job-server}{\S{job-server}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.}
В данном элементе хранится имя каталога обмена программы
\hyperlink{P:job-server}{\S{job-server}}, с помощью которого другие
программы системы \S{ejudge} передают запросы на выполнение заданий
программе \S{job-server}.
Если значение элемента не задано, то по умолчанию
используется имя каталога \verb|jspool|.
Имя каталога может быть как относительным путём, так и абсолютным.
В случае относительного пути абсолютный вычисляется с использованием
значения элемента \verb|var_dir|.

Рекомендуемое значение данного элемента встроено по умолчанию, поэтому
явное использование не рекомендуется.

\subsection{Тег \V{job\_server\_work}}
\hypertarget{F:ejudge.xml,T:job_server_work}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{job\_server\_work} \\
Содержится в:        & \strut\hyperlink{F:ejudge.xml,T:config}{\V{config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & имя рабочего каталога программы
  \hyperlink{P:job-server}{\S{job-server}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \hyperlink{P:job-server}{\S{job-server}}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.}
В данном элементе хранится имя рабочего каталога программы
\hyperlink{P:job-server}{\S{job-server}}.
Если значение элемента не задано, то по умолчанию
используется имя каталога \verb|jwork|.
Имя каталога может быть как относительным путём, так и абсолютным.
В случае относительного пути абсолютный вычисляется с использованием
значения элемента \verb|var_dir|.

Рекомендуемое значение данного элемента встроено по умолчанию, поэтому
явное использование не рекомендуется.

\newpage
\section{Конфигурационный файл \V{register.xml}}

Данный конфигурационный файл используется CGI-программой
\hyperlink{P:register}{\S{register}}. Содержимое файла
прочитывается один раз при старте CGI-программы, то есть каждый
раз, когда кто-либо посылает HTTP/HTTPS-запрос к серверу,
приводящий к запуску программы \S{register}.

Местоположение конфигурационного файла определяется на
этапе компиляции системы \S{ejudge} с помощью опции
\verb|--enable-cgi-conf-dir| скрипта
\hyperlink{P:configure}{\S{configure}}. Эта опция позволяет установить
каталог, в котором находятся конфигурационные файлы всех CGI-программ.
Если опция не была указана в командной строке \S{configure}, предполагается
значение по умолчанию, равное \verb|../cgi-data|.
Местоположение каталога конфигурационных файлов, задаваемого опцией
\verb|--enable-cgi-conf-dir| может быть как абсолютным, так и относительным
путём. В случае относительного пути точкой отсчёта является
каталог, в котором находится сама CGI-программа \S{register}.
Для этого используется переменная окружения \verb|SCRIPT_FILENAME|,
устанавливаемая веб-сервером при запуске CGI-программы.

{\raggedright
Таким образом, если, например, CGI-программы располагаются в каталоге
\verb|/home/httpd/cgi-bin|, то при значении пути к конфигурационным
файлам \verb|../cgi-data|, конфигурационные файлы CGI-программ
должны располагаться в каталоге \verb|/home/httpd/cgi-data|.

}

Конфигурационный файл программы \S{register} может называться
\V{register.xml} или \V{register-$N$.xml}, где $N$ --- номер турнира
(см. ниже), но и конфигурационный файл вообще может отсутствовать.
Для этого необходимо, чтобы все настройки, которые считываются
из конфигурационного файла, были установлены при компиляции системы
с помощью опций скрипта \hyperlink{P:configure}{\S{configure}}.

Чтобы конфигурационный файл программы \S{register} был необязательным,
необходимо, чтобы программа \S{register} была открыта для доступа
со всех IP-адресов (дополнительные ограничения, конечно, могут
задаваться для каждого турнира в конфигурационном файле турнира).
Кроме того, при компиляции системы \S{ejudge} необходимо указание
опций \verb|--enable-charset|, \verb|--enable-socket-path| и
\verb|--enable-conf-dir|.

Если конфигурационный файл не найден или не может быть открыт,
используется следующий встроенный конфигурационный файл
по умолчанию:
{\small
\begin{verbatim}
<?xml version="1.0" ?>
<register_config>
   <access default="allow"/>
</register_config>
\end{verbatim}
}
Опции \verb|--enable-charset|, \verb|--enable-socket-path| и
\verb|--enable-conf-dir| скрипта \hyperlink{P:configure}{\S{configure}}
позволяют в этом случае установить значения по умолчанию для остальных
необходимых элементов конфигурационного файла.

При запуске программы \S{register} вначале определяется идентификатор
турнира. Идентификатор турнира определяется либо по параметру
запроса \verb|contest_id|, либо по имени, под которым вызывается
программа \S{register}, причем параметр запроса \verb|contest_id|
имеет приоритет. В случае, когда идентификатор турнира не определен
или определен по параметру запроса \verb|contest_id|,
всегда используется конфигурационный файл \V{register.xml}.
Если конфигурационный файл не существует, то будут использоваться
значения по умолчанию.

Определение идентификатора турнира по имени программы является
устаревшим механизмом и не рекомендуется для использования.
В этом случае программа \S{register} должна называться
\V{register-$N$}, где $N$ --- десятичное число-идентификатор
турнира. Этого можно добиться созданием символических или
жестких ссылок в каталоге CGI-программ веб-сервера.
Тогда сначала будет сделана попытка считать конфигурационный файл
\V{register-$N$.xml}, затем, если эта попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{register-$N'$.xml}, где $N'$ --- это число, напечатанное
с 6 десятичными знаками, включая незначащие нули, например,
\V{register-000001.xml}. Если это попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{register-$N''$.xml}, где $N''$ --- число, напечатанное
без ведущих незначащих нулей. Наконец, будет сделана попытка
считать конфигурационный файл \V{register.xml},
и в случае неуспеха будут использоваться значения по умолчанию.

Конфигурационный файл представляет собой правильный XML-файл,
элементом верхнего уровня которого является
\hyperlink{F:register.xml,T:register_config}{\V{register\_config}}.

Общая структура файла приведена ниже.

\begin{tabbing}
\hspace{1cm}\=\hspace{1cm}\=\kill
\hyperlink{F:register.xml,T:register_config}{\V{register\_config}}\\
\>\hyperlink{F:register.xml,T:access}{\V{access}}\\
\>\>\hyperlink{F:register.xml,T:ip}{\V{ip}}\\
\>\hyperlink{F:register.xml,T:contests_dir}{\V{contests\_dir}}\\
\>\hyperlink{F:register.xml,T:l10n_dir}{\V{l10n\_dir}}\\
\>\hyperlink{F:register.xml,T:socket_path}{\V{socket\_path}}\\
\end{tabbing}

Далее даётся описание всех элементов конфигурационного файла.

\subsection{Тег \V{register\_config}}
\hypertarget{F:register.xml,T:register_config}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{register\_config} \\
Содержится в:        & \I{нет}\\
Может содержать:     & \strut\hyperlink{F:register.xml,T:access}{\V{access}},
  \hyperlink{F:register.xml,T:contests_dir}{\V{contests\_dir}},
  \hyperlink{F:register.xml,T:l10n_dir}{\V{l10n\_dir}},
  \hyperlink{F:register.xml,T:socket_path}{\V{socket\_path}}\\
Атрибуты:            &
  \strut\hyperlink{F:register.xml,T:config,A:l10n}{\V{l10n}},
  \hyperlink{F:register.xml,T:config,A:charset}{\V{charset}},
  \hyperlink{F:register.xml,T:config,A:show_generation_time}{\V{show\_generation\_time}}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

\B{Описание.} Тег верхнего уровня конфигурационного файла.

\subsubsection{Атрибут \V{l10n}}
\hypertarget{F:register.xml,T:config,A:l10n}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{l10n} \\
Содержится в:          & \strut\hyperlink{F:register.xml,T:register_config}{\V{register\_config}} \\
Тип значения:          & \I{boolean} \\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}} \\
Может отсутствовать:   & \I{да} \\
Примечание:            & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный атрибут включает поддержку локализации
интерфейса. Если его значение установлено в \I{true}, CGI-программа
\hyperlink{P:register}{\S{register}} считывает значение
параметра \V{locale\_id} и переключает язык интерфейса
в зависимости от значения параметра.
Подробнее вопросы локализации системы рассматриваются в
разделе \ref{sectionLocalization}.

Логическое значение \I{true} задаётся с помощью строк \V{1}, \V{yes}
или \V{true}, а логическое значение \I{false} ---
с помощью строк \V{0}, \V{no}, \V{false}.

Явно устанавливать данный атрибут не рекомендуется. Для запрета
локализации системы предпочтительнее использовать
опцию \verb|--disable-nls| скрипта \hyperlink{P:configure}{\S{configure}}
при компиляции системы \S{ejudge}.

\subsubsection{Атрибут \V{charset}}
\hypertarget{F:register.xml,T:register_config,A:charset}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{charset} \\
Содержится в:          & \strut\hyperlink{F:register.xml,T:register_config}{\V{register\_config}} \\
Тип значения:          & \I{string} \\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать:   & \I{да} \\
Примечание:            & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный атрибут позволяет задавать кодировку,
которая будет проставляться в заголовке всех генерируемых страниц.
Обратите внимание, что в текущей версии кодировка проставляется
вне зависимости от языка интерфейса.

Использование данного атрибута не рекомендуется. Предпочтительнее
устанавливать кодировку по умолчанию с помощью опции
\verb|--enable-charset| скрипта \hyperlink{P:configure}{\S{configure}}.

\subsubsection{Атрибут \V{show\_generation\_time}}
\hypertarget{F:register.xml,T:register_config,A:show_generation_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{show\_generation\_time} \\
Содержится в:          & \strut\hyperlink{F:register.xml,T:register_config}{\V{register\_config}} \\
Тип значения:          & \I{boolean} \\
Значение по умолчанию: & \V{false} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Если данный атрибут установлен в \I{true},
генерируемые html-страницы будут содержать информацию о процессорном
времени в миллисекундах, затраченном на генерацию каждой страницы.
Например, если язык интерфейса --- английский, сообщение будет
иметь примерно следующий вид:
{\small
\begin{verbatim}
Page generation time: 37 msec
\end{verbatim}
}

\subsection{Тег \V{access}}
\hypertarget{F:register.xml,T:access}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{access} \\
Содержится в:        &
  \strut\hyperlink{F:register.xml,T:register_config}{\V{register\_config}}\\
Может содержать:     & \strut\hyperlink{F:register.xml,T:ip}{\V{ip}}\\
Атрибуты:            &
  \strut\hyperlink{F:register.xml,T:access,A:default}{\V{default}}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

\B{Описание.} Данный элемент позволяет задавать ограничения на IP-адреса,
с которых производится обращение к CGI-программе \S{register}.
Ограничения, заданные в этом конфигурационном файле, проверяются
до вывода регистрационной страницы и действуют на все турниры,
определённые в системе. Эти ограничения могут использоваться для
запрещения любого доступа к системе от <<нежелательных>> IP-адресов.
Каждый турнир может накладывать дополнительные ограничения.
Они задаются с помощью
элемента \hyperlink{F:contest.xml,T:register_access}{\V{register\_access}}
конфигурационного файла \hyperlink{F:contest.xml}{\V{contest.xml}}.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsubsection{Атрибут \V{default}}
\hypertarget{F:register.xml,T:access,A:default}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{default} \\
Содержится в:          & \strut\hyperlink{F:register.xml,T:access}{\V{access}} \\
Тип значения:          & \I{allow} или \I{deny} \\
Значение по умолчанию: & \I{deny} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Данный атрибут задаёт права доступа в случае, если
IP-адрес клиента не перечислен в списке IP-адресов. Если
атрибут установлен в \I{allow}, такие IP-адреса считаются допустимыми,
а если атрибут установлен в \I{deny}, доступ с таких IP-адресов
запрещается.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsection{Тег \V{ip}}
\hypertarget{F:register.xml,T:ip}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{ip} \\
Содержится в:        & \strut\hyperlink{F:register.xml,T:access}{\V{access}}\\
Может содержать:     & \I{нет} \\
Атрибуты:            & \strut\hyperlink{F:register.xml,T:ip,A:allow}{\V{allow}}\\
Тип содержимого:     & шаблон IP-адреса\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{да}\\
\end{tabular}

\B{Описание.} Данный элемент определяет права доступа для клиентов с
заданным шаблоном IP-адреса. Если атрибут \V{allow} установлен
в \I{true}, таким клиентам разрешается работа с CGI-программой
\S{register}.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsubsection{Атрибут \V{allow}}
\hypertarget{F:register.xml,T:ip,A:allow}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{allow} \\
Содержится в:          & \strut\hyperlink{F:register.xml,T:access}{\V{access}} \\
Тип значения:          & \I{boolean} \\
Значение по умолчанию: & \I{false} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Данный атрибут задаёт права доступа в случае, если
IP-адрес клиента удовлетворяет спецификации IP-адреса в данном
элементе. Если значение атрибута равно
\I{true}, такой IP-адрес считаются допустимым,
а если значение атрибут установлено в \I{false}, доступ с этого IP-адреса
запрещается.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsubsection{Атрибут \V{ssl}}
\hypertarget{F:register.xml,T:ip,A:ssl}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{ssl} \\
Содержится в:          & \strut\hyperlink{F:register.xml,T:access}{\V{access}} \\
Тип значения:          & \V{any}, \V{no}, \V{yes} \\
Значение по умолчанию: & \V{any} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.}
Данный атрибут устанавливает флаг того, относится ли данное правило
проверки IP-адресов к защищенным соединениям или нет.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsection{Тег \V{l10n\_dir}}
\hypertarget{F:register.xml,T:l10n_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{l10n\_dir} \\
Содержится в:        & \strut\hyperlink{F:register.xml,T:regiter\_config}{\V{register\_config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к каталогу\\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к каталогу, в котором
хранятся локализованные сообщения.
Для локализации сообщений используется \S{GNU gettext}.
См. раздел \ref{sectionLocalization} для информации о локализации системы.

Корректный путь устанавливается автоматически при компиляции системы
с помощью скрипта \hyperlink{P:configure}{\S{configure}}, поэтому
явное использование этого элемента не рекомендуется.

\subsection{Тег \V{contests\_dir}}
\hypertarget{F:register.xml,T:contests_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{contests\_dir} \\
Содержится в:        & \strut\hyperlink{F:register.xml,T:register_config}{\V{register\_config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к каталогу\\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к каталогу, в котором
хранятся описания турниров
\hyperlink{F:contest.xml}{\V{contest.xml}}.
Каждое описание турнира находится
в отдельном файле с именем, равным шестизначному номеру
турнира, например, \V{000001.xml}.

Правильное значение по умолчанию
пути к каталогу описания турниров автоматически
устанавливается программой \hyperlink{P:configure}{\S{configure}}
при компиляции системы, используя значения опций
\verb|--enable-conf-dir| или \verb|--enable-contests-home-dir|.
Поэтому явное задание данной опции не рекомендуется.

\subsection{Тег \V{socket\_path}}
\hypertarget{F:register.xml,T:socket_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{socket\_path} \\
Содержится в:        & \strut\hyperlink{F:register.xml,T:register_config}{\V{register\_config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к UNIX-сокету\\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к UNIX-сокету, который
используется для связи с сервером информации о пользователях
\hyperlink{P:userlist-server}{\S{userlist-server}}.
Когда программа \hyperlink{P:register}{\S{register}} стартует,
UNIX-сокет должен существовать и быть доступным для пользователя, от имени
которого запускается программа. Как правило, это пользователь, от имени
которого работает WEB-сервер.

Правильное значение по умолчанию пути к сокету автоматически
устанавливается программой \hyperlink{P:configure}{\S{configure}}
при компиляции системы, если задана опция
\verb|--enable-socket-path|.
Поэтому явное задание данной опции не рекомендуется.

\newpage
\section{Конфигурационный файл \V{users.xml}}

Данный конфигурационный файл используется CGI-программой
\hyperlink{P:users}{\S{users}}. Содержимое файла
прочитывается один раз при старте CGI-программы, то есть каждый
раз, когда кто-либо посылает HTTP/HTTPS-запрос к серверу,
приводящий к запуску программы \S{users}.

Местоположение конфигурационного файла определяется на
этапе компиляции системы \S{ejudge} с помощью опции
\verb|--enable-cgi-conf-dir| скрипта
\hyperlink{P:configure}{\S{configure}}. Эта опция позволяет установить
каталог, в котором находятся конфигурационные файлы всех CGI-программ.
Если опция не была указана в командной строке \S{configure}, предполагается
значение по умолчанию, равное \verb|../cgi-data|.
Местоположение каталога конфигурационных файлов, задаваемого опцией
\verb|--enable-cgi-conf-dir| может быть как абсолютным, так и относительным
путём. В случае относительного пути точкой отсчёта является
каталог, в котором находится сама CGI-программа \S{users}.
Для этого используется переменная окружения \verb|SCRIPT_FILENAME|,
устанавливаемая веб-сервером при запуске CGI-программы.

{\raggedright
Таким образом, если, например, CGI-программы располагаются в каталоге
\verb|/home/httpd/cgi-bin|, то при значении пути к конфигурационным
файлам \verb|../cgi-data|, конфигурационные файлы CGI-программ
должны располагаться в каталоге \verb|/home/httpd/cgi-data|.

}

Конфигурационный файл программы \S{users} может называться
\V{users.xml} или \V{users-$N$.xml}, где $N$ --- номер турнира
(см. ниже), но и конфигурационный файл вообще может отсутствовать.
Для этого необходимо, чтобы все настройки, которые считываются
из конфигурационного файла, были установлены при компиляции системы
с помощью опций скрипта \hyperlink{P:configure}{\S{configure}}.

Чтобы конфигурационный файл программы \S{users} был необязательным,
необходимо, чтобы программа \S{users} была открыта для доступа
со всех IP-адресов (дополнительные ограничения, конечно, могут
задаваться для каждого турнира в конфигурационном файле турнира).
Кроме того, при компиляции системы \S{ejudge} необходимо указание
опций \verb|--enable-charset|, \verb|--enable-socket-path| и
\verb|--enable-conf-dir|.

Если конфигурационный файл не найден или не может быть открыт,
используется следующий встроенный конфигурационный файл
по умолчанию:
{\small
\begin{verbatim}
<?xml version="1.0" ?>
<users_config>
   <access default="allow"/>
</users_config>
\end{verbatim}
}
Опции \verb|--enable-charset|, \verb|--enable-socket-path| и
\verb|--enable-conf-dir| скрипта \hyperlink{P:configure}{\S{configure}}
позволяют в этом случае установить значения по умолчанию для остальных
необходимых элементов конфигурационного файла.

При запуске программы \S{users} вначале определяется идентификатор
турнира. Идентификатор турнира определяется либо по параметру
запроса \verb|contest_id|, либо по имени, под которым вызывается
программа \S{users}, причем параметр запроса \verb|contest_id|
имеет приоритет. В случае, когда идентификатор турнира не определен
или определен по параметру запроса \verb|contest_id|,
всегда используется конфигурационный файл \V{users.xml}.
Если конфигурационный файл не существует, то будут использоваться
значения по умолчанию. Если идентификатор турнира не может быть
определён никаким способом, программа \S{users} завершает работу
и отображает HTML-страницу
``Information by your request is not available.''

Определение идентификатора турнира по имени программы является
устаревшим механизмом и не рекомендуется для использования.
В этом случае программа \S{users} должна называться
\V{users-$N$}, где $N$ --- десятичное число-идентификатор
турнира. Этого можно добиться созданием символических или
жестких ссылок в каталоге CGI-программ веб-сервера.
Тогда сначала будет сделана попытка считать конфигурационный файл
\V{users-$N$.xml}, затем, если эта попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{users-$N'$.xml}, где $N'$ --- это число, напечатанное
с 6 десятичными знаками, включая незначащие нули, например,
\V{users-000001.xml}. Если это попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{users-$N''$.xml}, где $N''$ --- число, напечатанное
без ведущих незначащих нулей. Наконец, будет сделана попытка
считать конфигурационный файл \V{users.xml},
и в случае неуспеха будут использоваться значения по умолчанию.

Конфигурационный файл представляет собой правильный XML-файл,
элементом верхнего уровня которого является
\hyperlink{F:users.xml,T:users_config}{\V{users\_config}}.

Общая структура файла приведена ниже.

\begin{tabbing}
\hspace{1cm}\=\hspace{1cm}\=\kill
\hyperlink{F:users.xml,T:users_config}{\V{users\_config}}\\
\>\hyperlink{F:users.xml,T:access}{\V{access}}\\
\>\>\hyperlink{F:users.xml,T:ip}{\V{ip}}\\
\>\hyperlink{F:users.xml,T:contests_dir}{\V{contests\_dir}}\\
\>\hyperlink{F:users.xml,T:l10n_dir}{\V{l10n\_dir}}\\
\>\hyperlink{F:users.xml,T:socket_path}{\V{socket\_path}}\\
\end{tabbing}

Далее даётся описание всех элементов конфигурационного файла.

\subsection{Тег \V{users\_config}}
\hypertarget{F:users.xml,T:users_config}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{users\_config} \\
Содержится в:        & \I{нет}\\
Может содержать:     & \strut\hyperlink{F:users.xml,T:access}{\V{access}},
  \hyperlink{F:users.xml,T:contests_dir}{\V{contests\_dir}},
  \hyperlink{F:users.xml,T:l10n_dir}{\V{l10n\_dir}},
  \hyperlink{F:users.xml,T:socket_path}{\V{socket\_path}}\\
Атрибуты:            &
  \strut\hyperlink{F:users.xml,T:config,A:l10n}{\V{l10n}},
  \hyperlink{F:users.xml,T:config,A:charset}{\V{charset}},
  \hyperlink{F:users.xml,T:config,A:show_generation_time}{\V{show\_generation\_time}}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

\B{Описание.} Тег верхнего уровня конфигурационного файла.

\subsubsection{Атрибут \V{l10n}}
\hypertarget{F:users.xml,T:config,A:l10n}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{l10n} \\
Содержится в:          & \strut\hyperlink{F:users.xml,T:users_config}{\V{users\_config}} \\
Тип значения:          & \I{boolean} \\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}} \\
Может отсутствовать:   & \I{да} \\
Примечание:            & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный атрибут включает поддержку локализации
интерфейса. Если его значение установлено в \I{true}, CGI-программа
\hyperlink{P:users}{\S{users}} считывает значение
параметра \V{locale\_id} и переключает язык интерфейса
в зависимости от значения параметра.
Подробнее вопросы локализации системы рассматриваются в
разделе \ref{sectionLocalization}.

Логическое значение \I{true} задаётся с помощью строк \V{1}, \V{yes}
или \V{true}, а логическое значение \I{false} ---
с помощью строк \V{0}, \V{no}, \V{false}.

Явно устанавливать данный атрибут не рекомендуется. Для запрета
локализации системы предпочтительнее использовать
опцию \verb|--disable-nls| скрипта \hyperlink{P:configure}{\S{configure}}
при компиляции системы \S{ejudge}.

\subsubsection{Атрибут \V{charset}}
\hypertarget{F:users.xml,T:users_config,A:charset}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{charset} \\
Содержится в:          & \strut\hyperlink{F:users.xml,T:users_config}{\V{users\_config}} \\
Тип значения:          & \I{string} \\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать:   & \I{да} \\
Примечание:            & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный атрибут позволяет задавать кодировку,
которая будет проставляться в заголовке всех генерируемых страниц.
Обратите внимание, что в текущей версии кодировка проставляется
вне зависимости от языка интерфейса.

Использование данного атрибута не рекомендуется. Предпочтительнее
устанавливать кодировку по умолчанию с помощью опции
\verb|--enable-charset| скрипта \hyperlink{P:configure}{\S{configure}}.

\subsubsection{Атрибут \V{show\_generation\_time}}
\hypertarget{F:users.xml,T:users_config,A:show_generation_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{show\_generation\_time} \\
Содержится в:          & \strut\hyperlink{F:users.xml,T:users_config}{\V{users\_config}} \\
Тип значения:          & \I{boolean} \\
Значение по умолчанию: & \V{false} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Если данный атрибут установлен в \I{true},
генерируемые html-страницы будут содержать информацию о процессорном
времени в миллисекундах, затраченном на генерацию каждой страницы.
Например, если язык интерфейса --- английский, сообщение будет
иметь примерно следующий вид:
{\small
\begin{verbatim}
Page generation time: 37 msec
\end{verbatim}
}

\subsection{Тег \V{access}}
\hypertarget{F:users.xml,T:access}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{access} \\
Содержится в:        &
  \strut\hyperlink{F:users.xml,T:users_config}{\V{users\_config}}\\
Может содержать:     & \strut\hyperlink{F:users.xml,T:ip}{\V{ip}}\\
Атрибуты:            &
  \strut\hyperlink{F:users.xml,T:access,A:default}{\V{default}}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

\B{Описание.} Данный элемент позволяет задавать ограничения на IP-адреса,
с которых производится обращение к CGI-программе \S{users}.
Ограничения, заданные в этом конфигурационном файле, проверяются
до вывода регистрационной страницы и действуют на все турниры,
определённые в системе. Эти ограничения могут использоваться для
запрещения любого доступа к системе от <<нежелательных>> IP-адресов.
Каждый турнир может накладывать дополнительные ограничения.
Они задаются с помощью
элемента \hyperlink{F:contest.xml,T:users_access}{\V{users\_access}}
конфигурационного файла \hyperlink{F:contest.xml}{\V{contest.xml}}.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsubsection{Атрибут \V{default}}
\hypertarget{F:users.xml,T:access,A:default}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{default} \\
Содержится в:          & \strut\hyperlink{F:users.xml,T:access}{\V{access}} \\
Тип значения:          & \I{allow} или \I{deny} \\
Значение по умолчанию: & \I{deny} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Данный атрибут задаёт права доступа в случае, если
IP-адрес клиента не перечислен в списке IP-адресов. Если
атрибут установлен в \I{allow}, такие IP-адреса считаются допустимыми,
а если атрибут установлен в \I{deny}, доступ с таких IP-адресов
запрещается.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsection{Тег \V{ip}}
\hypertarget{F:users.xml,T:ip}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{ip} \\
Содержится в:        & \strut\hyperlink{F:users.xml,T:access}{\V{access}}\\
Может содержать:     & \I{нет} \\
Атрибуты:            & \strut\hyperlink{F:users.xml,T:ip,A:allow}{\V{allow}}\\
Тип содержимого:     & шаблон IP-адреса\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{да}\\
\end{tabular}

\B{Описание.} Данный элемент определяет права доступа для клиентов с
заданным шаблоном IP-адреса. Если атрибут \V{allow} установлен
в \I{true}, таким клиентам разрешается работа с CGI-программой
\S{users}.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsubsection{Атрибут \V{allow}}
\hypertarget{F:users.xml,T:ip,A:allow}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{allow} \\
Содержится в:          & \strut\hyperlink{F:users.xml,T:access}{\V{access}} \\
Тип значения:          & \I{boolean} \\
Значение по умолчанию: & \I{false} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Данный атрибут задаёт права доступа в случае, если
IP-адрес клиента удовлетворяет спецификации IP-адреса в данном
элементе. Если значение атрибута равно
\I{true}, такой IP-адрес считаются допустимым,
а если значение атрибут установлено в \I{false}, доступ с этого IP-адреса
запрещается.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsubsection{Атрибут \V{ssl}}
\hypertarget{F:users.xml,T:ip,A:ssl}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{ssl} \\
Содержится в:          & \strut\hyperlink{F:users.xml,T:access}{\V{access}} \\
Тип значения:          & \V{any}, \V{no}, \V{yes} \\
Значение по умолчанию: & \V{any} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.}
Данный атрибут устанавливает флаг того, относится ли данное правило
проверки IP-адресов к защищенным соединениям или нет.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsection{Тег \V{l10n\_dir}}
\hypertarget{F:users.xml,T:l10n_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{l10n\_dir} \\
Содержится в:        & \strut\hyperlink{F:users.xml,T:regiter\_config}{\V{users\_config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к каталогу\\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к каталогу, в котором
хранятся локализованные сообщения.
Для локализации сообщений используется \S{GNU gettext}.
См. раздел \ref{sectionLocalization} для информации о локализации системы.

Корректный путь устанавливается автоматически при компиляции системы
с помощью скрипта \hyperlink{P:configure}{\S{configure}}, поэтому
явное использование этого элемента не рекомендуется.

\subsection{Тег \V{contests\_dir}}
\hypertarget{F:users.xml,T:contests_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{contests\_dir} \\
Содержится в:        & \strut\hyperlink{F:users.xml,T:users_config}{\V{users\_config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к каталогу\\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к каталогу, в котором
хранятся описания турниров
\hyperlink{F:contest.xml}{\V{contest.xml}}.
Каждое описание турнира находится
в отдельном файле с именем, равным шестизначному номеру
турнира, например, \V{000001.xml}.

Правильное значение по умолчанию
пути к каталогу описания турниров автоматически
устанавливается программой \hyperlink{P:configure}{\S{configure}}
при компиляции системы, используя значения опций
\verb|--enable-conf-dir| или \verb|--enable-contests-home-dir|.
Поэтому явное задание данной опции не рекомендуется.

\subsection{Тег \V{socket\_path}}
\hypertarget{F:users.xml,T:socket_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{socket\_path} \\
Содержится в:        & \strut\hyperlink{F:users.xml,T:users_config}{\V{users\_config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к UNIX-сокету\\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к UNIX-сокету, который
используется для связи с сервером информации о пользователях
\hyperlink{P:userlist-server}{\S{userlist-server}}.
Когда программа \hyperlink{P:users}{\S{users}} стартует,
UNIX-сокет должен существовать и быть доступным для пользователя, от имени
которого запускается программа. Как правило, это пользователь, от имени
которого работает WEB-сервер.

Правильное значение по умолчанию пути к сокету автоматически
устанавливается программой \hyperlink{P:configure}{\S{configure}}
при компиляции системы, если задана опция
\verb|--enable-socket-path|.
Поэтому явное задание данной опции не рекомендуется.

\newpage
\section{Конфигурационный файл \V{serve-control.xml}}
\hypertarget{F:serve-control.xml}{}

Данный конфигурационный файл используется CGI-программой
\hyperlink{P:serve-control}{\S{serve-control}}. Содержимое файла
прочитывается один раз при старте CGI-программы, то есть каждый
раз, когда кто-либо посылает HTTP/HTTPS-запрос к серверу,
приводящий к запуску программы \S{serve-control}.

Местоположение конфигурационного файла определяется на
этапе компиляции системы \S{ejudge} с помощью опции
\verb|--enable-cgi-conf-dir| скрипта
\hyperlink{P:configure}{\S{configure}}. Эта опция позволяет установить
каталог, в котором находятся конфигурационные файлы всех CGI-программ.
Если опция не была указана в командной строке \S{configure}, предполагается
значение по умолчанию, равное \verb|../cgi-data|.
Местоположение каталога конфигурационных файлов, задаваемого опцией
\verb|--enable-cgi-conf-dir| может быть как абсолютным, так и относительным
путём. В случае относительного пути точкой отсчёта является
каталог, в котором находится сама CGI-программа \S{serve-control}.
Для этого используется переменная окружения \verb|SCRIPT_FILENAME|,
устанавливаемая веб-сервером при запуске CGI-программы.

{\raggedright
Таким образом, если, например, CGI-программы располагаются в каталоге
\verb|/home/httpd/cgi-bin|, то при значении пути к конфигурационным
файлам \verb|../cgi-data|, конфигурационные файлы CGI-программ
должны располагаться в каталоге \verb|/home/httpd/cgi-data|.

}

Конфигурационный файл программы \S{serve-control} называется
\V{serve-control.xml}, но и конфигурационный файл вообще может отсутствовать.
Для этого необходимо, чтобы все настройки, которые считываются
из конфигурационного файла, были установлены при компиляции системы
с помощью опций скрипта \hyperlink{P:configure}{\S{configure}}.

Чтобы конфигурационный файл программы \S{serve-control} был необязательным,
необходимо, чтобы программа \S{serve-control} была открыта для доступа
со всех IP-адресов (дополнительные ограничения, конечно, могут
задаваться для каждого турнира в конфигурационном файле турнира).
Кроме того, при компиляции системы \S{ejudge} необходимо указание
опций \verb|--enable-charset|, \verb|--enable-socket-path|,
\verb|--enable-super-serve-socket| и \verb|--enable-conf-dir|.
Тем не менее, рекомендуется создавать
этот конфигурационный файл и устанавливать жёсткие ограничения на
разрешенные IP-адреса для доступа к \S{serve-control}.

Если конфигурационный файл не найден или не может быть открыт,
используется следующий встроенный конфигурационный файл
по умолчанию:
{\small
\begin{verbatim}
<?xml version="1.0" ?>
<serve_control_config>
   <serve_control_access default="allow"/>
</serve_control_config>
\end{verbatim}
}
Опции \verb|--enable-charset|, \verb|--enable-socket-path|,
\verb|--enable-super-serve-socket| и
\verb|--enable-conf-dir| скрипта \hyperlink{P:configure}{\S{configure}}
позволяют в этом случае установить значения по умолчанию для остальных
необходимых элементов конфигурационного файла.

Конфигурационный файл представляет собой правильный XML-файл,
элементом верхнего уровня которого является
\hyperlink{F:users.xml,T:serve_control_config}{\V{serve\_control\_config}}.

Общая структура файла приведена ниже.

\begin{tabbing}
\hspace{1cm}\=\hspace{1cm}\=\kill
\hyperlink{F:serve-control.xml,T:serve_control_config}{\V{serve\_control\_config}}\\
\>\hyperlink{F:serve-control.xml,T:serve_control_access}{\V{serve\_control\_access}}\\
\>\>\hyperlink{F:serve-control.xml,T:ip}{\V{ip}}\\
\>\hyperlink{F:serve-control.xml,T:charset}{\V{charset}}\\
\>\hyperlink{F:serve-control.xml,T:contests_dir}{\V{contests\_dir}}\\
\>\hyperlink{F:serve-control.xml,T:socket_path}{\V{socket\_path}}\\
\>\hyperlink{F:serve-control.xml,T:super_serve_socket}{\V{super\_serve\_socket}}\\
\end{tabbing}

Далее даётся описание всех элементов конфигурационного файла.

\subsection{Тег \V{serve\_control\_config}}
\hypertarget{F:users.xml,T:serve_control_config}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{serve\_control\_config} \\
Содержится в:        & \I{нет}\\
Может содержать:     & {\raggedright\strut\hyperlink{F:serve-control.xml,T:serve_control_access}{\V{serve\_control\_access}},
  \hyperlink{F:users.xml,T:contests_dir}{\V{contests\_dir}},
  \hyperlink{F:users.xml,T:socket_path}{\V{socket\_path}},
  \hyperlink{F:users.xml,T:super_serve_socket}{\V{super\_serve\_socket}},
  \hyperlink{F:users.xml,T:charset}{\V{charset}}\par}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

\B{Описание.} Тег верхнего уровня конфигурационного файла.

\subsection{Тег \V{serve\_control\_access}}
\hypertarget{F:serve-control.xml,T:serve_control_access}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{serve\_control\_access} \\
Содержится в:        &
  \strut\hyperlink{F:serve-control.xml,T:serve_control_config}{\V{serve\_control\_config}}\\
Может содержать:     & \strut\hyperlink{F:serve-control.xml,T:ip}{\V{ip}}\\
Атрибуты:            &
  \strut\hyperlink{F:serve-control.xml,T:access,A:default}{\V{default}}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

\B{Описание.} Данный элемент позволяет задавать ограничения на IP-адреса,
с которых производится обращение к CGI-программе \S{serve-control}.
Ограничения, заданные в этом конфигурационном файле, проверяются
до вывода регистрационной страницы и действуют на все турниры,
определённые в системе. Эти ограничения могут использоваться для
запрещения любого доступа к системе от <<нежелательных>> IP-адресов.
Каждый турнир может накладывать дополнительные ограничения.
Они задаются с помощью
элемента \hyperlink{F:contest.xml,T:serve_control_access}{\V{serve\_control\_access}}
конфигурационного файла \hyperlink{F:contest.xml}{\V{contest.xml}}.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsubsection{Атрибут \V{default}}
\hypertarget{F:serve-control.xml,T:access,A:default}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{default} \\
Содержится в:          & \strut\hyperlink{F:serve-control.xml,T:serve_control_access}{\V{serve\_control\_access}} \\
Тип значения:          & \I{allow} или \I{deny} \\
Значение по умолчанию: & \I{deny} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Данный атрибут задаёт права доступа в случае, если
IP-адрес клиента не перечислен в списке IP-адресов. Если
атрибут установлен в \I{allow}, такие IP-адреса считаются допустимыми,
а если атрибут установлен в \I{deny}, доступ с таких IP-адресов
запрещается.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsection{Тег \V{ip}}
\hypertarget{F:serve-control.xml,T:ip}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{ip} \\
Содержится в:        & \strut\hyperlink{F:serve-control.xml,T:serve_control_access}{\V{serve\_control\_access}}\\
Может содержать:     & \I{нет} \\
Атрибуты:            & \strut\hyperlink{F:serve-control.xml,T:ip,A:allow}{\V{allow}},
  \hyperlink{F:serve-control.xml,T:ip,A:ssl}{\V{ssl}}\\
Тип содержимого:     & шаблон IP-адреса\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{да}\\
\end{tabular}

\B{Описание.} Данный элемент определяет права доступа для клиентов с
заданным шаблоном IP-адреса. Если атрибут \V{allow} установлен
в \I{true}, таким клиентам разрешается работа с CGI-программой
\S{serve-control}.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsubsection{Атрибут \V{allow}}
\hypertarget{F:serve-control.xml,T:ip,A:allow}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{allow} \\
Содержится в:          & \strut\hyperlink{F:serve-control.xml,T:serve\_control\_access}{\V{ip}} \\
Тип значения:          & \I{boolean} \\
Значение по умолчанию: & \I{false} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.} Данный атрибут задаёт права доступа в случае, если
IP-адрес клиента удовлетворяет спецификации IP-адреса в данном
элементе. Если значение атрибута равно
\I{true}, такой IP-адрес считаются допустимым,
а если значение атрибут установлено в \I{false}, доступ с этого IP-адреса
запрещается.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsubsection{Атрибут \V{ssl}}
\hypertarget{F:serve-control.xml,T:ip,A:ssl}{}

\begin{tabular}{@{}>{\bfseries}lp{10cm}}
Имя атрибута:          & \K{ssl} \\
Содержится в:          & \strut\hyperlink{F:serve-control.xml,T:ip}{\V{ip}} \\
Тип значения:          & \V{any}, \V{no}, \V{yes} \\
Значение по умолчанию: & \V{any} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}

\B{Описание.}
Данный атрибут устанавливает флаг того, относится ли данное правило
проверки IP-адресов к защищенным соединениям или нет.
См. подробное описание ограничений IP-адреса в разделе
\ref{sectionIPAddressLimitation}.

\subsection{Тег \V{contests\_dir}}
\hypertarget{F:serve-control.xml,T:contests_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{contests\_dir} \\
Содержится в:        & \strut\hyperlink{F:serve-control.xml,T:serve_control_config}{\V{serve\_control\_config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к каталогу\\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к каталогу, в котором
хранятся описания турниров
\hyperlink{F:contest.xml}{\V{contest.xml}}.
Каждое описание турнира находится
в отдельном файле с именем, равным шестизначному номеру
турнира, например, \V{000001.xml}.

Правильное значение по умолчанию
пути к каталогу описания турниров автоматически
устанавливается программой \hyperlink{P:configure}{\S{configure}}
при компиляции системы, используя значения опций
\verb|--enable-conf-dir| или \verb|--enable-contests-home-dir|.
Поэтому явное задание данной опции не рекомендуется.

\subsection{Тег \V{socket\_path}}
\hypertarget{F:serve-control.xml,T:socket_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{socket\_path} \\
Содержится в:        & \strut\hyperlink{F:serve-control.xml,T:serve_control_config}{\V{serve\_control\_config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к UNIX-сокету\\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к UNIX-сокету, который
используется для связи с сервером информации о пользователях
\hyperlink{P:userlist-server}{\S{userlist-server}}.
Когда программа \hyperlink{P:serve-control}{\S{serve-control}} стартует,
UNIX-сокет должен существовать и быть доступным для пользователя, от имени
которого запускается программа. Как правило, это пользователь, от имени
которого работает WEB-сервер.

Правильное значение по умолчанию пути к сокету автоматически
устанавливается программой \hyperlink{P:configure}{\S{configure}}
при компиляции системы, если задана опция
\verb|--enable-socket-path|.
Поэтому явное задание данной опции не рекомендуется.

\subsection{Тег \V{super\_serve\_socket}}
\hypertarget{F:serve-control.xml,T:super_serve_socket}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{super\_serve\_socket} \\
Содержится в:        & \strut\hyperlink{F:serve-control.xml,T:serve_control_config}{\V{serve\_control\_config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & путь к UNIX-сокету\\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к UNIX-сокету, который
используется для связи с сервером управления турнирами
\hyperlink{P:super-serve}{\S{super-serve}}.
Когда программа \hyperlink{P:serve-control}{\S{serve-control}} стартует,
UNIX-сокет должен существовать и быть доступным для пользователя, от имени
которого запускается программа. Как правило, это пользователь, от имени
которого работает WEB-сервер.

Правильное значение по умолчанию пути к сокету автоматически
устанавливается программой \hyperlink{P:configure}{\S{configure}}
при компиляции системы, если задана опция
\verb|--enable-super-serve-socket|.
Поэтому явное задание данной опции не рекомендуется.

\subsection{Тег \V{charset}}
\hypertarget{F:serve-control.xml,T:charset}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{charset} \\
Содержится в:        & \strut\hyperlink{F:serve-control.xml,T:serve_control_config}{\V{serve\_control\_config}}\\
Может содержать:     & \I{нет}\\
Атрибуты:            & \I{нет}\\
Тип содержимого:     & кодировка генерируемых HTML страниц\\
Значение по умолчанию: & устанавливается \hyperlink{P:configure}{\S{configure}}\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{нет}\\
Примечание:          & явное использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный элемент позволяет задавать кодировку,
которая будет проставляться в заголовке всех генерируемых страниц.
Обратите внимание, что в текущей версии кодировка проставляется
вне зависимости от языка интерфейса.

Использование данного атрибута не рекомендуется. Предпочтительнее
устанавливать кодировку по умолчанию с помощью опции
\verb|--enable-charset| скрипта \hyperlink{P:configure}{\S{configure}}.

\newpage
\section{Конфигурационный файл \V{master.cfg}}
\hypertarget{F:master.cfg}{}

Данный конфигурационный файл используется CGI-программой
\hyperlink{P:master}{\S{master}}. Содержимое файла
прочитывается один раз при старте CGI-программы, то есть каждый
раз, когда кто-либо посылает HTTP/HTTPS-запрос к серверу,
приводящий к запуску программы \S{master}.

Местоположение конфигурационного файла определяется на
этапе компиляции системы \S{ejudge} с помощью опции
\verb|--enable-cgi-conf-dir| скрипта
\hyperlink{P:configure}{\S{configure}}. Эта опция позволяет установить
каталог, в котором находятся конфигурационные файлы всех CGI-программ.
Если опция не была указана в командной строке \S{configure}, предполагается
значение по умолчанию, равное \verb|../cgi-data|.
Местоположение каталога конфигурационных файлов, задаваемого опцией
\verb|--enable-cgi-conf-dir| может быть как абсолютным, так и относительным
путём. В случае относительного пути точкой отсчёта является
каталог, в котором находится сама CGI-программа \S{master}.
Для этого используется переменная окружения \verb|SCRIPT_FILENAME|,
устанавливаемая веб-сервером при запуске CGI-программы.

{\raggedright
Таким образом, если, например, CGI-программы располагаются в каталоге
\verb|/home/httpd/cgi-bin|, то при значении пути к конфигурационным
файлам \verb|../cgi-data|, конфигурационные файлы CGI-программ
должны располагаться в каталоге \verb|/home/httpd/cgi-data|.

}

Конфигурационный файл программы \S{master} может называться
\V{master.cfg} или \V{master-$N$.cfg}, где $N$ --- номер турнира
(см. ниже), но и конфигурационный файл вообще может отсутствовать.
Для этого необходимо, чтобы все настройки, которые считываются
из конфигурационного файла, были установлены при компиляции системы
с помощью опций скрипта \hyperlink{P:configure}{\S{configure}}.

Чтобы конфигурационный файл программы \S{master} был необязательным,
необходимо, чтобы программа \S{master} была открыта для доступа
со всех IP-адресов (дополнительные ограничения, конечно, могут
задаваться для каждого турнира в конфигурационном файле турнира).
Кроме того, при компиляции системы \S{ejudge} необходимо указание
опций \verb|--enable-charset|, \verb|--enable-socket-path| и
\verb|--enable-conf-dir|.

При запуске программы \S{master} вначале определяется идентификатор
турнира. Идентификатор турнира определяется либо по параметру
запроса \verb|contest_id|, либо по имени, под которым вызывается
программа \S{master}, причем параметр запроса \verb|contest_id|
имеет приоритет. В случае, когда идентификатор турнира не определен
или определен по параметру запроса \verb|contest_id|,
всегда используется конфигурационный файл \V{master.cfg}.
Если конфигурационный файл не существует, то будут использоваться
значения по умолчанию.

Определение идентификатора турнира по имени программы является
устаревшим механизмом и не рекомендуется для использования.
В этом случае программа \S{master} должна называться
\V{master-$N$}, где $N$ --- десятичное число-идентификатор
турнира. Этого можно добиться созданием символических или
жестких ссылок в каталоге CGI-программ веб-сервера.
Тогда сначала будет сделана попытка считать конфигурационный файл
\V{master-$N$.cfg}, затем, если эта попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{master-$N'$.cfg}, где $N'$ --- это число, напечатанное
с 6 десятичными знаками, включая незначащие нули, например,
\V{master-000001.cfg}. Если это попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{master-$N''$.cfg}, где $N''$ --- число, напечатанное
без ведущих незначащих нулей. Наконец, будет сделана попытка
считать конфигурационный файл \V{master.cfg},
и в случае неуспеха будут использоваться значения по умолчанию.

Конфигурационный файл \V{master.cfg} имеет текстовый формат,
напоминающий формат \V{.ini}-файлов. Каждый конфигурационный
параметр задаётся в виде 
{\small
\begin{verbatim}
<имя параметра> = <значение>
\end{verbatim}
}
где \V{<имя параметра>} может состоять из латинских заглавных и
строчных букв, цифр и знака подчёркивания. \V{<значение>} должно
заключаться в кавычки, если оно содержит пробельные символы, но
может быть задано и без кавычек, если оно состоит из
единственного слова. Пробельные символы в начале и конце строки
и вокруг знака \V{"="} игнорируются. Комментарии в
конфигурационном файле начинаются с символов \V{\#} или \V{;} и
продолжаются до конца строки.

Параметры конфигурационного файла перечислены ниже.

\subsection{Параметр \V{allow\_deny}}
\hypertarget{F:master.cfg,T:allow_deny}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{allow\_deny} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{true} \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Пример:                & См. раздел \ref{sectionMasterCFGDenyFrom}\\
Примечание:            & Ограничения на допустимые IP-адреса
                         рекомендуется задавать в конфигурационном
                         файле турнира. \\
\end{tabular}

\subsection{Параметр \V{allow\_from}}
\hypertarget{F:master.cfg,T:allow_from}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{allow\_from} \\
Тип содержимого:       & \strut\hyperlink{F:all.cfg,T:allow_deny}{\I{спецификация IP-ограничений}}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & пустая строка \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Пример:                & См. раздел \ref{sectionMasterCFGDenyFrom} \\
Примечание:            & Ограничения на допустимые IP-адреса
                         рекомендуется задавать в конфигурационном
                         файле турнира. \\
\end{tabular}

\subsection{Параметр \V{deny\_from}}
\label{sectionMasterCFGDenyFrom}
\hypertarget{F:master.cfg,T:deny_from}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{deny\_from} \\
Тип содержимого:       & \strut\hyperlink{F:all.cfg,T:allow_deny}{\I{спецификация IP-ограничений}}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & пустая строка \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Примечание:            & Ограничения на допустимые IP-адреса
                         рекомендуется задавать в конфигурационном
                         файле турнира. \\
\end{tabular}

\B{Пример.}
{\small
\begin{verbatim}
allow_deny = 1
allow_from = "192.168.0.1 192.168.1."
deny_from = "192.168."
\end{verbatim}
}

\subsection{Параметр \V{charset}}
\hypertarget{F:master.cfg,T:charset}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{charset} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Примечания:            & использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный параметр задаёт название кодировки, которое будет
помещаться в http-заголовок генерируемой страницы. Полная информация
о локализации системы \S{ejudge} приведена
в разделе \ref{sectionCharsetSupport}.

Рекомендуется устанавливать кодировку по умолчанию с помощью опции
\verb|--enable-charset| программы
\hyperlink{P:configure}{\S{configure}} при компиляции системы
\S{ejudge}. Поэтому использование данного параметра в конфигурационном
файле не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
charset = "koi8-r"
\end{verbatim}
}

\subsection{Параметр \V{enable\_l10n}}
\hypertarget{F:master.cfg,T:enable_l10n}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{enable\_l10n} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionL10nSupport}\\
Пример:                & См. раздел \ref{sectionMasterCFGL10nDir}\\
Замечание:             & В текущей версии программы \S{master}
                         данный параметр не имеет никакого эффекта.\\
\end{tabular}

\subsection{Параметр \V{l10n\_dir}}
\label{sectionMasterCFGL10nDir}
\hypertarget{F:master.cfg,T:l10n_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{l10n\_dir} \\
Тип содержимого:       & путь к каталогу\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionL10nSupport}\\
Замечание:             & В текущей версии программы \S{master}
                         данный параметр не имеет никакого эффекта.\\
\end{tabular}

Если параметр \V{enable\_l10n} установлен в \I{true}, а параметр
\V{l10n\_dir}
не задан, локализация сообщений принудительно отключается.

\B{Пример.}
{\small
\begin{verbatim}
enable_l10n
l10n_dir = "/usr/share/locale"
\end{verbatim}
}

\subsection{Параметр \V{socket\_path}}
\hypertarget{F:master.cfg,T:socket_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{socket\_path} \\
Тип содержимого:       & путь к UNIX-сокету\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Примечание:            & использование не рекомендуется\\
\end{tabular}

\B{Описание.}
Данный параметр задаёт путь к UNIX-сокету, который
используется для связи с программой-сервером базы пользователей
\hyperlink{P:userlist-server}{\S{userlist-server}}. В момент
запуска программы \S{master} сокет должен существовать.

Рекомендуется устанавливать путь к управляющему сокету при
компиляции системы \S{ejudge} с помощью опции
\verb|--enable-socket-path| скрипта \hyperlink{P:configure}{\S{configure}}.
В этом случае параметр \verb|socket_path| в конфигурационном файле
использоваться не должен.

\B{Пример.}
{\small
\begin{verbatim}
<socket_path>/var/ejudge/userlist-socket</socket_path>
\end{verbatim}
}

\subsection{Параметр \V{contests\_dir}}
\hypertarget{F:master.cfg,T:contests_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{contests\_dir} \\
Тип содержимого:       & путь к каталогу\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Примечание:            & использование не рекомендуется\\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к каталогу, в котором
хранятся описания турниров
\hyperlink{F:contest.xml}{\V{contest.xml}}.
Каждое описание турнира находится
в отдельном файле с именем, равным шестизначному номеру
турнира, например, \V{000001.xml}.

Рекомендуется устанавливать путь к каталогу описания турниров
компиляции системы \S{ejudge} с помощью опции
\verb|--enable-conf-dir|
скрипта \hyperlink{P:configure}{\S{configure}}.
В этом случае параметр \verb|contests_dir| в конфигурационном файле
использоваться не должен.

\B{Пример.}
{\small
\begin{verbatim}
contests_dir = "/var/ejudge/contests"
\end{verbatim}
}

\newpage
\section{Конфигурационный файл \V{judge.cfg}}
\hypertarget{F:judge.cfg}{}

Данный конфигурационный файл используется CGI-программой
\hyperlink{P:judge}{\S{judge}}. Содержимое файла
прочитывается один раз при старте CGI-программы, то есть каждый
раз, когда кто-либо посылает HTTP/HTTPS-запрос к серверу,
приводящий к запуску программы \S{judge}.

Местоположение конфигурационного файла определяется на
этапе компиляции системы \S{ejudge} с помощью опции
\verb|--enable-cgi-conf-dir| скрипта
\hyperlink{P:configure}{\S{configure}}. Эта опция позволяет установить
каталог, в котором находятся конфигурационные файлы всех CGI-программ.
Если опция не была указана в командной строке \S{configure}, предполагается
значение по умолчанию, равное \verb|../cgi-data|.
Местоположение каталога конфигурационных файлов, задаваемого опцией
\verb|--enable-cgi-conf-dir| может быть как абсолютным, так и относительным
путём. В случае относительного пути точкой отсчёта является
каталог, в котором находится сама CGI-программа \S{judge}.
Для этого используется переменная окружения \verb|SCRIPT_FILENAME|,
устанавливаемая веб-сервером при запуске CGI-программы.

{\raggedright
Таким образом, если, например, CGI-программы располагаются в каталоге
\verb|/home/httpd/cgi-bin|, то при значении пути к конфигурационным
файлам \verb|../cgi-data|, конфигурационные файлы CGI-программ
должны располагаться в каталоге \verb|/home/httpd/cgi-data|.

}

Конфигурационный файл программы \S{judge} может называться
\V{judge.cfg} или \V{judge-$N$.cfg}, где $N$ --- номер турнира
(см. ниже), но и конфигурационный файл вообще может отсутствовать.
Для этого необходимо, чтобы все настройки, которые считываются
из конфигурационного файла, были установлены при компиляции системы
с помощью опций скрипта \hyperlink{P:configure}{\S{configure}}.

Чтобы конфигурационный файл программы \S{judge} был необязательным,
необходимо, чтобы программа \S{judge} была открыта для доступа
со всех IP-адресов (дополнительные ограничения, конечно, могут
задаваться для каждого турнира в конфигурационном файле турнира).
Кроме того, при компиляции системы \S{ejudge} необходимо указание
опций \verb|--enable-charset|, \verb|--enable-socket-path| и
\verb|--enable-conf-dir|.

При запуске программы \S{judge} вначале определяется идентификатор
турнира. Идентификатор турнира определяется либо по параметру
запроса \verb|contest_id|, либо по имени, под которым вызывается
программа \S{judge}, причем параметр запроса \verb|contest_id|
имеет приоритет. В случае, когда идентификатор турнира не определен
или определен по параметру запроса \verb|contest_id|,
всегда используется конфигурационный файл \V{judge.cfg}.
Если конфигурационный файл не существует, то будут использоваться
значения по умолчанию.

Определение идентификатора турнира по имени программы является
устаревшим механизмом и не рекомендуется для использования.
В этом случае программа \S{judge} должна называться
\V{judge-$N$}, где $N$ --- десятичное число-идентификатор
турнира. Этого можно добиться созданием символических или
жестких ссылок в каталоге CGI-программ веб-сервера.
Тогда сначала будет сделана попытка считать конфигурационный файл
\V{judge-$N$.cfg}, затем, если эта попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{judge-$N'$.cfg}, где $N'$ --- это число, напечатанное
с 6 десятичными знаками, включая незначащие нули, например,
\V{judge-000001.cfg}. Если это попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{judge-$N''$.cfg}, где $N''$ --- число, напечатанное
без ведущих незначащих нулей. Наконец, будет сделана попытка
считать конфигурационный файл \V{judge.cfg},
и в случае неуспеха будут использоваться значения по умолчанию.

Конфигурационный файл \V{judge.cfg} имеет текстовый формат,
напоминающий формат \V{.ini}-файлов. Каждый конфигурационный
параметр задаётся в виде 
{\small
\begin{verbatim}
<имя параметра> = <значение>
\end{verbatim}
}
где \V{<имя параметра>} может состоять из латинских заглавных и
строчных букв, цифр и знака подчёркивания. \V{<значение>} должно
заключаться в кавычки, если оно содержит пробельные символы, но
может быть задано и без кавычек, если оно состоит из
единственного слова. Пробельные символы в начале и конце строки
и вокруг знака \V{"="} игнорируются. Комментарии в
конфигурационном файле начинаются с символов \V{\#} или \V{;} и
продолжаются до конца строки.

Параметры конфигурационного файла перечислены ниже.

\subsection{Параметр \V{allow\_deny}}
\hypertarget{F:judge.cfg,T:allow_deny}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{allow\_deny} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{true} \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Пример:                & См. раздел \ref{sectionJudgeCFGDenyFrom}\\
Примечание:            & Ограничения на допустимые IP-адреса
                         рекомендуется задавать в конфигурационном
                         файле турнира. \\
\end{tabular}

\subsection{Параметр \V{allow\_from}}
\hypertarget{F:judge.cfg,T:allow_from}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{allow\_from} \\
Тип содержимого:       & \strut\hyperlink{F:all.cfg,T:allow_deny}{\I{спецификация IP-ограничений}}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & пустая строка \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Пример:                & См. раздел \ref{sectionJudgeCFGDenyFrom} \\
Примечание:            & Ограничения на допустимые IP-адреса
                         рекомендуется задавать в конфигурационном
                         файле турнира. \\
\end{tabular}

\subsection{Параметр \V{deny\_from}}
\label{sectionJudgeCFGDenyFrom}
\hypertarget{F:judge.cfg,T:deny_from}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{deny\_from} \\
Тип содержимого:       & \strut\hyperlink{F:all.cfg,T:allow_deny}{\I{спецификация IP-ограничений}}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & пустая строка \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Примечание:            & Ограничения на допустимые IP-адреса
                         рекомендуется задавать в конфигурационном
                         файле турнира. \\
\end{tabular}

\B{Пример.}
{\small
\begin{verbatim}
allow_deny = 1
allow_from = "192.168.0.1 192.168.1."
deny_from = "192.168."
\end{verbatim}
}

\subsection{Параметр \V{charset}}
\hypertarget{F:judge.cfg,T:charset}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{charset} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Примечания:            & использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный параметр задаёт название кодировки, которое будет
помещаться в http-заголовок генерируемой страницы. Полная информация
о локализации системы \S{ejudge} приведена
в разделе \ref{sectionCharsetSupport}.

Рекомендуется устанавливать кодировку по умолчанию с помощью опции
\verb|--enable-charset| программы
\hyperlink{P:configure}{\S{configure}} при компиляции системы
\S{ejudge}. Поэтому использование данного параметра в конфигурационном
файле не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
charset = "koi8-r"
\end{verbatim}
}

\subsection{Параметр \V{enable\_l10n}}
\hypertarget{F:judge.cfg,T:enable_l10n}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{enable\_l10n} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionL10nSupport}\\
Пример:                & См. раздел \ref{sectionJudgeCFGL10nDir}\\
Замечание:             & В текущей версии программы \S{judge}
                         данный параметр не имеет никакого эффекта.\\
\end{tabular}

\subsection{Параметр \V{l10n\_dir}}
\label{sectionJudgeCFGL10nDir}
\hypertarget{F:judge.cfg,T:l10n_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{l10n\_dir} \\
Тип содержимого:       & путь к каталогу\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionL10nSupport}\\
Замечание:             & В текущей версии программы \S{judge}
                         данный параметр не имеет никакого эффекта.\\
\end{tabular}

Если параметр \V{enable\_l10n} установлен в \I{true}, а параметр
\V{l10n\_dir}
не задан, локализация сообщений принудительно отключается.

\B{Пример.}
{\small
\begin{verbatim}
enable_l10n
l10n_dir = "/usr/share/locale"
\end{verbatim}
}

\subsection{Параметр \V{socket\_path}}
\hypertarget{F:judge.cfg,T:socket_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{socket\_path} \\
Тип содержимого:       & путь к UNIX-сокету\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Примечание:            & использование не рекомендуется\\
\end{tabular}

\B{Описание.}
Данный параметр задаёт путь к UNIX-сокету, который
используется для связи с программой-сервером базы пользователей
\hyperlink{P:userlist-server}{\S{userlist-server}}. В момент
запуска программы \S{judge} сокет должен существовать.

Рекомендуется устанавливать путь к управляющему сокету при
компиляции системы \S{ejudge} с помощью опции
\verb|--enable-socket-path| скрипта \hyperlink{P:configure}{\S{configure}}.
В этом случае параметр \verb|socket_path| в конфигурационном файле
использоваться не должен.

\B{Пример.}
{\small
\begin{verbatim}
<socket_path>/var/ejudge/userlist-socket</socket_path>
\end{verbatim}
}

\subsection{Параметр \V{contests\_dir}}
\hypertarget{F:judge.cfg,T:contests_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{contests\_dir} \\
Тип содержимого:       & путь к каталогу\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Примечание:            & использование не рекомендуется\\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к каталогу, в котором
хранятся описания турниров
\hyperlink{F:contest.xml}{\V{contest.xml}}.
Каждое описание турнира находится
в отдельном файле с именем, равным шестизначному номеру
турнира, например, \V{000001.xml}.

Рекомендуется устанавливать путь к каталогу описания турниров
компиляции системы \S{ejudge} с помощью опции
\verb|--enable-conf-dir|
скрипта \hyperlink{P:configure}{\S{configure}}.
В этом случае параметр \verb|contests_dir| в конфигурационном файле
использоваться не должен.

\B{Пример.}
{\small
\begin{verbatim}
contests_dir = "/var/ejudge/contests"
\end{verbatim}
}

\newpage
\section{Конфигурационный файл \V{team.cfg}}
\hypertarget{F:team.cfg}{}

Данный конфигурационный файл используется CGI-программой
\hyperlink{P:team}{\S{team}}. Содержимое файла
прочитывается один раз при старте CGI-программы, то есть каждый
раз, когда кто-либо посылает HTTP/HTTPS-запрос к серверу,
приводящий к запуску программы \S{team}.

Местоположение конфигурационного файла определяется на
этапе компиляции системы \S{ejudge} с помощью опции
\verb|--enable-cgi-conf-dir| скрипта
\hyperlink{P:configure}{\S{configure}}. Эта опция позволяет установить
каталог, в котором находятся конфигурационные файлы всех CGI-программ.
Если опция не была указана в командной строке \S{configure}, предполагается
значение по умолчанию, равное \verb|../cgi-data|.
Местоположение каталога конфигурационных файлов, задаваемого опцией
\verb|--enable-cgi-conf-dir| может быть как абсолютным, так и относительным
путём. В случае относительного пути точкой отсчёта является
каталог, в котором находится сама CGI-программа \S{team}.
Для этого используется переменная окружения \verb|SCRIPT_FILENAME|,
устанавливаемая веб-сервером при запуске CGI-программы.

{\raggedright
Таким образом, если, например, CGI-программы располагаются в каталоге
\verb|/home/httpd/cgi-bin|, то при значении пути к конфигурационным
файлам \verb|../cgi-data|, конфигурационные файлы CGI-программ
должны располагаться в каталоге \verb|/home/httpd/cgi-data|.

}

Конфигурационный файл программы \S{team} может называться
\V{team.cfg} или \V{team-$N$.cfg}, где $N$ --- номер турнира
(см. ниже), но и конфигурационный файл вообще может отсутствовать.
Для этого необходимо, чтобы все настройки, которые считываются
из конфигурационного файла, были установлены при компиляции системы
с помощью опций скрипта \hyperlink{P:configure}{\S{configure}}.

Чтобы конфигурационный файл программы \S{team} был необязательным,
необходимо, чтобы программа \S{team} была открыта для доступа
со всех IP-адресов (дополнительные ограничения, конечно, могут
задаваться для каждого турнира в конфигурационном файле турнира).
Кроме того, при компиляции системы \S{ejudge} необходимо указание
опций \verb|--enable-charset|, \verb|--enable-socket-path| и
\verb|--enable-conf-dir|.

При запуске программы \S{team} вначале определяется идентификатор
турнира. Идентификатор турнира определяется либо по параметру
запроса \verb|contest_id|, либо по имени, под которым вызывается
программа \S{team}, причем параметр запроса \verb|contest_id|
имеет приоритет. В случае, когда идентификатор турнира не определен
или определен по параметру запроса \verb|contest_id|,
всегда используется конфигурационный файл \V{team.cfg}.
Если конфигурационный файл не существует, то будут использоваться
значения по умолчанию.

Определение идентификатора турнира по имени программы является
устаревшим механизмом и не рекомендуется для использования.
В этом случае программа \S{team} должна называться
\V{team-$N$}, где $N$ --- десятичное число-идентификатор
турнира. Этого можно добиться созданием символических или
жестких ссылок в каталоге CGI-программ веб-сервера.
Тогда сначала будет сделана попытка считать конфигурационный файл
\V{team-$N$.cfg}, затем, если эта попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{team-$N'$.cfg}, где $N'$ --- это число, напечатанное
с 6 десятичными знаками, включая незначащие нули, например,
\V{team-000001.cfg}. Если это попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{team-$N''$.cfg}, где $N''$ --- число, напечатанное
без ведущих незначащих нулей. Наконец, будет сделана попытка
считать конфигурационный файл \V{team.cfg},
и в случае неуспеха будут использоваться значения по умолчанию.

Конфигурационный файл \V{team.cfg} имеет текстовый формат,
напоминающий формат \V{.ini}-файлов. Каждый конфигурационный
параметр задаётся в виде 
{\small
\begin{verbatim}
<имя параметра> = <значение>
\end{verbatim}
}
где \V{<имя параметра>} может состоять из латинских заглавных и
строчных букв, цифр и знака подчёркивания. \V{<значение>} должно
заключаться в кавычки, если оно содержит пробельные символы, но
может быть задано и без кавычек, если оно состоит из
единственного слова. Пробельные символы в начале и конце строки
и вокруг знака \V{"="} игнорируются. Комментарии в
конфигурационном файле начинаются с символов \V{\#} или \V{;} и
продолжаются до конца строки.

Параметры конфигурационного файла перечислены ниже.

\subsection{Параметр \V{allow\_deny}}
\hypertarget{F:team.cfg,T:allow_deny}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{allow\_deny} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{true} \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Пример:                & См. раздел \ref{sectionTeamCFGDenyFrom}\\
Примечание:            & Ограничения на допустимые IP-адреса
                         рекомендуется задавать в конфигурационном
                         файле турнира. \\
\end{tabular}

\subsection{Параметр \V{allow\_from}}
\hypertarget{F:team.cfg,T:allow_from}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{allow\_from} \\
Тип содержимого:       & \strut\hyperlink{F:all.cfg,T:allow_deny}{\I{спецификация IP-ограничений}}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & пустая строка \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Пример:                & См. раздел \ref{sectionTeamCFGDenyFrom} \\
Примечание:            & Ограничения на допустимые IP-адреса
                         рекомендуется задавать в конфигурационном
                         файле турнира. \\
\end{tabular}

\subsection{Параметр \V{deny\_from}}
\label{sectionTeamCFGDenyFrom}
\hypertarget{F:team.cfg,T:deny_from}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{deny\_from} \\
Тип содержимого:       & \strut\hyperlink{F:all.cfg,T:allow_deny}{\I{спецификация IP-ограничений}}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & пустая строка \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Примечание:            & Ограничения на допустимые IP-адреса
                         рекомендуется задавать в конфигурационном
                         файле турнира. \\
\end{tabular}

\B{Пример.}
{\small
\begin{verbatim}
allow_deny = 1
allow_from = "192.168.0.1 192.168.1."
deny_from = "192.168."
\end{verbatim}
}

\subsection{Параметр \V{charset}}
\hypertarget{F:team.cfg,T:charset}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{charset} \\
Тип содержимого:       & \I{string}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Примечания:            & использование не рекомендуется \\
\end{tabular}

\B{Описание.} Данный параметр задаёт название кодировки, которое будет
помещаться в http-заголовок генерируемой страницы. Полная информация
о локализации системы \S{ejudge} приведена
в разделе \ref{sectionCharsetSupport}.

Рекомендуется устанавливать кодировку по умолчанию с помощью опции
\verb|--enable-charset| программы
\hyperlink{P:configure}{\S{configure}} при компиляции системы
\S{ejudge}. Поэтому использование данного параметра в конфигурационном
файле не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
charset = "koi8-r"
\end{verbatim}
}

\subsection{Параметр \V{enable\_l10n}}
\hypertarget{F:team.cfg,T:enable_l10n}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{enable\_l10n} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionL10nSupport}\\
Пример:                & См. раздел \ref{sectionTeamCFGL10nDir}\\
Примечание:            & использование не рекомендуется\\
\end{tabular}

\subsection{Параметр \V{l10n\_dir}}
\label{sectionTeamCFGL10nDir}
\hypertarget{F:team.cfg,T:l10n_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{l10n\_dir} \\
Тип содержимого:       & путь к каталогу\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionL10nSupport}\\
Примечание:            & использование не рекомендуется\\
\end{tabular}

Если параметр \V{enable\_l10n} установлен в \I{true}, а параметр
\V{l10n\_dir}
не задан, локализация сообщений принудительно отключается.

Правильное значение параметра \verb|enable_l10n| автоматически
устанавливается программой \hyperlink{P:configure}{\S{configure}}
по значению опции \verb|--prefix|. Кроме того, механизм локализации
сообщений можно отключить с помощью опции \verb|--disable-nls|.
Поэтому явное использование параметров \verb|l10n_dir|
и \verb|enable_l10n| не рекомендуется.

\B{Пример.}
{\small
\begin{verbatim}
enable_l10n
l10n_dir = "/usr/share/locale"
\end{verbatim}
}

\subsection{Параметр \V{socket\_path}}
\hypertarget{F:team.cfg,T:socket_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{socket\_path} \\
Тип содержимого:       & путь к UNIX-сокету\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Примечание:            & использование не рекомендуется\\
\end{tabular}

\B{Описание.}
Данный параметр задаёт путь к UNIX-сокету, который
используется для связи с программой-сервером базы пользователей
\hyperlink{P:userlist-server}{\S{userlist-server}}. В момент
запуска программы \S{team} сокет должен существовать.

Рекомендуется устанавливать путь к управляющему сокету при
компиляции системы \S{ejudge} с помощью опции
\verb|--enable-socket-path| скрипта \hyperlink{P:configure}{\S{configure}}.
В этом случае параметр \verb|socket_path| в конфигурационном файле
использоваться не должен.

\B{Пример.}
{\small
\begin{verbatim}
<socket_path>/var/ejudge/userlist-socket</socket_path>
\end{verbatim}
}

\subsection{Параметр \V{contests\_dir}}
\hypertarget{F:team.cfg,T:contests_dir}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{contests\_dir} \\
Тип содержимого:       & путь к каталогу\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & устанавливается программой
  \hyperlink{P:configure}{\S{configure}}\\
Может повторяться:     & \I{нет}\\
Примечание:            & использование не рекомендуется\\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к каталогу, в котором
хранятся описания турниров
\hyperlink{F:contest.xml}{\V{contest.xml}}.
Каждое описание турнира находится
в отдельном файле с именем, равным шестизначному номеру
турнира, например, \V{000001.xml}.

Рекомендуется устанавливать путь к каталогу описания турниров
компиляции системы \S{ejudge} с помощью опции
\verb|--enable-conf-dir|
скрипта \hyperlink{P:configure}{\S{configure}}.
В этом случае параметр \verb|contests_dir| в конфигурационном файле
использоваться не должен.

\B{Пример.}
{\small
\begin{verbatim}
contests_dir = "/var/ejudge/contests"
\end{verbatim}
}

\subsection{Параметр \V{show\_generation\_time}}
\hypertarget{F:team.cfg,T:show_generation_time}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{show\_generation\_time} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

\B{Описание.} Если данный параметр установлен в \I{true}, в конце
генерируемой html-страницы добавляется информация о процессорном времени,
затраченном на её генерацию.

\B{Пример.}
{\small
\begin{verbatim}
show_generation_time
\end{verbatim}
}

% Local variables:
%  compile-command: "make"
% End:
