Глава 7. Протокол управления.

Содержание

Введение.
Команды и ответы.
Синтаксис.
Возможности сервера.
Команды.
Команды управления сеансом.
Команда AUTHENTICATE.
Команда UNAUTHENTICATE.
Команда STARTTLS.
Команда LOGOUT.
Команда CAPABILITY.
Команда NOOP.
Команды модуля MAIL.
Команда LIST.
Команда CREATE.
Команда DELETE.
Команда SET.
Команда DKIM-KEY.
Команда SUBST.
Команда VCARD.
Команда LOG.
Команды модуля AB.
Команда ABLIST.
Команда ABSET.
Команда AB.
Команды модуля BanIP.
Команда POOLLIST
Команда BANLIST.
Команды REMOVEBAN и INSERTBAN.
Команды модуля SpamCheck.
Команда REDLIST.
Команда WHITELIST.
Примеры.
Примеры отправки команд и получения ответа содержащих литералы.
Пример сессии MMP.

Данный раздел описывает протокол Manjary Management Protocol (MMP) предназначенный для получения информации и управления серверами Manjary. Этот протокол позволяет пользователям изменять свои данные, менять пароли, производить поиск в адресной книге. Администраторам и операторам доменов предоставляется функционал для выполнения различных задач по администрированию сервера и доступ к последним записям журнала.

MMP имеет много общего с протоколом ManageSieve (RFC 5804), а также похож на IMAP4 (RFC 9051).

Введение.

Команды и ответы.

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

Все взаимодействия передаваемые клиентом и сервером имеют форму строк которые заканчиваются CRLF. Приёмник протокола клиента или сервера MMP либо считывает строку, либо считывает последовательность известного количества октетов, за которой следует строка.

Синтаксис.

MMP - это протокол ориентированный на строки и работающий над TCP.

Каждая команда посылаемая клиентом состоит из имени, за которым следует ноль или более аргументов, завершающихся символами CRLF (0x0D 0x0A). Аргументы отделяются символом пробела (0x20).

В ответ на команду сервер возвращает ноль или более строк[2] данных и одну строку[2] с результатом выполнения команды. Строки данных начинаются с символа '*' (0x2A) и пробела (0x20) за которыми следуют аргументы специфичные для выполняемой команды. Далее в тексте для обозначения таких строк используется выражение *-строка или *-ответ. Последняя строка ответа начинается с результата выполнения OK, NO или BYE за которым следует ноль или более аргументов. Результат OK сообщает клиенту об успешном выполнении команды. Результаты NO и BYE обычно сопровождаются одним или двумя аргументами - если первый аргумент заключён в круглые скобки, он содержит информацию об отказе предназначенную для машинного разбора. В настоящей версии протокола это только одно из ключевых слов. Далее, в ответе указывается текстовая строка в кавычках которая может быть прочитана человеком для понимания причин отказа.[2]

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

Аргументы команд посылаемых клиентом и аргументы ответов сервера разделяются пробелами и могут быть представлены в трёх видах: 1. Последовательность символов не являющихся пробелами, табуляциями или переводами строк. 2. Строка заключённая в двойные кавычки. В этом виде строка может содержать пробелы и табуляции, но не переводы строк. Символ двойных кавычек являющийся частью строки и символ "\" экранируются предшествующим символом "\". 3. В виде данных объявленной длинны - литералов. Литералы могут использоваться для передачи любых данных. Такой аргумент состоит из указания количества окетов в фигурных скобках, CRLF и последовательности окетов. При передаче летерала от клиента серверу выполняется следующий сценарий: клиент посылает число означающее количество окетов в фигурных скобках и CRLF, дожидается ответа сервера в виде строки начинающейся с символа "+" и заканчивающейся CRLF, затем клиент отправляет содержимое литерала. Возможен другой сценарий при котором клиент указывает количество окетов завершающееся символом "+" перед закрывающей фигурной скобкой. При этом сервер не отвечает строкой начинающейся с символа "+" и сразу готов принять содержимое. Литералы отправляемые сервером не содержат символа "+" перед закрывающей скобкой и содержимое следует сразу после CRLF. Работа с данными в виде литералов показана в примерах.

Имена команд содержат только 7-ми битные символы ASCII. Аргументы представленные в любом виде могут содержать символы uncode в кодировке UTF-8.

Возможности сервера.

Список возможностей отправляется сразу после подключения клиента или после успешного выполнения команды STARTTLS. Возможности могут измениться после успешного выполнения STARTTLS, AUTHENTICATE и UNAUTHENTICATE. Клиент может запросить текущие возможности послав команду CAPABILITY.

Возможности перечисляются в *-строках. Первый аргумент каждой строки - регистронезависимое название возможности. Остальные агрументы в строке необязательны и являются значениями связанными с возможностью.

В настоящее время определены следующие возможности:

VERSION

Версия протокола MMP. Номер версии указывается в аргументе представленном строкой в кавычках. Текущая версия протокола - 1.0

STARTTLS

Доступно согласование безопасного соединения командой STARTTLS. Эта возможность объявляется только если безопасное соединение ещё не установлено. Не имеет аргументов.

COMMAND-SET

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

SASL

Список доступных механизмов SASL. Второй аргумент - строка в кавычках в которой перечислены названия механизмов.



[2] Строка ответа может содержать литерал, который в свою очередь может содержать переводы строк. Ответ всегда заканчивается переводом строки который не относится к литералу.