% -*- mode: LaTeX; coding: koi8-r -*-
% $Id: rm_ejudge.tex,v 1.16 2004/04/29 04:12:20 cher Exp $
% Copyright (C) 2002-2004 Alexander Chernov <cher@unicorn.cmc.msu.ru>

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

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

В центре системы находятся две компоненты --- \S{userlist-server}
и \S{serve}. Компонента \S{userlist-server} поддерживает базу
данных зарегистрированных пользователей, выполняя запросы как
от пользователей (через cgi-программы \S{users}, \S{register}),
так и от администратора базы (через программу \S{edit-userlist}).
Все запросы принимаются только через локальный UNIX-сокет, поэтому
клиенты могут работать только на том же самом компьютере.

Компонента \S{serve} выполняет функции сервера турнира, то есть принимает
от пользователей информационные запросы и решения отосланные на
проверку, выдаёт полученные решения на компиляцию и проверку, обновляет
текущие результаты и т. д. Запросы от пользователей и администратора
турнира принимаются по локальному UNIX-сокету. Как правило, эти запросы
формируются cgi-программами \S{master} и \S{team}.
Обмен с компонентами \S{compile} и \S{run} ведётся через общие каталоги,
что позволяет размещать их на нескольких компьютерах, разделяющих общую
сетевую файловую систему.

Программа \S{compile}
компилирует поступивший ей файл с исходным текстом программы.
Скомпилированная программа при успешной компиляции или список ошибок
при неуспешной компиляции возвращаются серверу турнира также через
общие каталоги.

Программа \S{run} запускает поступившую ей от сервера скомпилированную
программу на заданном наборе тестов и в зависимости от режима проверки
формирует ответ, который передаётся обратно серверу вместе с журналом
проверки.

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

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

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

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

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

Все привилегии системы 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  & C  & 
  Пользователь может использовать CGI-программу
  \hyperlink{P:master}{\S{master}}.\\
JUDGE\_LOGIN              & 1  & C  &
  Пользователь может использовать CGI-программу
  \hyperlink{P:judge}{\S{judge}}.\\
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}.\\
\hline
\end{longtable}
%\caption{Все полномочия системы ejudge}
%\label{tableCapabilityBits}

Полномочия пользователей для базы данных пользователей
задаются в общем конфигурационном файле
\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}

Система 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}}, --- запускаемых как 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. Обратите внимание
на заключительную точку в записи шаблона.\\
\hline
\end{tabular}
\end{center}
\caption{Допустимые спецификации ограничения IP-адреса}
\label{tableIPAddressSpecification}
\end{table}

Синтаксис задания IP-ограничений отличается для CGI-программ, использующих
конфигурационные файлы в формате XML
(\hyperlink{P:register}{\S{register}},
\hyperlink{P:users}{\S{users}}),
и для 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-адресом, удовлетворяющим
спецификации, или нет. Элементы списка задаются элементом
\hyperlink{F:all,T:ip}{\V{ip}} XML-файла.
Описание этого элемента дано ниже.

Для конфигурационных файлов программ
(\hyperlink{P:register}{\S{register}} и \hyperlink{P:users}{\S{users}}),
элементы списка находятся в элементе \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: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}},
задающие дополнительные ограничения на допустимые 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}} соответственно. Далее даётся описание
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,IPAddressSpecification}{шаблон IP-адреса}
  (см. табл. \ref{tableIPAddressSpecification})\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{да}\\
\end{tabular}

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

\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-адреса
запрещается.

\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>
</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} доступ также открыт.
Всем прочим клиентам доступ закрыт.

\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{Локализация системы}

Система \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}} --- имя
языкового окружения.

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

Чтобы включить поддержку языкового окружения, необходимо
установить конфигурационный параметр в файлах настройки
утилит. Для конфигурационных файлов в формате 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}}

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

Поддержка кодировок для ввода/вывода реализована в текущей
версии системы недостаточным образом. Внутренней кодировкой для
системы \S{ejudge} в настоящее время является кодировка
koi8-r. Все текстовые строки представляются в памяти именно в
этой кодировке. Это значит, что текстовые строки в других
кодировках окажутся искажены. Корректная реализация системы
должны хранить строки в кодировке utf-8 или utf-16. Кроме того,
пользователь должен иметь возможность задавать желательную
кодировку символов.

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

Кодировка конфигурационных файлов в формате 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}})
задаётся непосредственно в заголовке соответствующего файла,
например,
{\small\begin{verbatim}
<?xml version="1.0" encoding="koi8-r"?>
\end{verbatim}}
Текущая версия системы поддерживает следующие кодировки XML-файлов:
iso8859-1, utf-8, utf-16, koi8-r, cp1251, cp866,
iso8859-5. Однако при чтении файла текст в любой кодировке
конвертируется в текст в кодировке koi8-r.

Кодировка конфигурационных файлов в текстовом формате
(\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}})
в настоящее время не может быть задана явно, и всегда
подразумевается кодировка koi8-r.

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

При генерации html-страниц используется кодировка, заданная в
конфигурационном файле соответствующей утилиты. Если параметр кодировки
не задан, используется кодировка iso8859-1. В текущей версии
системы \S{ejudge} параметр кодировки вывода используется только
для корректной генерации http-заголовка. Не делается попытка
перекодировки символов, если кодировка какой-либо части
генерируемой html-страницы (например, имён пользователей) не
соответствует указанной кодировке. Это практически наверняка
приведёт к некорректному отображению страницы, если указана
кодировка вывода, отличная от iso8859-1 или koi8-r.

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

Для конфигурационных файлов утилит в формате XML
(\hyperlink{F:register.xml}{\V{register.xml}},
\hyperlink{F:users.xml}{\V{users.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{verbatim}\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:edit-userlist}{\S{edit-userlist}},
\hyperlink{P:super-serve}{\S{super-serve}},
\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:contests_dir}{\V{contests\_dir}}\\
\>\hyperlink{F:ejudge.xml,T:email_program}{\V{email\_program}}\\
\>\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:serve_path}{\V{serve\_path}}\\
\>\hyperlink{F:ejudge.xml,T:run_path}{\V{run\_path}}\\
\>\hyperlink{F:ejudge.xml,T:socket_path}{\V{socket\_path}}\\
\>\hyperlink{F:ejudge.xml,T:userdb_file}{\V{userdb\_file}}\\
\>\hyperlink{F:ejudge.xml,T:user_map}{\V{user\_map}}\\
\>\>\hyperlink{F:ejudge.xml,T:map}{\V{map}}\\
\end{tabbing}

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

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

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя элемента:        & \K{config} \\
Содержится в:        & \I{нет}\\
Может содержать:     & \strut\hyperlink{F:ejudge.xml,T:caps}{\V{caps}},
  \hyperlink{F:ejudge.xml,T:contests_dir}{\V{contests\_dir}},
  \hyperlink{F:ejudge.xml,T:email_program}{\V{email\_program}},
  \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:serve_path}{\V{serve\_path}},
  \hyperlink{F:ejudge.xml,T:run_path}{\V{run\_path}},
  \hyperlink{F:ejudge.xml,T:socket_path}{\V{socket\_path}},
  \hyperlink{F:ejudge.xml,T:userdb_file}{\V{userdb\_file}},
  \hyperlink{F:ejudge.xml,T:user_map}{\V{user\_map}}\\
Атрибуты:            &
  \strut\hyperlink{F:ejudge.xml,T:config,A:l10n}{\V{l10n}}\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:clean-users}{\S{clean-users}},
  \hyperlink{P:edit-userlist}{\S{edit-userlist}},
  \hyperlink{P:super-serve}{\S{super-serve}},
  \hyperlink{P:userlist-server}{\S{userlist-server}}\\
\end{tabular}

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

\newpage
\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}}\\
\end{tabular}

\B{Описание.} Данный элемент позволяет задавать полномочия
на выполнение операций над базой данных пользователей.
Описание полномочий, поддерживаемых системой 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}}\\
\end{tabular}

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

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

\newpage
\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{нет}\\
Тип содержимого:     & путь к каталогу\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:clean-users}{\S{clean-users}},
  \hyperlink{P:edit-userlist}{\S{edit-userlist}},
  \hyperlink{P:super-serve}{\S{super-serve}},
  \hyperlink{P:userlist-server}{\S{userlist-server}}\\
\end{tabular}

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

\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}}\\
\end{tabular}

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

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

\newpage
\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{нет}\\
Тип содержимого:     & путь к каталогу\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:userlist-server}{\S{userlist-server}}\\
\end{tabular}

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

\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{local\_user}}
\\
Тип содержимого:     & игнорируется\\
Может отсутствовать: & \I{да}\\
Может повторяться:   & \I{да}\\
Используется в:      &
  \strut\hyperlink{P:userlist-server}{\S{userlist-server}}\\
\end{tabular}

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

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

\newpage
\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{Описание.} Данный элемент задаёт электронный адрес,
от имени которого рассылаются уведомления о регистрации
новых пользователей.
Если этот элемент неопределён, используется адрес
по умолчанию \V{team@contest.cmc.msu.ru}.
Значение, устанавливаемое этим
элементом может быть переопределено
элементом \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}}

\newpage
\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}}\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:super-serve}{\S{super-serve}}\\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к программе
\hyperlink{P:serve}{\S{serve}} системы ejudge.

\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}}\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:super-serve}{\S{super-serve}}\\
\end{tabular}

\B{Описание.} Данный элемент задаёт путь к программе
\hyperlink{P:run}{\S{run}} системы ejudge.

\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-сокету\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
Используется в:      &
  \strut\hyperlink{P:edit-userlist}{\S{edit-userlist}},
  \hyperlink{P:userlist-server}{\S{userlist-server}}\\
\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}}.


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

\newpage
\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) пользователей в пользователей
ejudge. Используется для определения уровня привилегий пользователя
при запуске им утилит \hyperlink{P:edit-userlist}{\S{edit-userlist}} и
\hyperlink{P:serve}{\S{serve}}, когда последние подключаются к базе данных
пользователей.

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

\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:userlist-server}{\S{userlist-server}}\\
\end{tabular}

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

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

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

Этот конфигурационный файл используется CGI-программой
\hyperlink{P:register}{\S{register}} для начальной инициализации
после старта. По умолчанию конфигурационный файл
должен находиться в каталоге \V{../cgi-data} относительно
каталога, в котором находится исполняемый файл \V{register}.
Изменение конфигурационного каталога возможно при компиляции
программы в \V{makefile}. Если программа \S{register}
запускается под другим именем, то имя конфигурационного файла будет
соответствующим образом изменяться. Точные правила
поиска конфигурационного файла приведены в
разделе ???.

Например, если программа
запускается под именем \V{register-$N$}, где $N$ --- некоторое десятичное
число, то сначала будет сделана попытка считать конфигурационный файл
\V{../cgi-data/register-$N$.xml}, затем, если эта попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{../cgi-data/register-$N'$.xml}, где $N'$ --- это число, напечатанное
с 6 десятичными знаками, включая незначащие нули, например,
\V{../cgi-data/register-000001.xml}. Если это попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{../cgi-data/register-$N''$.xml}, где $N''$ --- число, напечатанное
без ведущих незначащих нулей. Наконец, будет сделана попытка
считать конфигурационный файл \V{../cgi-data/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{Описание.} Тег верхнего уровня конфигурационного файла.

\newpage
\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} \\
Значение по умолчанию: & \I{false} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}
\B{Описание.} Данный атрибут включает поддержку локализации
интерфейса. Если его значение установлено в \I{true}, CGI-программа
\hyperlink{P:register}{\S{register}} считывает значение
параметра \V{locale\_id} и переключает язык интерфейса
в зависимости от значения параметра.
Подробнее вопросы локализации системы рассматриваются в
разделе ???.

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

\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} \\
Значение по умолчанию: & \V{iso8859-1} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}
\B{Описание.} Данный атрибут позволяет задавать кодировку,
которая будет проставляться в заголовке всех генерируемых страниц.
Обратите внимание, что в текущей версии кодировка проставляется
вне зависимости от языка интерфейса.

\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}}

\newpage
\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}.

\newpage
\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}.

\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{нет}\\
Тип содержимого:     & путь к каталогу\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

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

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

\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{нет}\\
Тип содержимого:     & путь к каталогу\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

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

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

\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-сокету\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

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

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

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

Этот конфигурационный файл используется CGI-программой
\hyperlink{P:users}{\S{users}} для начальной инициализации
после старта. По умолчанию конфигурационный файл
должен находиться в каталоге \V{../cgi-data} относительно
каталога, в котором находится исполняемый файл \V{users}.
Изменение конфигурационного каталога возможно при компиляции
программы в \V{makefile}. Если программа \S{users}
запускается под другим именем, то имя конфигурационного файла будет
соответствующим образом изменяться. Точные правила
поиска конфигурационного файла приведены в
разделе ???.

Например, если программа
запускается под именем \V{users-$N$}, где $N$ --- некоторое десятичное
число, то сначала будет сделана попытка считать конфигурационный файл
\V{../cgi-data/users-$N$.xml}, затем, если эта попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{../cgi-data/users-$N'$.xml}, где $N'$ --- это число, напечатанное
с 6 десятичными знаками, включая незначащие нули, например,
\V{../cgi-data/users-000001.xml}. Если это попытка завершилась
неудачно, будет сделана попытка считать конфигурационный файл
\V{../cgi-data/users-$N''$.xml}, где $N''$ --- число, напечатанное
без ведущих незначащих нулей. Наконец, будет сделана попытка
считать конфигурационный файл \V{../cgi-data/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{Описание.} Тег верхнего уровня конфигурационного файла.

\newpage
\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} \\
Значение по умолчанию: & \I{false} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}
\B{Описание.} Данный атрибут включает поддержку локализации
интерфейса. Если его значение установлено в \I{true}, CGI-программа
\hyperlink{P:users}{\S{users}} считывает значение
параметра \V{locale\_id} и переключает язык интерфейса
в зависимости от значения параметра.
Подробнее вопросы локализации системы рассматриваются в
разделе ???.

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

\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} \\
Значение по умолчанию: & \V{iso8859-1} \\
Может отсутствовать:   & \I{да} \\
\end{tabular}
\B{Описание.} Данный атрибут позволяет задавать кодировку,
которая будет проставляться в заголовке всех генерируемых страниц.
Обратите внимание, что в текущей версии кодировка проставляется
вне зависимости от языка интерфейса.

\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}}

\newpage
\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}.

\newpage
\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}.

\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{нет}\\
Тип содержимого:     & путь к каталогу\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

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

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

\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{нет}\\
Тип содержимого:     & путь к каталогу\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

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

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

\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-сокету\\
Может отсутствовать: & \I{нет}\\
Может повторяться:   & \I{нет}\\
\end{tabular}

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

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

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

Данный конфигурационный файл используется CGI-утилитой
\hyperlink{P:master}{\S{master}}. По умолчанию он должен
находиться в каталоге \V{../cgi-data} относительно каталога, из
которого запускается программа \S{master}. Изменение каталога по
умолчанию возможно при компиляции системы \S{ejudge} изменением
соответствующей переменной настройки в \V{makefile}. При запуске
программы \S{master} она пытается считать конфигурационный файл
из конфигурационного файла, причём имя конфигурационного файла
может зависеть от номера турнира и имени, под которым
запускается программа \S{master}. Точные правила поиска
конфигурационного файла даны в разделе ???. Конфигурационный
файл, считываемый, если никакой другой конфигурационный файл
считать не удалось, называется \V{master.cfg}. Если и чтение
этого файла завершилось с ошибкой, программа \S{master}
генерирует сообщение ошибки конфигурации системы. Далее любой
конфигурационный файл, используемый программой \S{master} будет
называться \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{false} \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Пример:                & См. раздел \ref{sectionMasterCFGDenyFrom}\\
\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} \\
\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} \\
\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{да}\\
Значение по умолчанию: & \V{iso8859-1} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

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

\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{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \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{да}\\
Значение по умолчанию: & пустая строка \\
Может повторяться:     & \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{нет}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

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

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

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

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

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

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

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

Данный конфигурационный файл используется CGI-утилитой
\hyperlink{P:judge}{\S{judge}}. По умолчанию он должен
находиться в каталоге \V{../cgi-data} относительно каталога, из
которого запускается программа \S{judge}. Изменение каталога по
умолчанию возможно при компиляции системы \S{ejudge} изменением
соответствующей переменной настройки в \V{makefile}. При запуске
программы \S{judge} она пытается считать конфигурационный файл
из конфигурационного файла, причём имя конфигурационного файла
может зависеть от номера турнира и имени, под которым
запускается программа \S{judge}. Точные правила поиска
конфигурационного файла даны в разделе ???. Конфигурационный
файл, считываемый, если никакой другой конфигурационный файл
считать не удалось, называется \V{judge.cfg}. Если и чтение
этого файла завершилось с ошибкой, программа \S{judge}
генерирует сообщение ошибки конфигурации системы. Далее любой
конфигурационный файл, используемый программой \S{judge} будет
называться \V{judge.cfg}.

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

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

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

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{allow\_deny} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Пример:                & См. раздел \ref{sectionJudgeCFGDenyFrom}\\
\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} \\
\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} \\
\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{да}\\
Значение по умолчанию: & \V{iso8859-1} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

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

\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{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \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{да}\\
Значение по умолчанию: & пустая строка \\
Может повторяться:     & \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{нет}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

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

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

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

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

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

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

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

Данный конфигурационный файл используется CGI-утилитой
\hyperlink{P:team}{\S{team}}. По умолчанию он должен
находиться в каталоге \V{../cgi-data} относительно каталога, из
которого запускается программа \S{team}. Изменение каталога по
умолчанию возможно при компиляции системы \S{ejudge} изменением
соответствующей переменной настройки в \V{makefile}. При запуске
программы \S{team} она пытается считать конфигурационный файл
из конфигурационного файла, причём имя конфигурационного файла
может зависеть от номера турнира и имени, под которым
запускается программа \S{team}. Точные правила поиска
конфигурационного файла даны в разделе ???. Конфигурационный
файл, считываемый, если никакой другой конфигурационный файл
считать не удалось, называется \V{team.cfg}. Если и чтение
этого файла завершилось с ошибкой, программа \S{team}
генерирует сообщение ошибки конфигурации системы. Далее любой
конфигурационный файл, используемый программой \S{team} будет
называться \V{team.cfg}.

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

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

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

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{allow\_deny} \\
Тип содержимого:       & \I{boolean}\\
Может отсутствовать:   & \I{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionCFGIPLimitations} \\
Пример:                & См. раздел \ref{sectionTeamCFGDenyFrom}\\
\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} \\
\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} \\
\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{да}\\
Значение по умолчанию: & \V{iso8859-1} \\
Может повторяться:     & \I{нет}\\
\end{tabular}

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

\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{да}\\
Значение по умолчанию: & \I{false} \\
Может повторяться:     & \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{да}\\
Значение по умолчанию: & пустая строка \\
Может повторяться:     & \I{нет}\\
Описание:              & См. раздел \ref{sectionL10nSupport}\\
\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:team.cfg,T:socket_path}{}

\begin{tabular}{@{}>{\bfseries}lp{10.5cm}}
Имя параметра:         & \K{socket\_path} \\
Тип содержимого:       & путь к UNIX-сокету\\
Может отсутствовать:   & \I{нет}\\
Может повторяться:     & \I{нет}\\
\end{tabular}

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

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

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

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

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

\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:
