|
|
|||
|
wm-help.net -> Электронная библиотека -> UNIX/Linux -> Руководство Сетевого Администратора Linux -> Interpreting and Writing Rewrite RulesInterpreting and Writing Rewrite Rules
Интерпретация и написание правил перепискиВозможно, наиболее мощное свойство Каждое правило имеет левую и правую стороны, отделяемые по крайней мере одним символом табуляции. Когда sendmail обрабатывает почту, он просматривает правила в поисках соответствия на левой стороне. Если адрес соответствует левой стороне правила, он будет заменен правой стороной и обработан снова. sendmail.cf: команды R и SВ файле sendmail.cf наборы определяются, используя команды Sn , где n определяет текущий набор. Правила непосредственно появляются в командах R. Поскольку каждая команда R читается, это правило будет добавлено к текущему набору. Если вы имеете дело только с файлом sendmail.mc, Вы не должны заботиться о командах S, поскольку макрокоманды будут формировать их для Вас автоматом. Но нужно самому кодировать правила команд R. Набор правил в sendmail выглядит так:
Полезные макросыsendmail использует ряд стандартных макросов. Наиболее полезные из них применительно к написанию правил:
Эти макросы можно включать в правила. Наша конфигурация использует макрос $m. Левая сторонаВ левой стороне правила Вы определяете образец, который будет соответствовать адресу или группе адресов, которые нужно трансформировать. Большинство символов сравниваются буквально, но есть ряд символов, которые имеют специальное значение. Они перечислены в следующем списке:
Лексема (элемент) представляет собой строку символов, разграниченных пробелами. Пробел нельзя включить в лексему, но это и не требуется. Когда правило соответствует адресу, текст, связанный с каждым из образцов в выражении, будет назначен специальной переменной, которую мы используем в правой стороне. Единственное исключение: $@, который не соответствует никаким лексемам и, следовательно, не будет создавать текст, который нужно использовать на правой стороне. Правая сторонаКогда левая сторона правила соответствует адресу, первоначальный текст будет удален и заменен правой стороной правила. Все лексемы в правой стороне не будут скопированы буквально, если они начинаются с символа доллара. Как и для левой стороны несколько метасимволов могут использоваться на правой стороне. Они приведены в следующем списке:
Правило обычно обрабатывается до тех пор, пока не прекратится совпадение. Тогда запускается следующее правило. Это можно поменять указанием на правой стороне одного из двух специальных метасимволов:
Пример простого правилаРассмотрим следующее правило левой стороны:
Это правило соответствует нулю или большему количеству элементов, сопровождаемых символом <, за которым идет один или большее число лексем и символ > после них. Если это правило применить к brewer@vbrew.com или к Head Brewer < >, соответствия не будет. В первом случае потому, что нет символа <. Во втором из-за того, что $+ соответствует одному или большему числу лексем, а в данном случае никаких лексем между символами <> нет. В любом случае при несоответствии правила, правая сторона не используется. Если правило применить к Head Brewer < brewer@vbrew.com >, то оно сработает, и на правой стороне $1 заменится на Head Brewer, а $2 на brewer@vbrew.com. Если правило применить к < brewer@vbrew.com > оно сработает потому, что $* соответствует нулю или более лексем, а на правой стороне $1 заменится на пустую строку. Семантика наборов правилКаждый из наборов sendmail выполняет свою задачу в обработке почты. Когда Вы пишете правила, важно понять, что каждый из наборов должен делать. Рассмотрим все наборы, которые можно менять через скрипты m4:
Интерпретация правил в нашем примереВ примере 18-3 использована макрокоманда LOCAL_NET_CONFIG, чтобы объявить локальное правило, которое гарантирует, что любая почта внутри нашего домена будет доставлена непосредственно, используя транспорт smtp. Теперь, когда мы рассмотрели, как строятся правила, мы сможем понять, как это правило работает. Давайте возьмем другой пример, чтобы рассмотреть этот процесс. Пример 18-3. Правило из vstout.uucpsmtp.m4
Известно, что макрос LOCAL_NET_CONFIG вызовет правило, которое будет вставлено где-нибудь близко к концу набора 0, но перед любым определением интеллектуального хоста. Также известно, что набор 0 последний. Здесь должны быть три параметра: транспорт, хост и пользователь. Две строки комментария можно игнорировать: они все равно ничего не делают. Правило задано строкой, начинающейся с R. Мы знаем, что R является командой sendmail и добавляет это правило к текущему набору. В данном случае это набор 0. Давайте рассматривать левую и правую стороны. Левая сторона правила выглядит так: $* < @ $* .$m. > $*. Набор 0 ищет символы < и > потому, что они должны прийти из набора 3. Набор 3 преобразует адреса в общую форму и делает синтаксический анализ проще, он также помещает часть host адреса почты в символы <>. Это правило соответствует любому адресу почты, который напоминает: 'DestUser < @ somehost.ourdomain. > Some Text' . То есть, это соответствует почте для любого пользователя на любом компьютере в нашем домене. Помните, что текст, согласованный метасимволами на левой стороне правила, будет назначен макроопределениям для использования на правой стороне. В примере первое определение $* соответствует тексту от начала адреса до символа <. Весь этот текст назначается переменной $1 для работы с ним на правой стороне. Второе определение $* назначено $2, а последнее к $3. Мы теперь имеем достаточно данных, чтобы понять левую сторону. Эти правила соответствуют почте для любого пользователя в любом компьютере в нашем домене. Имя пользователя будет в $1, имя хоста в $2, любой сопроводительный текст в $3. Затем вызывается правая сторона, чтобы обработать эти данные. Давайте теперь рассматривать то, что мы ожидаем видеть в выводе. Правая сторона нашего правила выглядит так: $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3. Когда правая сторона нашего набора обрабатывается, каждый из метасимволов интерпретируется, и соответствующие замены будут сделаны. Метасимвол $# заставляет это правило использовать указанный транспорт, в данном случае smtp. Метасимвол $@ задает целевой хост. В этом примере целевой компьютер определен как $2.$m., что является полным доменным именем в нашем домене, то есть FQDN, созданный из компонента hostname, назначенного $2 левой стороной, с добавлением доменного имени (.$m.). Метасимвол $: определяет целевого пользователя, который тоже задан на левой стороне правила и хранится в $1. Мы сохраняем содержание секции <> и любой сопроводительный текст, используя данные из левой стороны. Так как это правило обращается к конкретному транспорту, письмо будет послано для доставки соответствующему транспортному агенту. В нашем примере оно будет передано адресату через протокол SMTP.
|
|
| бодибилдинг | Строим Домик | RU-домены за 170 рублей | Copyright © "В помощь Веб-Мастеру" (Alexander D. Belyaev) 2005-2008. При перепечатке любого материала видимая ссылка на источник "В помощь Веб-Мастеру" и все имена, ссылки авторов обязательны! Время генерации страницы: 0.073 |