Содержание материала

Поле преобразования в правой части правила подстановки определяет формат, в который переписывается адрес.

Формат определяется при помощи тех же элементов, что и шаблон: литералов, макроопределений и специальных метасимволов. Литералы в преобразованиях попадают в новый адрес без изменений. Для макроопределений выполняется подстановка. Метасимволы решают специальные задачи. Метасимволы преобразований и их функциональность описаны в табл. 10.4.

Таблица 10.4. Метасимволы преобразований

Символ Значение
$n Подстановка неопределенной лексемы п
$[name$] Подстановка канонической формы имени пате
Символ Значение
$map key$@argument $:default$) Подстановка значения из карты тар по индексу key
$>n Вызов набора правил п
$@ Завершение набора правил
$: Завершение правила подстановки

Си мвол $n, где n — число, используется для подстановки неопределенных лексем, обсуждавшихся выше. После подстановки неопределенная лексема ваписывается в «новый» адрес. Подстановка неопределенных лексем - важнейшая составляющая гибкого переписывания адресов. Она дает возможность простого переноса значений из исходного адреса в конечный адрес. Следующий пример иллюстрирует сказанное.

Адрес всегда обрабатывается рядом правил подстановки. Универсальных правил не бывает. Предположим, исходный адрес mccafferty@rodent подвергся некоторой предварительной обработке и принял вид:

kathy.mccafferty<@rodent>

Предположим, что текущее правило подстановки

R$+<0$-> $<1@$2.$D> user@host -> Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Адрес соответствует шаблону, поскольку содержит одну или более лексем перед литералом <@, ровно одну лексему после литерала <@, а также литерал >. Сопоставление с шаблоном при переписывании адреса приводит к созданию двух неопределенных лексем, используемых для преобразования.


Поле преобразования содержит неопределенную лексему $1, литерал <@, неопределенную лексему $2, литерал точки ( .), ссылку на макроопределение D, н также литерал >. После сопоставления с шаблоном $1 содержит kathy. mccafferty, а $2 содержит rodent. Предположим, что макроопределение D было создано ранее в файле sendmail.cf и хранит значение wrotethebook.com. В результате исходный адрес переписывается следующим образом:

kathy.mccafferty<@rodent.wrotethebook.com>

Рисунок 10.3 иллюстрирует данное конкретное преобразование адреса. Показаны лексемы, выделенные из исходного адреса, а также их сопоставление с шаблоном. Представлены также неопределенные лексемы, созданные при сопоставлении с шаблоном, и их использование наряду с другими значениями поля преобразования для создания конечного, измененного адреса. После подстановки адрес снова сравнивается с шаблоном. На этот раз с отрицательным результатом, поскольку адрес уже не содержит одну и только одну лексему между литералами <@ и >. Итак, адрес не подвергается дальнейшей обработке данным правилом подстановки, но передается следующему по очереди правилу. Правила набора выполняются последовательно, хотя для изменения порядка их обработки могут использоваться некоторые метасимволы.

Рис. 10.3. Переписывание адреса

Символ $>л вызывает набор правил п и передает этому набору адрес, созданный оставшимися инструкциями поля преобразования. Например:

$>9 $1 % $2

Это преобразование вызывает набор правил 9 ($>9) и передает этому набору для обработки содержимое лексемы $1, символ %, а также содержимое лексемы $2. Когда набор правил 9 заканчивает работу, он возвращает обработанный адрес вызвавшему его правилу. Этот адрес снова сравнивается с шаблоном вызывающего правила. Если соответствие найдено, набор правил 9 вызывается повторно.

Рекурсия, присущая правилам подстановки, потенциально позволяет создавать бесконечные циклы, sendmail, как может, старается обнаружить возможные циклы, однако ответственность за создание правил, ведущих к зацикливанию, лежит на их авторе.


Символы $@ и $: используются для управления обработкой и предотвращения зацикливания. Если преобразование начинается символом весь набор правил завершается и остаток поля преобразования возвращается набором правил. Если преобразование начинается символом $:, данное конкретное правило выполняется лишь единожды. Используйте $: для предотвращения рекурсии и зацикливания при вызове других наборов правил. Используйте для прерывания обработки набора правил на конкретном правиле.

Символ $[ла/пе$] преобразует псевдоним узла или его адрес IP в каноническое имя узла. С этой целью значение name передается для разрешения серверу имен. К примеру, при обращении к серверам имен домена wrotethebook.com $[mouse$] возвращает rodent.wrotethebook.com, а $[[172. 16.12.1]$] возвращает crab.wrotethebook.com.

Подобно тому как имя узла или адрес используется для поиска канонического имени в базе данных сервера имен, ключ {key) может использоваться для извлечения информации из базы данных (тар) при помощи конструкции $(шр кеу%). Здесь мы имеем дело с более сложным в применении и более общим синтаксисом работы с базой данных, чем в случае извлечения канонических имен. Прежде чем перейти к подробностям создания и использования баз данных для sendmail, закончим разбираться с синтаксисом правил подстановки.

Существует специальный синтаксис правил подстановки, используемый в наборе правил 0. В наборе правил 0 определена тройка значений (mailer, host, user), указывающая программу доставки почты, узел-получатель, а также адресата почты.

Специальный синтаксис преобразования, решающий задачу, выглядит следующим образом:

$#mailer$@host$:user

Пример использования такой конструкции из файла generic-linux.cf:

R$*<@$*>$ » $#esmtp $@ $2 $: $1 < @ $2 > $3 Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Предположим, что данным правилом обрабатывается адрес электронной почты david<@ora.wrotethebook.com>. Этот адрес соответствует шаблону $*<@$+>$* по следующим причинам:


  • Нуль или более лексем (david) соответствуют первому символу $*
  • Адрес содержит литерал <@
  • Нуль или более лексем (пять лексем фрагмента ora.wrotethebook.com) соответствуют требованиям второго символа $*
  • Адрес содержит литерал >
  • Нуль или более (в данном случае нуль) лексем соответствуют требованиям последнего символа $*

Сопоставление адреса с шаблоном приводит к созданию двух неопределенных лексем. Лексема $1 содержит david, а лексема $2 содержит ora.wrotethebook.com. Других соответствий не было, поэтому лексема $3 пуста. Эти неопределенные лексемы используются для переписывания адреса в следующую тройку значений:

$#smtp$@ora.wrotethebook.com$:david<@ora.wrotethebook.com>

Компоненты результата:

$#smtp 
smtp - внутреннее имя почтовой программы, доставляющей сообщение. 
$@ога.wrotethebook.com 
ога. wrotethebook. com - узел-получатель. 
$:david<@ora.wrotethebook.com> 
david<@ora.wrotethebook.com> - пользователь-адресат.

Существует ряд вариаций синтаксиса тройки значений почтовой программы, которые также используются в шаблонах некоторых правил. Две из таких вариаций содержат только составляющую «почтовой программы».

$#OK

Указывает, что исходный адрес прошел проверку безопасности. К примеру, адресу разрешена пересылка почтовых сообщений.

$#discard

Указывает, что исходный адрес не прошел тот или иной тест безопасности и сообщение электронной почты должно быть удалено.

Ни одно из значений - OK, discard и error - не фигурирует в командах М наряду с реальными почтовыми программами. Однако в документации по sendmail эти значения названы «почтовыми программами»; этой терминологии мы здесь и следуем.

Почтовые программы $#0К и $#discard используются в управлении пересылкой и в безопасности. Почтовая программа $#discard молча удаляет почту и не возвращает отправителю сообщение об ошибке. Почтовая программа $#error также работает с почтовыми сообщениями, не подлежащими доставке, однако, в отличие от $#discard, возвращает отправителю сообщение об ошибке. Конструкция шаблона для почтовой программы $#error сложнее, чем синтаксис $#0К и $#discard. Выглядит она следующим образом:

$#error $@dsn-code $:message

В качестве значения почтовой программы должно выступать $#ег г or. Поле $: message содержит текст сообщения об ошибке, который необходимо передать отправителю. Поле $@dsn-code необязательное. Если оно присутствует, то предшествует сообщению message и должно содержать корректный код DSN (Delivery Status Notification, уведомление о состоянии доставки). Коды DSN определены в RFC 1893 , Mail System Status Codes (Коды состояний почтовой системы).

Код DSN состоит из трех компонентов, разделенных точками:

клас с (class) - Всеобъемлющая классификация состояния. В RFC для класса определены такие значения: 2 означает успешное завершение, 4 означает времен- ный сбой, а 5 - постоянный сбой.

предмет (subject) - Соотносит сообщения об ошибках с одной из восьми категорий:
0 (Неопределенная)
Невозможно причислить ошибку к определенной категории.
1 (Адресация)
Проблема, связанная с адресом.
2 (Почтовый ящик)
Проблема, связанная с почтовым ящиком доставки.
3 (Почтовая система)
Проблема, связанная с системой доставки почты второй стороны.
4 (Сеть)
Проблема, связанная с сетевой инфраструктурой.
5 (Протокол)
Проблема, связанная с протоколом.
6 (Содержимое)
Содержимое сообщения вызвало ошибку преобразования.
7 (Безопасность)
Проблема, связанная с безопасностью.

подробност и (detail) - Содержит подробные сведения по конкретной ошибке. Значение detail осмысленно только в контексте кода subject. К примеру, х. 1.1 означает несуществующее имя пользователя-адресата, а х. 2.1 означает, что почтовый ящик заблокирован, тогда как х.2. 2 - что почтовый ящик полон. Значений detail слишком много, чтобы перечислять их здесь. Полный список содержится в RFC 1893.

Сообщение об ошибке, записанное в целевом представлении DSN, может выглядеть следующим образом:

R<@$+ > $#еггог$@5.1.1$:"user address required" 

Это правило возвращает код DSN 5.1.1 и сообщение "user address required", если адрес соответствует шаблону. Код DSN состоит из значения 5 в поле класса (постоянная ошибка), значения 1 в поле предмета (сбой адресации) и значения 1 в поле подробностей (с учетом, что subject имеет значение 1, речь идет о некорректном адресе пользователя).

Коды ошибок и синтаксис ошибок - составная часть сложных параметров настройки, используемых для управления пересылкой и безопасностью. Эти значения генерируются макроопределениями ш4, предназначенными для работы со сложными механизмами. Очень редко эти значения добавляются в файл sendmail.cf напрямую системным администратором.

Обмениваться, хранить, передавать Ваши файлы стало просто как никогда.
yandex-disk
Читать подробнее: для чего Yandex-Диск проекту Mini-Server. Практика установки, настройки и использования сетевого хранилища на Ubuntu server LTS 12.04 в статье Резервное копирование сервера Ubuntu на Яндекс Диск.

>> Ubuntu 12.04 + Nginx Скачать сервер
>> Fedora 15 Скачать сервер
>> Простой Debian 6.0.6 Скачать сервер
>> CentOS 6.0 и
+ (5.6) другой
Скачать сервер
>> OpenSUSE 11.4
MAX
Скачать сервер

Вход на сайт

ВНИМАНИЕ!

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