Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
||||||||
www.lissyara.su
—> документация
—> EXIM
|
|
в ваш
“Local/Makefile
”, и затем соберите exim обычным способом.
12.1 Настройка использования perl
Доступ к подпрограммам perl осуществляется через глобальную конфигурационную опцию
“perl_startup
”, и опреатор раскрытия
“${perl ...}
”. Если опция
“perl_startup
” отсутствует в конфигурационном файле exim, тогда интерпретатор perl не запускается, и для exim почти нет накладных расходов (т.к. ни одна библиотек perl не использует страницы памяти). Если опция
“perl_startup
” присутствует, тогда ассоциированное значение берётся чтобы быть кодом perl, выполняемым во вновь созданном интерпретаторе perl.
“
Значение perl_startup
” не раскрывается в смысле exim`a, таким образом, вам не нужно добавлять символ обратного слэша перед символами имеющими специальное значение. Опция, обычно, выглядит так
|
где
“/etc/exim.pl
” - код perl, определяющий любые подрограммы, которые вы хотите использовать с exim. Exim может быть сконфигурирован или для запуска интерпретатора perl сразу, или ждать первого раза, когда он понадобиться. Старт интепретатора в начале, гарантирует, что действие будет сделано в то время, когда exim имеет setuid привилегии, но может вызвать ненужные накладные расходя, если perl, фактически, не используется в выполняемой части. Кроме этого, отметтьте, что это не означает, что exim работает от root`a, при вызове perl`a в более поздние моменты времени. По дефолту, интерпретатор запускается только когда он необходим, и это может быть изменено в двух местах:
Установкой опции
“perl_at_start
” (булева опция) в конфигурации запрашивается запуск при начале работы exim`a.
Опция командной строки
“-ps
”, также вызывает запуск вместе с exim`ом, отменяя установку
“perl_at_start
”.
Также, есть опция командной строки
“-pd
” (для задержки), подавляющая начальный запуск, даже если уставновлена
“perl_at_start
”.
12.2 Вызов подпрограмм perl
Когда конфигурационный файл включает опцию
“perl_startup
”, вы можете использовать элемен раскрытия строк для вызова подрограмм perl, заданных кодом
“perl_startup
”. Оператор используется в любой из следующих форм:
|
вызывающих подпрограмму
“foo
” с заданными параметрами. Может быть передано, максимум, восемь параметров. Передача большего числа приводит к ошибке раскрытия, с сообщением об ошибке, такой формы:
|
Возвращаемое значение подрограммы perl оценивается в скалярных величинах до возвращения его exim`у, чтобы быть вставленным в раскрытую строку. Если возвращённое значение -
“undef
”, раскрытие терпит принудительную неудачу таким же образом, как и явный
“fail
” в элементе
“if
” или
“lookup
”. Если подпрограмма прерывается повинуясь функции perl`a
“die
”, раскрытие неудачно, с сообщением об ошибке, которое переданно
“die
”.
12.3 Вызов функций exim`a из perl`a
Внутри любого кода perl, вызыванного из exim, доступна функция
“Exim::expand_string()
”, для обратного вызова в функцию раскрытия exim. Для примера, код perl
|
сделает текущую переменную exim`a
“$local_part
”, доступной в переменной perl
“$ip
”. Отметтьте, что тут одиночные кавычки, а не двойные, для предотвращения интепретации
“$local_part
” как переменной perl.
“
Если раскрытие строки принудительно сделано неуспешным, элементом fail
”, результат
“Exim::expand_string()
” -
“undef
”. Если в строке раскрытия есть синтаксическая ошибка, из оригинального раскрытия строки вызывается ошибка perl, с соотвествующим сообщением об ошибке, таким же образом как будто использовалось
“die
”.
“
Внутри кода perl доступны две другие функции exim. Exim::debug_write()
” записывает строку в стандартный поток ошибок, если включена отладка exim. Если вы хотите добавлять в конец строки символ новой строки, вы его должны подставить.
“Exim::log_write()
” пишет строки в основной лог exim`a, добавляя в начале метку времени. В этом случае, вам не нужно добавлять перевод строки.
12.4 Использование стандартного вывода и ошибок perl`ом
Вы не должны записывать в стандартный поток ошибок, или стандартный вывод изнутри вашего кода perl, поскольку не заданы их установки. В версиях exim до 4.50, это возможно для стандартного вывода или стандартного потока ошибок, для ссылки на SMTP-соединение в течение приёма сообщения даемоном.Запись в этот поток вызывает хаос. С exim 4.50, прогресс, стандартные потоки ошибок и вывода соединены с
“/dev/null
”, в даемоне. Хаос отсутствует, но вывод потерян.
“
Утверждение perl warn
”, по умолчанию, пишется в стандартный поток ошибок. Вызовы
“warn
” могут быть встроены в модули perl, которые вы используете, но которые не контролируете. Когда exim запускает интерпретатор perl, он принимает меры для записи вывода утверждений
“warn
” в главный лог exim`a. Вы можете изменить это, путём включения соответсвующей perl`овой феньки, где-то внутри его кода. например, чтобы полностью отказаться от вывода
“warn
”, вам необходимо это:
|
Всякий раз, когда появляется
“warn
”, вызывается безымянная программа. В этом примере, код программы пуст, таким образом, она ничего не делает, но вы можете включить любой код perl, который вам нравится. Текст сообщения
“warn
” передаётся как первый параметра подпрограммы.
=============
translated by lissyara
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK