Команды управления сеансом.
Пред. | Глава 7. Протокол управления. | След.

## Команды управления сеансом.

### Команда AUTHENTICATE.

`AUTHENTICATE` {`механизм`} [`начальные данные`]

Команда AUTHENTICATE определяет механизм аутентификации SASL (RFC 4422). Если сервер поддерживает запрошенный механизм, он выполняет обмен данными протокола аутентификации для идентификации и аутентификации пользователя. Если запрошенный механизм аутентификации не поддерживается, то сервер отклоняет команду AUTHENTICATE отправляя ответ NO. Список доступных механизмов объявляется в возможности SASL.

Обмен протокола аутентификации состоит из серии запросов (challenges) сервера и ответов клиента, которые специфичны для выбранного механизма аутентификации. Запрос сервера состоит из литеральной строки за которой следует CRLF. Содержимое строки представляет собой данные SASL закодированные в base-64. Ответ клиента состоит из строки (как токен, в кавычках или литеральной) данных SASL закодированной в base-64 за которой следует CRLF. Если клиент хочет отменить обмен данными аутентификации, он отправляет строку содержащую один символ "*". Если сервер получает такой ответ, он отклоняет команду AUTHENTICATE отправив ответ NO.

Необязательный аргумент с начальными данными команды AUTHENTICATE используется для сокращения количества обмена данными если выбранный механизм аутентификации предусматривает начальную отправку данных клиентом.

Если выполнение команды AUTHENTICATE завершилось ответом сервера `NO (UNSUPPORTED) "Unsupported authorization mechanism"`, то клиент может попробовать другой механизм аутентификации выполнив ещё одну команду AUTHENTICATE. Другими словами, клиент может запрашивать типы аутентификации в порядке убывания предпочтения.

При успешной аутентификации сервер отправляет *-строку начинающуюся с аргумента `USER`. Второй аргумент сообщает уровень привилегий пользователя: `user`, `oper` или `admin`. Это значение зависит от наличия установленных флагов пользователя ADMIN и OPER. Третий аргумент содержит полное имя пользователя в кавычках, включая доменную часть в формате `user@domain`. Затем следует ответ OK. После этого сессия переводится в аутентифицированное состояние в котором доступны соответствующие команды.

### Команда UNAUTHENTICATE.

Команда UNAUTHENTICATE переводит сессию в не-аутентифицированное состояние. Команда не имеет аргументов и доступна только в аутентифицированном состоянии.

### Команда STARTTLS.

Поддержка команды STARTTLS опциональна. Перед использованием этой команды клиент должен проанализировать объявленные возможности сервера.

Команда STARTTLS запрашивает начало согласования TLS. Согласование начинается сразу после CRLF в ответе OK. Клиент не должен посылать другие команды до получения ответа на команду и завершения согласования.

Команда STARTTLS доступна только в не-аутентифицированном состоянии сессии и только если согласование TLS ещё не производилось.

При успешном выполнении команды, после согласования TLS, сервер посылает список возможностей и ответ OK.

### Команда LOGOUT.

Клиент отправляет команду LOGOUT когда сеанс закончен. Сервер посылает ответ BYE и закрывает соединение TCP. После получения ответа BYE клиент также должен закрыть соединение TCP.

### Команда CAPABILITY.

Команда CAPABILITY запрашивает возможности сервера. Эта команда может быть послана клиентом на любой стадии.

В ответ на команду сервер посылает список возможностей и ответ OK.

### Команда NOOP.

Команда NOOP не выполняет никаких действий кроме возврата ответа OK. Эта команда доступна на любом этапе и может использоваться клиентом для проверки соединения во время бездействия и для сброса таймера простоя на сервере для предотвращения закрытия сессии сервером по таймауту.

Пред. | Наверх | След.
Команды. | Начало | Команды модуля MAIL.