Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Приложение
Введение в m4
В далёком 1977 году, когда Sendmail ещё даже не планировался, Брайан Керниган (Brian Kernighan) и Деннис Ритчи (Dennis Ritchie), внёсшие немалый вклад в развитие UNIX-систем (достаточно упомянуть язык программирования C), разработали макропроцессор m4.
Его основное назначение – «пропускать» через себя поток информации, выполняя макроподстановки по мере их обнаружения. Он с успехом может использоваться для программирования, генерирования документации. Но наиболее популярным применением является генерация конфигурационных файлов и прочие вопросы администрирования.
Фундаментом m4 является набор встроенных макросов, которые служат для управления потоком данных, ветвлений, определения пользовательских макросов, некоторых математических операций.
Язык m4 отличается довольно-таки своеобразным синтаксисом. Во-первых, в нём различаются открывающая и закрывающая кавычки. По умолчанию используются символы «`» и «’», которые в случае необходимости можно переопределить с помощью встроенного макроса changequote. Во-вторых, в качестве признака конца строки используется макрос dnl. (То есть после него вы можете указывать любые комментарии). Для управления потоком служит макрос divert. В частности, divert(0) очищает буфер и направляет вывод в нулевой поток (всего существует 10 выходных потоков 0-9, которые на выходе объединяются в порядке их нумерации). Конструкции $n, где n – некоторое число, являются ссылками на параметры макроса, размещённые на соответствующих местах (например, $1 ссылается на первый параметр указанного макроса). Рассмотрим простейший пример. Для начала создадим файл макроопределений:
serg$ vi test.m4
divert(0)dnl
define(`header', `<H1>$1</H1>')dnl
define(`footer', `<HR><SMALL>$1</SMALL>')dnl
define(`company', `Наша компания')dnl
Здесь мы определили три макроса, причём в header и footer используются ссылки на первый аргумент, т.е. вызов этих макросов подразумевается с одним параметром. Этот файл мы подключим как шаблон. Далее файл с исходной информацией (обратите внимание на макро-вставки):
serg$ vi test.in
header(`Страница компании')
company рада приветствовать Вас на своём сайте!
footer(`Заходите снова!')
Результат работы будет таким:
serg$ m4 test.m4 test.in
<H1>Страница компании</H1>
Наша компания рада приветствовать Вас на своём сайте!
<HR><SMALL>Заходите снова!</SMALL>
Фактически, несколько последовательных файлов рассматриваются как единый поток. То есть того же эффекта можно добиться, объединив макроопределения и исходный текст в одном файле.
Чтобы подробнее познакомится с m4, просмотрите страницу справки man m4(1). Также много интересного можно найти в шаблонах Sendmail.
DNS, DNS, DNS…
Для нормальной работы любого MTA очень важную роль играет правильная настройка DNS-сервера. Адрес почтового сервера, обслуживающего тот или иной домен, не обязан совпадать с самим доменным именем.