5. Полное Описание Файла Конфигурации
Этот раздел детально описывает файл конфигурации.
Есть одна вещь, которую вам нужно уяснить сразу: синтаксис файла конфигурации разработан так, чтобы его можно было достаточно легко анализировать, так как синтаксический анализ производится при каждом запуске sendmail, а не для того, чтобы людям было легко его читать или писать. В списке "будущих разработок" имеется компилятор файла конфигурации.
Файл конфигурации организован как последовательность строк, каждая из которых начинается с одного символа, определяющего семантику всей остальной строки. Строки, начинающиеся с пробела или символа табуляции, являются строками-продолжениями (хотя во многих местах семантика не особенно хорошо определена). Пустые строки и строки, начинающиеся с символа "#" являются комментариями.
Имеется несколько наборов правил перезаписи. Некоторые из наборов используются внутренне, и должны иметь специфическую семантику. Другие наборы не имеют специальной семантики, и могут быть использованы определениями почтовых программ или другими наборами перезаписи.
Синтаксис этих двух команд такой:
Макрорасширения в виде $x выполняются при чтении файла конфигурации. Знак $ может быть включён использованием $$.Расширения вида $&x выполняются во время работы, используя какой-либо менее общий алгоритм. Это предназначено только для ссылочных внутренне определенных макросов, типа $h, изменяющихся во время работы.
|
Совпадение нуля или более лексем |
|
Совпадение одного или более лексем |
|
Совпадение ровно одной лексемы |
|
Совпадение любой фразы класса x |
|
Совпадение любого слова не входящего в класс x |
При любом из этих совпадений, они назначаются символу $n для замены в правосторонней части, где n - индекс в LHS. Например, если LHS:
$2 eric
|
Заместить неопределенную лексему n из LHS |
|
Канонизировать имя |
|
Обобщенная ключевая функция преобразования |
|
"Вызов" набора правил n |
|
Решение в mailer |
|
Определить host |
|
Определить user |
Синтаксис $n замещает соответствующее значение из $+, $-, $*, $=, или $~ совпадения в LHS. Это может быть использовано везде.
Имя хоста, заключенное между $[ и $] просматривается в базе(ах) данных хостов и заменяется на каноническое имя 1. Например, "$[ftp$]" может стать "ftp.CS.Berkeley.EDU", а "$[[128.32.130.2]$]" может стать "vangogh.CS.Berkeley.EDU.". Sendmail распознает его числовой IP адрес без вызова сервера имен и замещает его своим каноническим именем.
Синтаксис $( ... $) - более общая форма просмотра; он использует названное преобразование вместо неявного. Если ничего не найдено, вставляется указанное умолчание; если умолчание не определено, и ничего не найдено, значение остается без изменений. Аргументы передаются в преобразование для возможного использования.
Синтаксис $>n заставляет остаток строки замещать обычным образом, а затем передать как аргумент в набор правил n. Конечное значение набора правил n затем подставляется в это правило.
Синтаксис $> распространяется на все после имени набора правил и до конца замещаемой строки, а затем передается как первичный вход в набор правил. Позволяются рекурсивные вызовы. Например,
Синтаксис $# должен быть использован только в наборе правил 0, или подпрограмме набора правил 0. Он приводит к немедленному завершению выполнения набора правил, и сигнализирует sendmail, что адрес полностью разрешен. Полный синтаксис таков:
Обычно, если правило имеет совпадение, то оно применяется снова, поэтому правило идет по кругу до появления ошибки. RHS может быть предварена $@ или $: для изменения такого поведения. Префикс A $@ заставляет набор правил возвращаться с остатком RHS в качестве значения. Префикс $: заставляет немедленно закончить работу правила, но продолжить работу набора правил; это может быть использовано во избежание продолжения применения правила. Префикс перед продолжением обрезается.
Префиксы $@ и $: могут предшествовать описанию $>; например:
Замещение происходит в описанном порядке, то есть замещаются параметры из LHS, канонизируются имена хостов, вызываются "подпрограммы", и в конце обрабатываются $#, $@, и $:.
+---+ -->| 0 |-->resolved address / +---+ / +---+ +---+ / --->| 1 |-->| S |-- +---+ / +---+ / +---+ +---+ \ +---+ addr-->| 3 |-->| D | ----->| 4 |-->msg +---+ +---+ \ +---+ +---+ / +---+ --->| 2 |-->| R |-- +---+ +---+
S - Перезапись отправителя в зависимости от почтовой программы
R - Перезапись получателя в зависимомти от почтовой программы
Набор правил 3 должен превратить адрес в "каноническую форму". Эта форма должна иметь основной синтаксис:
Если не определено ни одного знака "@", то hostdomain-spec может быть добавлен (квадратик "D" на Рис.1.) из адреса отправителя (если в определениях почтовых программ для соответствующей отсылающей программы выставлен флаг C).
Набор правил 0 применяется после набора правил 3 к адресу, определяющему получателей. Он должен быть разделен на тройку {mailer, host, user}. Mailer должен быть определен в определениях почтовых программ в файле конфигурации. Host определяется макросом $h для использования в расширенном argv указанной почтовой программы.
Правила 1 и 2 применяются ко всем адресам отправителей и получателей соответственно. Они применяются до любого указания в определении почтовой программы. Их никогда не нужно проверять.
Набор правил 4 применяется ко всем адресам в сообщении. Он обычно используется для перевода из внутренней формы во внешнюю.
В добавок, набор правил 5 применяется ко всем локальным адресам (в частности, к тем, которые разрешаются к почтовой программе с выставленным флагом "F=5") не имеющим псевдонимов. Это последняя ловушка для локальных имен.
Kstorage macro HMessage-Id: $>CheckMessageId SCheckMessageId # Record the presence of the header R$* $: $(storage {MessageIdCheck} $@ OK $) $1 R< $+ @ $+ > $@ OK R$* $#error $: 553 Header Error Scheck_eoh # Check the macro R$* $: < $&{MessageIdCheck} > # Clear the macro for the next message R$* $: $(storage {MessageIdCheck} $) $1 # Has a Message-Id: header R< $+ > $@ OK # Allow missing Message-Id: from local mail R$* $: < $&{client_name} > R< > $@ OK R< $=w > $@ OK # Otherwise, reject the mail R$* $#error $: 553 Header ErrorПомните, что Message-Id: необязательный заголовок и не гарантирует индикацию нежелательной рассылки (спама). Этот набор правил и его не обязательно использрвать.
Имя хоста также может быть представлено как четыре числа, разделенные точками в квадратных скобках; например:
Имя хоста, прошедшее после "$@" также может быть списком хостов, разделенных запятыми. Для каждого из них находится MX, а результаты складываются в один длинный список MX. Цель всего этого - создать "фальшивые" записи MX, которых нет в DNS для частных внутренних сетей.
Последний специальный случай - имя хоста может быть передано как текстовая строка в квадратных скобках:
Синтаксис определения макросов таков:
Макросы интерполируются использованием конструкции $x, где x - имя макроса для интерполяции. Эта интерполяция производится при чтении файла конфигурации, кроме строк M. Специальная конструкция $&x может быть использована в строках R для получения косвенной интерполяции.
Условные зависимости могут быть определены использованием синтаксиса:
Имена макросов из маленьких букв зарезервированы для специальной семантики, используемой при проходе информации в или из sendmail, а специальные символы зарезервированы для условий и т.п. Имена из заглавных букв (т.е., от $A до $Z) специально зарезервированы для авторов файла конфигурации.
Следующие макросы определяются и/или внутренне используются sendmail'ом для интерполирования в argv для почтовых программ или других контекстов. Те, которые отмечены знаком | пропускают информацию в sendmail3, отмеченные знаком = пропускают информацию и в и из sendmail, не отмеченные макросы пропускают из sendmail, но внутренне больше никак не используются. Вот эти макросы:
|
Исходящая дата в формате RFC 822. Выделяется из строки Date:. | ||||||||||||||
|
Текущая дата в формате RFC 822. | ||||||||||||||
|
Счетчик пересылок. Это счетчик числа строк Received: плюс значение флага командной строки -h. | ||||||||||||||
|
Текущая дата в формате UNIX (ctime). | ||||||||||||||
|
(Устарел; вместо него используйте опцию SmtpGreetingMessage.) Сообщение на входе SMTP. Печатается при запуске SMTP. Первое слово должно быть макросом $j, как определено RFC821. По умолчанию "$j Sendmail $v ready at $b". Обычно переопределяется, чтобы указать номер версии конфигурации, например, "$j Sendmail $v/$Z ready at $b" | ||||||||||||||
|
Конвертный адрес отправителя (from). | ||||||||||||||
|
Адрес отправителя по отношению к получателю.
Например, если $f - "foo", $g будет "host!foo", "foo@host.domain", или что-нибудь другое, соответствующее принимающей почтовой программе. |
||||||||||||||
|
Хост получателя. Устанавливается в наборе правил 0 из поля $# анализируемого адреса. | ||||||||||||||
|
Идентификационный номер в очереди, например, "HAA12345". | ||||||||||||||
|
"Официальное" доменное имя для этого узла. Оно полностью уточнено, если может быть найдена полная квалификация. Оно должно быть переопределено, чтобы быть полностью уточненным доменным именем, если ваша система не сконфигурирована таким образом, что может найти его автоматически. | ||||||||||||||
|
Имя узла UUCP (из системного вызова uname). | ||||||||||||||
|
(Устарел; вместо него используйте опцию UnixFromLine.) Формат строки UNIX from. До тех пор, пока вы не измените формат почтового ящика UNIX, вы не должны изменять умолчание, которое равно "From $g $d". | ||||||||||||||
|
Доменная часть значения возвращенного gethostname.
При нормальных обстоятельствах, $j эквивалентен $w.$m. |
||||||||||||||
|
Имя демона (для сообщений об ошибках). По умолчанию "MAILER-DAEMON". | ||||||||||||||
|
(Устарел: вместо него используйте опцию OperatorChars.) Набор "операторов" в адресах. Список знаков, которые могут быть рассмотрены как обозначения, и которые будут разделять значения во время анализа. Например, если "@" было в макросе $o, то ввод "a@b" будет просканирован как три обозначения: "a," "@," и "b." По умолчанию ".:@[]", минимально необходимые для анализа по RFC 822; более богатый набор операторов - ".:%@!/[]", добавляющий поддержку для UUCP, %-hack, и адресов X.400. | ||||||||||||||
|
Идентификационный номер процесса sendmail. | ||||||||||||||
|
Формат адреса отправителя по умолчанию. Макрос
$q
указывает, как должен выглядеть по умолчанию адрес отправителя в сообщении.
По умолчанию "<$g>". Обычно переопределяется на "$?x$x <$g>$|$g$."
Или "$g$?x ($x)$.", соответствующим двум следующим форматам:
Eric Allman <eric@CS.Berkeley.EDU> eric@CS.Berkeley.EDU (Eric Allman) Sendmail надлежащим образом квотирует имена, имеющие специальные знаки, если используется первая форма. |
||||||||||||||
|
Протокол, использовавшийся для получения сообщения. Выставляется из флага командной строки -p или кодом сервера SMTP. | ||||||||||||||
|
Имя хоста отправителя. Выставляется из флага командной строки -p или кодом сервера SMTP. | ||||||||||||||
|
Числовое представление текущего времени. | ||||||||||||||
|
Пользователь-получатель. | ||||||||||||||
|
Номер версии бинарного файла sendmail. | ||||||||||||||
|
Hostname этого узла. Корневое имя для этого хоста (смотри ниже всякие нерулезности). | ||||||||||||||
|
Полное имя отправителя. | ||||||||||||||
|
Домашний каталог получателя. | ||||||||||||||
|
Подтвержденный адрес отправителя. | ||||||||||||||
${auth_authen} | Идентификационные удостоверения клиента, как определено идентификацией (выставляются при успешности) | ||||||||||||||
${auth_author} | Подлинность авторизации, то есть, параметр AUTH= команды SMTP MAIL (если есть). | ||||||||||||||
${auth_type} | Механизм, использующийся для идентификации (выставляется при успешности). | ||||||||||||||
${auth_ssf} | Длина ключа (в битах) симметричного алгоритма шифрования, используемого на уровне безопасности механизма SASL. | ||||||||||||||
${bodytype} | Тип тела сообщения (7BIT или 8BITMIME), определенный из конверта. | ||||||||||||||
${cert_issuer} | DN (отличительное имя) CA (серифицирующего авторитета) подписавшего данный сертификат (выпустившего сертификат). | ||||||||||||||
${cert_subject} | DN представленного сертификата (называемое объектом сертификации). | ||||||||||||||
${cipher} | Алгоритм шифрования, используемый для соединения, например, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CBC-SHA, DES-CBC-MD5, DES-CBC3-SHA. | ||||||||||||||
${cipher_bits} | Длина ключа (в битах) симметричного алгоритма шифрования, используемый для TLS соединения. | ||||||||||||||
${client_addr} | IP адрес клиента SMTP. Определяется только в сервере SMTP. | ||||||||||||||
${client_name} | Имя хоста клиента SMTP. Может быть заключённым в квадратные скобки IP-адресом в виде [ nnn.nnn.nnn.nnn ], если клиентский IP-адрес не разрешается, или, если разрешается, но IP-адрес разрешенного имени хоста не соответствует оригинальному IP-адресу. Определяется только в сервере SMTP. | ||||||||||||||
${client_port} | Номер порта клиента SMTP. Определяется только в сервере SMTP. | ||||||||||||||
${client_resolve} | Содержит результат, разрешенный для ${client_name} : OK, FAIL, FORGED, TEMP. Определяется только в сервере SMTP. | ||||||||||||||
${currHeader} | Значение заголовка в виде строки в кавычках (возможно, обрезанная до MAXNAME). | ||||||||||||||
${daemon_addr} | IP-адрес демона, слушающего соединения. До тех пор, пока не назначен, он будет "0.0.0.0". | ||||||||||||||
${daemon_family} | Семейство сетевых протоколов, если демон принимает сетевые соединения. Возможные значения включают "inet", "inet6", "iso", "ns", "x.25". | ||||||||||||||
${daemon_flags} | Флаги для демона, как определено частью Modifier= из DaemonPortOptions, где флаги разделены пробелами, а флаги в верхнем регистре удваиваются. То есть, Modifier=Ea будет представлен в виде "EE a" в ${daemon_flags}, что требуется для тестирования флагов в наборах правил. | ||||||||||||||
${daemon_info} | Некоторая информация о демоне в виде текстовой строки. Например, "SMTP+queueing@00:30:00". | ||||||||||||||
${daemon_name} | Имя демона из DaemonPortOptions, подопции Name=. Если эта подопция не выставлена, то используется "Daemon#", где # - номер демона. | ||||||||||||||
${daemon_port} | Порт, на котором демон принимает соединения. Пока не установлен DaemonPortOptions, скорее всего будет "25". | ||||||||||||||
${delivery_mode} | Текущий режим доставки, используемый sendmail'ом. в начале выставляется в значение опции DeliveryMode. | ||||||||||||||
${envid} | Идентификационный номер конверта, переданный в sendmail как часть конверта. | ||||||||||||||
${hdrlen} | Длина значения заголовка, сохранённого в ${currHeader} (до возможного обрезания). Если это значение больше или равно MAXNAME, то заголовок был обрезан. | ||||||||||||||
${hdr_name} | Имя поля заголовка для которого вызван текущий набор правил проверки заголовка. Это полезно для набора правил проверки заголовка по умолчанию для получения имени заголовка. | ||||||||||||||
${if_addr} | IP-адрес интерфейса входящего соединения, если он не в закольцованной? (loopback) сети. (IMHO, если не 127.0.0.1 - Прим. переводчика). | ||||||||||||||
${if_family} | Семейство IP на интерфейсе входящего соединения, если он не в закольцованной? (loopback) сети. | ||||||||||||||
${if_name} | Имя интерфейса входящего соединения. Этот макрос может быть использования
для SmtpGreetingMessage и HReceived для виртуального хостинга. Например:
O SmtpGreetingMessage=$?{if_name}${if_name}$|$j$. MTA |
||||||||||||||
${mail_addr} | Адресная часть определённой триады из адеса данного для команды SMTP MAIL. Определяется только в SMTP-сервере. | ||||||||||||||
${mail_host} | Хост из определённой триады из адеса данного для команды SMTP MAIL. Определяется только в SMTP-сервере. | ||||||||||||||
${mail_mailer} | Почтовая программа из определённой триады из адеса данного для команды SMTP MAIL. Определяется только в SMTP-сервере. | ||||||||||||||
${msg_size} | Значение параметра SIZE=, то есть, обычно, размер сообщения (в диалоге ESMTP), до того как сообщение было собрано, соответственно размер сообщения как подсчитано sendmail'ом (и может быть использованов check_compat). | ||||||||||||||
${ntries} | Количество попыток доставки. | ||||||||||||||
${opMode} | Текущий режим работы (из флага -b). | ||||||||||||||
${queue_interval} | Интервал прохода очереди заданный флагом -q. Например, -q30m выставит ${queue_interval} в "00:30:00". | ||||||||||||||
${rcpt_addr} | Адресная часть определённой триады из адеса данного для команды SMTP RCPT. Определяется только в SMTP-сервере. | ||||||||||||||
${rcpt_host} | Хост из определённой триады из адеса данного для команды SMTP RCPT. Определяется только в SMTP-сервере. | ||||||||||||||
${rcpt_mailer} | Почтовая программа из определённой триады из адеса данного для команды SMTP RCPT. Определяется только в SMTP-сервере. | ||||||||||||||
${server_addr} | Адрес сервера текущего исходящего SMTP соединения. | ||||||||||||||
${server_name} | Имя сервера текущего исходящего SMTP соединения. | ||||||||||||||
${tls_version} | Версия TLS/SSL используемая для соединения, например TLSv1, SSLv3, SSLv2. | ||||||||||||||
${verify} | Результат проверки представленного сертификата. Возможные значения:
|
Существует три типа дат, которые могут быть использованы. Макросы $a и $b в формате RFC 822; $a - время, выделяемое из строки "Date:" сообщения (если она там есть), а $b - текущая дата и время (используемые для "штемпеля"). Если во входящем сообщении не найдено ни одной строки "Date:", $a также выставляется на текущее время. Макрос $d эквивалентен макросу $b в формате UNIX (ctime).
Макросы $w, $j, и $m выставляются для опознания этого хоста. Sendmail, если это вообще возможно, пытается найти полностью определенное имя хоста; он делает это вызовом gethostname(2) для получения текущего hostname, и затем, передавая его в gethostbyname(3), который, по идее, должен вернуть каноническую версию этого имени хоста4. Если все успешно проходит, $j выставляется в полностью определенное имя и $m выставляется в доменную часть имени (все, что находится после первой точки). Макрос $w выставляется в первое слово (все, что до первой точки) если вы имеете файл конфигурации уровня 5 и выше; иначе, он будет иметь то же значение, что и $j. Если канонификация проваливается, предписывается, чтобы файл конфигурации выставлял $j в полностью определенное доменное имя5.
Макрос $f является изначально определенным идентификатором отправителя; при посылке на специфический хост макрос $g выставляется в адрес отправителя относительно получателя. Например, если я посылаю на "bollard@matisse.CS.Berkeley.EDU" с машины "vangogh.CS.Berkeley.EDU", макрос $f будет "eric", а макрос $g будет macro will be "eric@vangogh.CS.Berkeley.EDU".
Макрос $x выставляется в полное имя отправителя. Оно может быть определено несколькими способами. Оно может быть передано как флаг в sendmail. Оно может быть определено в переменной окружения NAME. В третьих, значение строки "Full-Name:" в заголовке, если она существует. И в четвертых, поле комментария в строке "From:". Если же все это ни к чему не приведет, и если сообщение исходит с этого хоста, полное имя смотрится в файле /etc/passwd.
При отправке, макросы $h, $u, и $z выставляются в host, user, и домашний каталог (если локально) получателя. Первые два берутся из частей $@ и $: правил перезаписи, соответственно.
Макросы $p и $t используются для создания уникальных строк (например, для поля "Message-Id:"). Макрос $i выставляется в идентификатор очереди на этом хосте; При вставке в строку отметки времени, это может быть полезно для отслеживания сообщений. Макрос $v выставляется равным номеру версии sendmail; обычно он помещается в отметку о времени и очень полезен при отладке.
Поле $c получает значение "счетчика пересылок", то есть, то количество раз, которое это сообщение обрабатывалось. Это может быть определено флагом командной строки -h или подсчетом отметок времени в сообщении.
Поля $r и $s соответствуют протоколу, использовавшемуся для соединения с sendmail и имени хоста отправителя. Они оба могут быть назначены, используя флаг командной строки -p, или по раздельности, используя флаги -M или -oM.
Макрос $_ устанавливается в подтвержденное имя хоста отправителя. Если отправитель имеет работающий сервер IDENT, соответствующий RFC 1413, а получатель имеет включенный протокол IDENT, он будет включать имя пользователя на том хосте.
Макросы ${client_name}, ${client_addr}, и ${client_port} выставляются в имя, адрес, и номер порта клиента SMTP вызывающего как сервер sendmail. Они могут быть использованы в наборах правил check * (используя косвенную форму определения $&, конечно же!).
Синтаксис:
Fcfile
F|program
CHucbmonet
Можно получить доступ из правил к элементам классов, используя $= или $~, (сопоставить вхождения не входящие в класс) совпадающие только с отдельным словом; вхождения из нескольких слов в классе, в этом контексте, игнорируются.
Некоторые классы имеют для sendmail внутреннее значение:
|
Содержит Content-Transfer-Encodings которые могут быть преобразованы 8->7 bit. Предопределено для содержания "7bit", "8bit", и "binary". |
|
То же самое, что и $k, то есть, имя узла UUCP. |
|
Устанавливается в набор доменов, знающих об этом хосте, изначально просто $m. |
|
Может быть установлено в набор типов MIME, которые никогда не перекодируются из восьми бит в семь. По умолчанию "multipart/signed". Типы сообщений "message/*" и "multipart/*" никогда не перекодируются напрямую. Сообщения "multipart" взегда обрабатываются рекурсивно. Обработка сообщений "message/*" контролируется классом $=s. |
|
Набор Content-Types, которые не могут быть перекодированы как base64 (если они должны быть перекодированы, они будут перекодированы как quoted-printable). Он может иметь первичные типы types (например, "text") или полные типы (типа "text/plain"). Класс инициализируется содержащим только "text/plain". |
|
Содержит набор подтипов сообщений, с которыми можно обращаться рекурсивно. По умолчанию содержит только "rfc822". Другие типы "message/*" не могут быть перекодированы 8->7 bit. Если сообщение содержит восьмибитные данные, посланные на семибитный хост, и сообщение не может быть перекодировано в семь бит, оно будет обрезано до 7 бит. |
|
Установлен в набор доверенных пользователей строкой конфигурации T. Если вы хотите считывать список доверенных пользователей из файла, используйте Ft/file/name. |
|
Выставлен в набор всех имен, о которых знает хост. Может быть использован для совпадений с локальными именами хостов. |
$={persistentMacros} | Выставляется в макрос, который должен будет сохраняться во время проходов очереди. При добавлении имен макросов в этот класс нужно быть осторожным. |
Sendmail может быть скомпилирован с разрешением использовать scanf(3) в строке F. Это позволит вам производить простейший анализ текстовых файлов. Например, чтобы прочитать все имена пользователей из системного файла /etc/passwd в класс, используйте
Path | Путь к почтовой программе |
Flags | Специальные флаги для этой почтовой программы |
Sender | Набор(ы) правил перезаписи для адресов отправителя |
Recipient | Набор(ы) правил перезаписи для адреса получателя |
Argv | Вектор аргументов, передаваемый в почтовую программу |
Eol | Строка end-of-line для этой почтовой программы |
Maxsize | Максимальный размер сообщения для этой почтовой программы |
maxmessages | Максимальное количество доставок сообщений на соединение. |
Linelimit | Максимальная длина линии в теле сообщения |
Directory | Рабочий каталог для почтовой программы |
Userid | Идентификаторы пользователя и группы для запуска |
Nice | Инкремент nice(2) для почтовой программы |
Charset | Набор символов по умолчанию для 8-битных символов |
Type | Информация о типе MTS (используется для сообщений об ошибках) |
Wait | Максимальное время ожидания почтовой программы. |
/ | Корневой каталог почтовой программы. |
В имени поля проверяется только первый символ.
Нижеописанные флаги могут быть установлены в описании почтовой программы. Любые другие флаги могут свободно использоваться для условных заголовков в сообщениях для определенных почтовых программ. Флаги, отмеченные |,не интерпретируются бинарником sendmail; они обычно используются для корреляции с флагами в строке H. Флаги, отмеченные знаком =, применяются в почтовой программе для адреса отправителя, хотя обычно это делает принимающая почтовая программа.
|
Запустить протокол Extended SMTP (ESMTP) (определенный в RFC 1651, 1652, и 1653). Этот флаг по умолчанию включен, если приветственное сообщение SMTP содержит слово "ESMTP". |
|
Просмотреть пользовательскую часть адреса в базе данных псевдонимов. Обычно выставляется только для локальных почтовых программ. |
|
Проставить пустую строку в конце сообщения. Это предназначено для работы с некоторыми глупыми версиями /bin/mail, требующими пустую строку, но сами ее не проставляющие. По-нормальному в сетевой почте это не должно применяться. |
|
Не включать в адрес комментарии. Это должно использоваться, только если вы должны работать с удаленной почтовой программой, не понимающей комментариев. Обрезает адрес из вида "Phrase <address>" или "address (Comment)" до просто "address". |
|
Если почта получена от почтовой программы
с этим флагом, любые адреса в заголовке, не имеющие знака ("@") после перезаписи
набором правил три будут иметь окончание "@domain" из адреса отправителя,
взятого с конверта. Это позволяет почту с заголовками типа:
From: usera@hosta> To: userb@hostb, userc Автоматически переписывать как: From: usera@hosta To: userb@hostb, userc@hosta Однако это не всегда работает надежно. |
|
Не включать угловые скобки вокруг адресов с синтаксисом путевого адреса. Полезно для почтовых программ, передающих адреса в оболочку, которая может интерпретировать угловые скобки как перенаправление ввода/вывода. Однако, это не защитит от других метасимволов программной оболочки. Поэтому передача адресов в оболочку не должно считаться безопасным. |
|
Эта почтовая программа хочет в заголовке строку "Date:". |
|
Эта почтовая программа слишком медленна, поэтому лучше избежать этого соединения; любое необходимое соединение произойдет во время обработки очереди. Также см. HoldExpensive. |
|
Избегать строки, начинающиеся с "From" в сообщении с знаком ">". |
|
Почтовая программа хочет флаг -f from, но только если это операция пересылки в сети (то есть, почтовая программа выдаст ошибку, если выполняющий пользователь не имеет специальных прав). |
|
Эта почтовая программа хочет строку заголовка "From:". |
|
Обычно, sendmail посылает внутренне созданную почту (например, сообщения об ошибках) используя нулевой обратный адрес, как это требуется RFC 1123. Однако, некоторые почтовые программы не принимают нулевой обратный адрес. Если это необходимо, вы можете установить флаг g, чтобы sendmail не следовал стандартам; сообщения об ошибках будут посланы от MAILER-DAEMON (на самом деле, значение макроса $n). |
|
Символы верхнего регистра в именах хостов ( части $@ триады для почтовой программы, полученной из набора правил 0) для этой почтовой программы должны быть сохранены. |
|
Произвести перезапись пользовательской базы данных на конвертный адрес отправителя. |
|
Эта почтовая программа будет говорить на SMTP с другим sendmail - поэтому он может использовать некоторые специальные особенности протокола. Эта опция не требуется (т.е.. если эта опция опущена, передача все равно будет работать нормально, хотя не настолько эффективно, как могла бы). |
|
Произвести перезапись пользовательской базы данных на получателей и отправителей. |
|
Обычно, когда sendmail соединяется с хостом посредством SMTP, он проверяет, не соединился ли он случайно сам с собой, что может случиться, если sendmail имеет неправильную конфигурацию, или если сетевой интерфейс закольцован. Этот флаг выключает проверку петли. Он должен использоваться только в очень необычных случаях. |
|
В настоящее время не работает. Зарезервирован для разбиения на куски. |
|
Эта почтовая программа локальна (т.е., будет осуществлена последняя доставка). |
|
Ограничивает длину строк, как определено в RFC821.
Эта обесцененная опция должна быть заменена почтовым объявлением L=. По историческим причинам, флаг L также выставляет флаг 7. |
|
Эта почтовая программа может разослать нескольким пользователям на одном хосте в одну транзакцию. Когда в argv части определения почтовой программы встречается макрос $u, это поле будет повторено необходимое количество раз для всех подходящих пользователей. Если его убрать, то это может убрать подавление дубликатов на удалённом узле, так как каждый получатель будет послан в отдельной транзакции. |
|
Эта почтовая программа хочет строку заголовка "Message Id:". |
|
Не вставлять в начале сообщения "From" в стиле UNIX. |
|
Всегда работать как хозяин почтового ящика получателя. Обычно sendmail работает как отправитель для локально генерируемой почты или как "демон" (на самом деле, пользователь определяется в опции u) при получении сетевой почты. Большинству локальных почтовых программ требуется обычное поведение, которое не позволит установить конвертный адрес отправителя, пока почтовая программа работает как демон. Этот флаг игнорируется, если выставлен флаг S. |
|
Использовать обратный путь в стиле route-addr в команде SMTP "MAIL FROM:" вместо просто обратного адреса; хотя это и требуется в секции 3.1 RFC821, многие хосты не обрабатывают нормально обратные пути. Обратные пути осуждаются в RFC 1123. |
|
Эта почтовая программа хочет строку "Return-Path:". |
|
Когда адрес, разрешаемый в этой почтовой программе, проверен (команда SMTP VRFY), генерировать ответы 250 вместо ответов 252. Это будет означать, что адрес локальный. |
|
То же, что и f, но посылает флаг -r. |
|
Открыть соединение SMTP на "безопасном" порту. "Безопасные" порты не являются таковыми, за исключением UNIX машин, поэтому не ясно, даст ли это что-нибудь. |
|
Обрезать символы квотирования (" и \) у адреса перед вызовом почтовой программы. |
|
Не переустанавливать userid перед вызовом почтовой
программы.
Это может быть использовано в безопасной среде, где sendmail запущен от root. Это может быть использовано для избежания поддельных адресов. Если также определено поле U=, это флаг заставит id пользователя всегда быть установленным на этого пользователя и группу (вместо того, чтобы оставить его как у root). |
|
Символы верхнего регистра в именах пользователей для этой почтовой программы должны быть сохранены. Стандарты требуют сохранение регистра в локальной части адресов, за исключением тех адресов за которые отвечает ваша система. |
|
Эта почтовая программа хочет строки "From" в стиле UUCP с уродливым "remote from <host>" в конце. |
|
Пользователь должен иметь действительный бюджет на этой машине, т.е., getpwnam должен быть успешным. Если это не так, почта не будет доставлена. Это требуется для работы ".forward". |
|
Эта почтовая программа хочет строку заголовка "Full-Name:". |
|
Эта программа хочет использовать алгоритм скрытых точек, как определено в RFC821; смысл такой: любая строка, начинающаяся с точки, будет иметь предваряющую ее точку (для того, чтобы ее обрезали на другом конце). Это гарантирует, что строки в сообщении, содержащие точку не прекратят сообщение преждевременно. |
|
Запустить Протокол Локальной Доставки Почты (Local Mail Transfer Protocol, LMTP) между sendmail и локальной почтовой программой. Это вариант SMTP определенный в RFC 2033, специально разработанный для зоставки в локальный почтовый ящик. |
|
Не просматривать записи MX для хостов, посылающих через SMTP. |
|
Расширить список символов, преобразованных в =XX запись при преобразовании в Quoted-Printable для того, чтобы не потерять те, которые не преобразуются в чистом виде между ASCII и EBCDIC. Полезно, если в вашем узле имеется мэйнфреймы IBM. |
|
Если для этого адреса не найдено псевдонимов, пропустить адрес через набор правил 5 для другого возможного разрешения. Это предназначено для перенаправления почты в другое альтернативное место доставки. |
|
Обрезать заголовки до 7-ми бит. |
|
Обрезать весь вывод до семи бит. Стоит по умолчанию, если установлен флаг L. Заметьте, что очистка этой опции не достаточна, чтобы через sendmail полностью проходили восьмибитные данные. Если опция 7 выставлена, а она в основном всегда выставлена, то восьмибитные данные на входе будут обрезаться. Нужно отметить, что эта опция затрагивает только сообщения, к которым не применялось MIME преобразование 8->7 бит. |
|
Если выставлена, то эта почтовая программа принимает для отсылки восьмибитные данные; обычная попытка MIME преобразования 8->7 бит будет пропущена. |
|
Если выставлена, производить ограниченные MIME преобразования 7->8 бит. Эти преобразования ограничены данными типа text/plain. |
|
Проверить адреса, не начинаются ли они с ":include:"; если это так, преобразовать их к почтовой программе "*include*". |
|
Проверить адреса, не начинаются ли они с "|"; если это так, преобразовать их к почтовой программе "prog". |
|
Проверить адреса, не начинаются ли они с "/"; если это так, преобразовать их к почтовой программе "*file*". |
|
Просмотреть адреса в пользовательской базе данных. |
|
Не пытаться производить первичную доставку или во время прохода очереди получателю сообщения, пока сообщение в очереди не будет выбрано использованием одного из модификаторов прохода очереди -qI/-qR/-qS или запроса ETRN. |
Конфигурационные файлы до уровня 6 предполагают опции "A", "w", "5", ":", "|", "/", и "@" в почтовой программе называющейся "local".
Почтовая программа со специальным именем "error" может быть использована для генерации сообщений об ошибках пользователя. Поле хоста (опционально) содержит возвращаемый статус выхода, а поле пользователя - распечатываемое сообщение. Статус выхода может быть числом или одним из значений USAGE, NOUSER, NOHOST, UNAVAILABLE, SOFTWARE, TEMPFAIL, PROTOCOL, или CONFIG, возвращающим соответствующий код выхода EX_, или усовершенствованный код ошибки, описанный в RFC 1893, Enhanced Mail System Status Codes. Например, вхождение:
Почтовая программа со специальным именем "discard" заставляет выкидывать любую почту, посланную к ней, но в то же время считать, что она была успешно доставлена. Эта почтовая программа не может быть использована в наборе правил 0, а только в различных наборах правил, проверяющих адрес.
Почтовая программа, называющаяся "local" должна быть определена в каждом файле конфигурации. Она используется для доставки локальной почты, и обслуживается особо несколькими образами. В добавок, три другие почтовые программы, называющиеся "prog", "*file*", и "*include*" могут быть определены для настройки доставки сообщений в программы, файлы и списки :include: соответственно. Их умолчания:
M*file*, P=[FILE], F=lsDFMPEouq9, T=DNS/RFC822/X-Unix, A=FILE $u
M*include*, P=/dev/null, F=su, A=INCLUDE $u
Directory - это на самом деле перечисление путей для просмотра с разделителем ":". Например, определение "D=$z:/" сначала опробует выполнение в домашнем каталоге получателя; если он недоступен, то попробует выполнение в корневом каталоге файловой системы. Это предназначено для использования только в почтовой программе "prog", из-за того, что некоторые оболочки (типа csh) отказываются работать, если они не могут прочитать домашний каталог. Вследствие того, что каталог очереди обычно не доступен для чтения непривилегированным пользователям, сценарии csh, как принимающие программы не смогут работать.
Userid определяет идентификатор пользователя и группы по умолчанию для работы, заменяя собой опцию DefaultUser. Если флаг S почтовой программы также определен, то этот пользователь и группа используется для работы при всех обстоятельствах. Это может быть задано как user:group для выставки идентификаторов пользователя и группы одновременно; это могут быть целые числа или символические имена, просматриваемые в файлах passwd и group соответственно. Если определено только символическое имя пользователя, в качестве идентификатора группы используется идентификатор, прописанный для этого пользователя в файле passwd.
Поле Charset используется при преобразовании сообщения в MIME; этот набор символов используется в заголовке Content-Type:. Если он не установлен, используется опция DefaultCharset, если же и она не назначена, используется значение "unknown-8bit". Внимание: это поле применяется к почтовой программе отправителя, а не получателя. Например, конвертный адрес отправителя принадлежит локальной сети, а получателя - внешней, набор символов будет установлен из поля Charset= для локальной сетевой почтовой программы, а не для внешней.
Поле Type= устанавливает тип информации, используемой в сообщениях об ошибках MIME, как определено в RFC 1894. На самом деле это три значения, разделенные слешами: MTAtype (то есть, описание того, как называются хосты), тип адреса (описание адресов электронной почты), и тип диагностики (описание кодов диагностических ошибок). Каждое из них должно быть зарегистрированным значением, или начинаться с "X-". По умолчанию "dns/rfc822/smtp".
Поле m= устанавливает максимальное количество сообщений в попытке доставки в одном соединении SMTP или LMTP.
Поле /= определяет новый корневой каталог для почтовой программы. Путь расширяется макросом и затем передаётся в системный вызов "chroot". Корневой каталог изменяется до принятия во внимание поля Directory или смены идентификатора пользователя.
Поле Wait= определяет максимальное время ожидания ответа почтовой программы после отсылки в неё всех данных. Это применяется к почтовым программам, которые были ответвлены sendmail'ом.
H[?mflags?]hname: htemplate
H[?${macro}?]hname: htemplate
Некоторые заголовки имеют специальную семантику, описываемую позднее.
Вторичный синтаксис позволяет производить проверку заголовков в том виде, как они были считаны. Для включения проверки, используйте:
HHeader: $>Ruleset
HHeader: $>+Ruleset
Указанный набор правил (Ruleset) вызывается для указанного заголовка Header, и может возвращать $#error для отказа от сообщения, или $#discard для сброса сообщения (как и в остальных наборах правил check_*). Набор правил получает заголовок тело-поля как аргумент, то есть не заголовок имя-поле; см. также ${hdr_name} и ${currHeader}. Заголовок рассматривается как структурированное поле, то есть, комментарии (в кавычках) перед обработкой удаляются, если не используется вторая форма $>+. Только один набор правил может быть ассоциирован с заголовком; sendmail будет тихо игнорировать несколько вхождений.
Например, следующие строки в конфигурации:
SCheckMessageId
R< $+ @ $+ >$@ OK
R$* $#error $: Illegal Message-Id header
Message-Id: любой текст
Message-Id: <легальный текст@домен> дополнения
Поддерживаемые опции (со старыми, однобуквенными именами в квадратных скобках):
AliasFile=spec, spec, ...
A Только если проверка подлинности успешна.
По умолчанию пытаться всякий раз, когда доступна SMTP AUTH.
Port | Имя/Номер исходящего порта соединения (по умолчанию - любой свободный порт) |
Addr | Маска адреса (по умолчанию - INADDR_ANY) |
Family | Семейство адресов (по умолчанию - INET) |
SndBufSize | Размер буфера TCP на отсылку |
RcvBufSize | Размер буфера TCP на приём |
Modifier | Опции (флаги) для демона |
h использовать для команды HELO имя интерфейса.
Если используется модификатор "h", то в команде HELO/EHLO используется имя соответствующего выходного интерфейса (или выбранного через параметр Connection или по-умолчанию).
Name | Имя демона, определяемое пользователем (по умолчанию - "Daemon#") |
Port | Имя/номер рабочего порта (по умолчанию "smtp") |
Addr | Адресная маска (по умолчанию INADDR_ANY) |
Family | Семейство адресов (по умолчанию INET) |
Listen | Размер очереди прослушивания (по умолчанию 10) |
Modifier | Опции (флаги) для демона |
SndBufSize | Размер буфера TCP на отправку |
RcvBufSize | Размер буфера TCP на прием |
a | всегда требовать идентификацию |
b | привязываться к интерфейсу, через который была получена почта |
c | производить канонификацию имени хоста (.cf) |
f | требовать полностью квалифицированное имя хоста (.cf) |
u | разрешить неквалифицированные адреса (.cf) |
C | не производить канонификацию имени хоста |
E | запретить ETRN (смотри RFC 2476) |
O DaemonPortOptions=Name=MSA, Port=587, M=Ea
i | Доставлять интерактивно (синхронно) |
b | Доставлять в фоне (асинхронно) |
q | Просто класть сообщение в очередь (доставка во время обработки очереди) |
d | Отложить доставку и все преобразования (доставка во время обработки очереди) |
Safe
AssumeSafeChown
ClassFileInUnsafeDirPath
DontWarnForwardFileInUnsafeDirPath
ErrorHeaderInUnsafeDirPath
FileDeliveryToHardLink
FileDeliveryToSymLink
ForwardFileInUnsafeDirPath
ForwardFileInUnsafeDirPathSafe
ForwardFileIngroupWritableDirPath
GroupWritableAliasFile
GroupWritableDirPathSafe
GroupWritableForwardFileSafe
GroupWritableIncludeFileSafe
HelpFileinUnsafeDirPath
IncludeFileInUnsafeDirPath
IncludeFileInUnsafeDirPathSafe
IncludeFileIngroupWritableDirPath
LinkedAliasFileInWritableDir
LinkedClassFileInWritableDir
LinkedForwardFileInWritableDir
LinkedIncludeFileInWritableDir
LinkedMapInWritableDir
LinkedServiceSwitchFileInWritableDir
MapInUnsafeDirPath
NonRootSafeAddr
RunProgramInUnsafeDirPath
RunWritableProgram
TrustStickyBit
WorldWritableAliasFile
WriteMapToHardLink
WriteMapToSymLink
WriteStatsToHardLink
WriteStatsToSymLink
Safe - это умолчание. Выше имеется более подробное описание этих флагов. Использование этой опции не рекомендуется.
s | Отвергнуть необъявленные 8-битные данные ("strict") |
m | Преобразовать необъявленные 8-битные данные в MIME ("mime") |
p | Пропустить необъявленные 8-битные данные ("pass") |
p | Печатать сообщения об ошибке (по умолчанию) |
q | Без сообщений, просто выдавать статус выхода |
m | Отправлять назад ошибки почтой |
w | Печатать ошибки (отправлять почтой, если пользователь не находится в системе) |
e | Отправлять назад ошибки почтой и всегда выдывать нулевой статус выхода |
FallbackMXhost=fallbackhost
public | Позволить открытый доступ |
needmailhelo | Требовать команду HELO или EHLO до MAIL |
needexpnhelo | Требовать команду HELO или EHLO до EXPN |
noexpn | Полностью запретить EXPN |
needvrfyhelo | Требовать команду HELO или EHLO до VRFY |
novrfy | Полностью запретить VRFY |
noetrn | Полностью запретить ETRN |
noverb | Полностью запретить VERB |
restrictmailq | Ограничить команду mailq |
restrictqrun | Ограничить флаг командной строки -q |
noreceipts | Не возвращать успешные DSN |
goaway | Запретить все основные запросы статуса SMTP |
authwarnings | Вкладывать в сообщение заголовок X-Authentication-Warning: |
aliases | Files |
hosts | dns nis files |
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100
Заметь!: эти уровни версий не имеют ничего общего с номерами версий в файлах. Например, при написании файлов конфигурации версии 8 (в особенности, 8.7) использовались конфигурации уровня 6.
"Старые" файлы конфигурации определяются как уровень версии один. Фаулы уровня версии два делают следующие изменения:
(1) | Канонификация имени хоста ($[ ... $]) добавляет точку, если имя распознано; это дает файлу конфигурации способ определить, совпало ли что-нибудь. (На самом деле, это просто инициализирует преобразование хоста с флагом "-a." - вы можете переустановить это на что угодно явным объявлением преобразования.) |
(2) | Расширение имени хоста по умолчанию постоянно при всех обработках; конфигурации версий уровня один в некоторых местах обработки выключали доменное расширение (то есть, добавляя имя локального домена). Конфигурации версий уровня два по идее включают последнюю точку для указания того, что это уже каноническое имя. |
(3) | Локальные имена, не являющиеся псевдонимами проходят через новое выделяющее правило пять; оно может быть использовано для добавления локального ретранслятора. Такое поведение может быть предотвращено посредством разрешения локального имени с начальным "@". То есть, допустим, то, что разрешается на локальную почтовую программу и имя пользователя "vikki" пройдет через набор правил пять, но имя пользователя "@vikki" потеряет "@", не пройдет через набор правил пять, или же будет обработано как в предыдущем примере. Здесь расчет на то, что это может быть использовано для реализации такого поведения, когда почта, посланная к "vikki" будет обработана центральным концентратором, а почта, посланная к "vikki@localhost" будет доставлена напрямую. |
Файлы версии уровня три позволяют # начинать комментарии во всех строках. Исключения составляют экранированные обратным слешем знаки # и синтаксис $#.
Конфигурации версии уровня четыре, по историческим причинам, полностью эквивалентны уровню три.
Файлы конфигурации версии уровня пять изменяют определение по умолчанию, что $w является просто первым компонентом имени хоста.
Файлы конфигурации версии уровня шесть переделывают многие опции локальной обработки (типа псевдонимизации и соответствия началу адреса для символов "|") во флаги почтовых программ; это обеспечивает детализированный контроль над специальными локальными обработками. Файлы конфигурации версии уровня шесть также могут включать длинные имена опций. Опция ColonOkInAddr (разрешающая двоеточия в местной части адресов) для конфигурационных файлов более низкого уровня по умолчанию on; Файл конфигурации требует некоторый дополнительный интеллект для правильной обработки структуры группы RFC 822.
Конфигурационные файлы седьмого уровня версии используют новые имена опций для замены старых макросов ($e стало Smtp GreeetingMessage, $l стало UnixFromLine, и $o стало OperatorChars). Также, до седьмой версии, предполагался флаг F=q (использовать возвращаемое значение 250 вместо 252 для команды SMTP VRFY).
Конфигурационные файлы восьмого уровня версии разрешают $# в левосторонней части строк наборов правил.
Конфигурационные файлы девятого уровня версии разрешают круглые скобки в наборах правил, то есть они не рассматриваются как комментарии и, следовательно, не удаляются.
Строка V может опционально иметь /vendor для указания того, что это файл конфигурации использует специфические для частного поставщика изменения8. Вы можете использовать "/Berkeley" для подчеркивания, что этот файл конфигурации использует Berkeley разновидность sendmail.
На преобразования ссылаются, используя синтаксис:
Аргументы передаются в преобразование для произвольного использования. Большинство классов преобразований могут интерполировать эти аргументы в их значения используя для указания соответствующего аргумента синтаксис "%n" (где n - цифра).
Аргумент "%0" обозначает ключ базы данных. Например, правило
research %1@%0.ATT.COM
Встроенное преобразование с именем и классом "host" - это просмотр канонизации имени хоста. Таким образом, синтаксис:
dbm | Просмотр базы данных, используя библиотеку ndbm(3). Sendmail должен быть скомпилирован с определенной NDBM. |
btree | Просмотр базы данных с использованием интерфейса btree к библиотеке Berkeley db(3). Sendmail должен быть скомпилирован с определенной NEWDB. |
hash | Просмотр базы данных с использованием хэш-интерфейса к библиотеке Berkeley db(3). Sendmail должен быть скомпилирован с определенной NEWDB. |
nis | Просмотры NIS. Sendmail должен быть скомпилирован с определенной опцией NIS. |
nisplus | Просмотры NIS+. Sendmail должен быть скомпилирован с определенной опцией NISPLUS. Аргумент - имя таблицы, используемой для просмотров, а флаги -k и -v могут быть использованы для установки столбцов ключа и значения соответственно. |
hesiod | Просмотры Hesiod. Sendmail должен быть скомпилирован с определенной опцией HESIOD. |
ldap | Просмотры каталогов LDAP X500. Sendmail должен быть скомпилирован с определенной опцией LDAPMAP. Преобразование поддерживает большинство стандартных аргументов и большинство аргументов командной строки программы ldapsearch. Заметьте, что по умолчанию, если один запрос соответствует многим значениям, будет возвращено олько первое значение, если не установлен флаг преобразования -z (разделитель значений). Также, флаг преобразования -1 при множестве совпадений даст результат, как будто не было ни одного совпадения. |
netinfo | Просмотры NeXT NetInfo. Sendmail должен быть скомпилирован с определенной опцией NETINFO. |
nsd | Преобразование nsd для IRIX 6.5 и старше. Представлено и поддерживается Bob Mende из SGI, mende@sgi.com |
text | Просмотры текстовых файлов. Формат текстового файла определяется флагами -k (число ключевых полей), -v (число поля значений), и -z (разделитель полей). |
ph | Преобразование запросов PH. Представлено и поддерживается Mark Roth, roth@uiuc.edu. Дополнительная информация на страничке "http://www-dev.cso.uiuc.edu/sendmail/". |
stab | Просмотры внутренней таблицы символов. Используется внутри для псевдонимизирования. |
implicit | По-настоящему должно бы называться "alias" - используется для просмотра файлов псевдонимов по умолчанию, и используется по умолчанию, если не определен класс для файлов псевдонимов. |
user | Просматривает пользователей, используя getpwnam(3). Для указания имени возвращаемого поля может быть использован флаг -v (хотя обычно используется только для проверки существования пользователя). |
host | Канонифицирует доменные имена хостов. Получив имя хоста, вызывает сервер имен для поиска канонического имени для этого хоста. |
bestmx | Возвращает лучшую запись MX для заданного в качестве ключа имени хоста. Всегда предпочитается текущая машина- то есть, текущая машина является одним из хостов, перечисленных в качестве записи MX с самым низким значением предпочтения, следовательно, имеется гарантия его возврата. Это может использоваться для определения, является ли эта машина целью записи MX, и почта может быть принята на этом основании. Если задан флаг -z, то возвращаются все имена MX, разделенные заданным разделителем. |
sequence | Аргументы в строке "K" - список преобразований;
результирующее преобразование просматривает аргументы-преобразования, пока
не найдет совпадение для указанного ключа. Например, если определение ключа:
Kmap1 ... Kmap2 ... Kseqmap sequence map1 map2 тогда просмотр "seqmap" сначала производится в map1. Если найдено, то происходит немедленный возврат. Иначе, тот же ключ используется для map2. |
syslog | Ключ протоколируется через syslogd(8). Просмотр возвращает пустую строку. |
switch | Прямо как преобразование "sequence", за исключением
того, что порядок преобразований определяется сервисным переключателем.
Аргумент - имя сервиса для просмотра; значения из сервисного переключателя
добавляются к имени преобразования для создания новых имен преобразований.
Например, рассмотрим определение ключа:
Kali switch aliases вместе с вхождением сервисного переключателя: aliases nis files Это вызовет запрос по преобразованию "ali" для поиска преобразований с именами "ali.nis" и "ali.files" в этом порядке. |
dequote | Обрезает у имени двойные кавычки ("). Не обрезает
обратные слеши, и не будет обрезать кавычки, если результирующая строка
будет содержать не возможный для просмотра синтаксис (то есть, основные
ошибки типа незакрытых угловых скобок; более сложные ошибки типа неизвестных
хостов не проверяются). Предназначается для приема почты из систем типа
DECnet, квотирующих странный синтаксис типа
"49ers::ubell" Обычное использование - что-то типа: Kdequote dequote ... R$- $: $(dequote $1 $) R$- $+ $: $>3 $1 $2 Для предотвращения неожиданных результатов необходима осторожность; например, "|someprogram < input > output" потеряет свои кавычки, но результат, скорее всего, будет отличаться от ожидаемого. К счастью, такие случаи достаточно редки. |
Regex | Определение преобразования в строке K
содержит регулярное выражение. Любой ключевой ввод сравнивается с этим
выражением, используя программы регулярных выражений стандарта POSIX regcomp(),
regerr(), и regexec(). Если вам нужно узнать больше информации о сравнении
регулярных выражений, смотрите документацию на эти программы. Если не определен
флаг -m не производится никакой перезаписи ключа. Без него, если
ключ отвергнут или использован -s, то он замещается подходящими
подстроками,разделенными $| или строкой, определенной флагом -d.
Флаги, имеющиеся в преобразовании:
-n не -f чувствительность к регистру -b основные регулярные выражения (по умолчанию развернуто) -s совпадение подстроки -d устанавливает разделитель, используемый для -s -a добавить строку к ключу -m только проверка совпадения, не принимать/отказывать значение -D не производить просмотр в режиме отложенной доставки Флаг -s может включать опциональный параметр, который может быть использован для выбора подстроки в результате просмотра. Например, -s1,3,4 Заметьте, для совпадения $ в строке, нужно использовать \$$. Если шаблон содержит пробелы, они должны быть заменены пустым подстановочным символом, если это не сам пробел. |
program | Аргументы в строке K являются путями к программам и любые начальные параметры будут пропущены. При вызове преобразования, к начальным параметрам добавляется ключ, а программа запускается с от пользователя и группы по умолчанию. Первая строка стандартного вывода возвращается как значение просмотра. Это все имеет множество потенциальных проблем безопасности, и жутко тормозит, поэтому использоваться должно только тогда, когда действительно необходимо. |
macro | Устанавливает или очищает значение макроса. Для установки макроса,
передайте значение как первый аргумент в просмотр преобразования. Для очистки
макроса, не передавайте аргумент. преобразование всегда возвращает пустую
строку. Пример типичного использования:
Kstorage macro ... # set macro ${MyMacro} to the ruleset match R$+ $: $(storage {MyMacro} $@ $1 $) $1 # set macro ${MyMacro} to the empty string R$* $: $(storage {MyMacro} $@ $) $1 # clear macro ${MyMacro} R$- $: $(storage {MyMacro} $) $1 |
arith | Выполняет простые арифметические операции. Операции задаются ключём,
в настоящее время поддерживаются +, -, *, /, l (для меньше чем), и =. Два
операнда задаются как аргументы. просмотр возвращает результат подсчёта,
то есть TRUE или FALSE для сравнений, во всех остальных случаях целые числа.
Все возможные опции для преобразований игнорируются. Простой пример:
Kcomp arith ... Schech_etrn R$* $: $(comp l $@ $&{load_avg} $@ 7 $) $1 RFALSE $# error ... |
Большинство из них принимают в качестве аргументов одни и те же опциональные флаги и имя файла (или имя преобразования для NIS; имя файла является корнем пути к базе данных, так что ".db" или какое-либо другое расширение будет добавлено для получения настоящего имени базы данных). Известные флаги:
-o | Указывает, что это преобразование опционально - то есть, если оно не может быть открыто, не выдается ни какой ошибки, а sendmail будет считать, что преобразование было, но было пустым. |
-N, -O | Если ни -N, ни -O не указаны, sendmail использует адаптивный алгоритм для определения смотреть или нет нулевые байты в конце ключей. Сначала пробуются оба; если находится ключ с нулевым байтом, он никогда снова не будет опробован без нулевого байта и наоборот. Если указан -N, то никогда не пробуется без нулевого байта, а если указан -O, то никогда не пробуется с нулевым байтом. Указание одного из них может увеличить скоромть совпадений, но никогда не является необходимым. Если указаны оба -N и -O, sendmail никогда не будет пробовать никакие совпадения - то есть, все будет считаться неудачным. |
-ax | Добавить строку x к успешным совпадениям. Например, преобразование по умолчанию host добавляет точку при успешном совпадении. |
-Tx | Добавить строку x при временной неудаче. Например, x будет добавлена если просмотр DNS вернёт "server failed" или просмотр NIS не сможет найти сервер. Смотри также флаг -t |
-f | Не преобразовывать из верхнего в нижний регистр до просмотра ключа. |
-m | Только прверка совпадения (без замены значения). Если вы беспокоитесь о существовании ключа, а не о значении (например, при поиске преобразования NIS "hosts.byname"), этот флаг удержит преобразование от замены значения. Однако, аргумент -a все еще добавляется при совпадении, и умолчание все еще берется при несовпадении. |
-kkeycol | Имя ключевого столбца (для NIS+) или номер (для текстовых просмотров). Для преобразований LDAP это строка фильтра LDAP, в которой %s заменяется буквенным содержанием ключа просмотра и %0 заменяется содежимым, полученным из LDAP при просмотре ключа согласно RFC2254. |
-vvalcol | Имя столбца значения (для NIS+) или номер (для текстовых просмотров). Для преобразований LDAP это имя одного или более возвращаемых атрибутов; множество атрибутов могут быть разделены запятыми. Если не указано, возвращаются все атрибуты найденные при совпадении. |
-zdelim | Разделитель столбцов (для текстовых просмотров). Может быть одним знаком или одной из специальных строк "\n" или "\t" для указания новой строки или табуляции соответственно. Если полностью опущен, разделителем столбцов считается любая последовательность пробелов. Для преобразований LDAP это знак-разделитель для сбора множества значений в одну возвращаемую строку. Если не установлен, просмотр LDAP будет возвращать только первое совпадение. |
-t | Обычно, когда преобразование пытается просмотреть имя хоста и сервер ошибочен (то есть, sendmail не может найти ни одного сервера имен; это не то же самое, что вхождение не было найдено в преобразовании), обработанное сообщение ставится в очередь для дальнейшей обработки. Флаг -t отключает такое поведение, позволяя считать, что если происходит временная ошибка (сервер отключен), то это была постоянная ошибка (вхождение не найдено). В частности, это полезно для просмотров DNS, когда чей-то еще неправильно сконфигурированный сервер имен может вызвать проблемы на вашей машине. Однако здесь необходима осторожность, чтобы не откинуть почту, которая могла бы быть разрешена корректно, если бы вы попытались снова. Общая стратегия - перенаправлять такую почту на другой, возможно, имеющий лучшее соединение, почтовый сервер. |
-D | Не производить просмотр в режиме отложенной доставки. Этот флаг выставлен по умолчанию для преобразования хостов. |
-Sspacesub | Символ, используемый для замены символов пробела после успешного просмотра преобразования (особенно полезно для регулярных выражений и преобразований syslog. |
-sspacesub | Только для преобразования dequote, символ, используемый для замены символов пробела после успешного деквотирования. |
-q | Не удалять кавычки перед просмотром. |
-Llevel | Только для преобразования syslog. Определяет уровень для использования в вызове syslog. |
-A | При перестройке файла псевдонимов, флаг -A
заставляет соединяться дублированные вхождения в текстовой версии. Например,
два вхождения:
list: user1, user2 list: user3 при присутствии флага -A будет считаться за одно вхождение list: user1, user2, user3 |
Следующие добавочные флаги присутствуют только в преобразованиях LDAP:
-R | Не следовать автоматически по ссылкам(?). Чтобы использовать этот флаг, sendmail должен быть скомпиллирован с -DLDAP_REFERRALS. |
-n | Только получить имена атрибутов. |
-rderef | Установить опцию разименования(? - dereference) псевдонимов в never, always, search или find |
-sscope | Назначить границы поиска - base, one (один уровень), или sub (поддерево). |
-hхост | Имя сервера LDAP. Некоторые библиотеки LDAP для надёжности позволяют использовать множество имён хостов, разделенных пробелами. В добавок, каждый из перечисленных хостов может заканчиваться двоеточием и номером порта вместо порта LDAP по умолчанию. |
-bбаза | База поиска LDAP |
-pпорт | Порт сервиса LDAP |
-lвремя | Ограничение времени на запросы LDAP. |
-Zразмер | Ограничение размера (количества совпадений) для запросов LDAP |
-dDN | уникальное имя, используемое для входа на сервер LDAP |
-Mметод | метод аутентификации в сервере LDAP. Должен быть одним из LDAP_AUTH_NONE, LDAP_AUTH_SIMPLE, или LDAP_AUTH_KRBV4 |
-Ppasswordfile | Файл, содержащий секретный ключ для метода аутентификации LDAP_AUTH_SIMPLE или имени файла с билетом Kerberos для LDAP_AUTH_KRBV4. |
-1 | Поиск в LDAP будет успешным, если будет единственное совпадение. |
Преобразование dbm добавляет строки ".pag" и ".dir" к заданному имени файла; преобразования hash и btree добавляют ".db". Например, описание преобразования
Kuucp dbm -o -N /usr/lib/uucpmap
Описывает опциональное преобразование класса "dbm" по имени "uucp"; оно всегда имеет нулевые байты в конце каждой строки, и данные находящиеся в /usr/lib/uucpmap.{dir,pag}.
Для постороения преобразований, ориентированных на три базы данных, может быть использована программа makemap(8). Она принимает следующие флаги:
|
Не переделывать верхний регистр в нижний при преобразовании. |
|
Включать нулевые байты в ключах. |
|
Добавить к существующему (старому) файлу. |
|
Позволить замещение существующих ключей; обычно, при ошибке, заново вставляет существующий ключ. |
|
Печатать происходящее. |
Демон sendmail не должен перестартовываться для чтения новых преобразований до тех пор, пока вы не замените их на месте; используется блокировка файлов, так что преобразования не будут считаны, пока они не обновлены9.
Новые классы могут быть добавлены в подпрограмму setupmaps в файле conf.c.
Местонахождение это базы данных контролируется опцией UserDatabaseSpec.
Имена полей определяют и синтаксис, и семантику значения. Определенные поля включают:
maildrop | Адрес доставки для этого пользователя. Эта запись может иметь несколько значений. В частности, списки рассылки будут иметь одну запись maildrop на каждого пользователя в списке. |
mailname | Выходящее почтовое имя для этого пользователя.
Для каждого выходящего имени должна быть соответствующая запись maildrop
для этого имени, чтобы разрешить обратную почту. См. также
:default:mailname. |
mailsender | Каждое сообщение, посланное на этот адрес, будет иметь указанного конвертного отправителя. Предназначено для списков рассылки, и обычно будет именем соответствующего адреса -request. Очень похоже на owner-list синтаксис в файле псевдонимов. |
fullname | Полное имя пользователя. |
office-address | Офисный адрес пользователя. |
office-phone | Офисный телефон пользователя. |
office-fax | Офисный факс пользователя. |
home-address | Домашний адрес пользователя. |
home-phone | Домашний телефон пользователя. |
home-fax | Домашний факс пользователя. |
project | (Краткое) описание проекта, которым занимается указанное лицо. В Университете это часто просто имя научного руководителя. |
plan | Указатель на файл, откуда может быть взята информация о плане. |
Ко времени написания этого документа, только несколько из этих полей на самом деле использовались в sendmail: maildrop и mailname. Запланирована программа finger, использующая остальные поля.
Если первая лексема имени пользователя возвращаемая набором правил 0 - знак "@", просмотр пользовательской базы данных пропускается. Смысл этого в том, чтобы пользовательская база данных представляла собой набор умолчаний для группы (в нашем случае, Computer Science Division); почта, посылаемая на определенную машину должна игнорировать эти умолчания.
При отправке почты, имя отправителя просматривается в базе данных. Если этот пользователь имеет запись "mailname", значение этой записи используется как его выходящее имя. Например, я могу иметь запись:
Если для пользователя найдена запись "maildrop", но не существует ни одной соответствующей записи "mailname", производится проверка записи ":default:mailname". Если она существует, то это имя считается именем хоста, подставляемого вместо локального хоста. Например, в нашем случае, мы можем установить его в "CS.Berkeley.EDU". в результате, все, кто известен в базе данных будет отправлять почту со штампом "user@CS.Berkeley.EDU", а те, кто в ней не перечислен будут использовать локальное имя хоста.
1. На самом деле, это полностью эквивалентно $(host hostname$). В частности, может быть использовано умолчание $:. [назад]
2. Вы можете захотеть использовать это для специальных "пользовательских" расширений. Например, в адресе "jgm+foo@CMU.EDU"; часть "+foo" - это не часть имени пользователя, и передается в локальную почтовую программу для местного использования. [назад]
3. С версии 8.6, все эти макросы имеют разумные умолчания. Предыдущие версии требовали, чтобы они были определены. [назад]
4. Например, в некоторых системах gethostname может возвратить "foo", которое будет преобразовано в "foo.bar.com" посредством gethostbyname. [назад]
5. Старые версии sendmail не предопределяли $j вообще, так что, вплоть до 8.6, файлы конфигурации должны были определять $j. [назад]
6. Старая опция g была комбинирована в опцию DefaultUser. [назад]
7. При запуске в качестве демона, переходит к этому пользователюпосле принятия соединения, но до прочтения любой команды SMTP. [назад]
8. И конечно, поставщики поощряются при включении самих себя в список распознаваемых поставщиков изменением подпрограммы setvendor в conf.c. Для регистрации вашей разновидности пошлите письмо sendmail@Sendmail.ORG. [назад]
9. То есть, не создавайте новые преобразования и не кладите их командой mv(1) на место. Так как преобразования уже открыты, новые преобразования никогда не будут увидены. [назад]
10. Известно, что эти инструкции не полны. Планируется, что будущая версия пользовательской базы данных будет включать вещи типа сервиса finger - и хорошую документацию. [назад]