D - Определение Макроса
Имена Макросов состоят из одного символа или из слова в фигурных скобках {}. Имена из одного символа могут быть выбраны из всей таблицы ASCII, пользовательские макросы должны быть выбраны только из набора символов верхнего регистра. Буквы нижнего регистра и специальные символы имеют веутреннее использование. Длинные имена, начинающиеся с буквы нижнего регистра или знака пунктуации, зарезервированы для использования sendmail'ом, поэтому длинные пользовательские имена макросов должны начинаться с буквы верхнего регистра.
Синтаксис определения макросов таков: Dxval
Где x - имя макроса (которое может быть одним символом или словом в скобках), а val - значение, которое должен иметь этот макрос. При этом не должно быть пробелов, не принадлежащих содержимому значения макроса.
Макросы интерполируются использованием конструкции $x, где x - имя макроса для интерполяции. Эта интерполяция производится при чтении файла конфигурации, кроме строк M. Специальная конструкция $&x может быть использована в строках R для получения косвенной интерполяции.
Условные зависимости могут быть определены использованием синтаксиса: $?x text1 $| text2 $.
Это интерполирует text1, если назначен макрос $x, и text2 в обратном случае. Оператор "иначе" ($|) может быть опущен.
Имена макросов из маленьких букв зарезервированы для специальной семантики, используемой при проходе информации в или из sendmail, а специальные символы зарезервированы для условий и т.п. Имена из заглавных букв (т.е., от $A до $Z) специально зарезервированы для авторов файла конфигурации.
Следующие макросы определяются и/или внутренне используются sendmail'ом для интерполирования в argv для почтовых программ или других контекстов. Те, которые отмечены знаком | пропускают информацию в sendmail3, отмеченные знаком | пропускают информацию и в и из sendmail, не отмеченные макросы пропускают из sendmail, но внутренне больше никак не используются. Вот эти макросы:
$a | Исходящая дата в формате RFC 822. Выделяется из строки Date:. |
$b | Текущая дата в формате RFC 822. |
$c | Счетчик пересылок. Это счетчик числа строк Received: плюс значение флага командной строки -h. |
$d | Текущая дата в формате UNIX (ctime). |
$e| | (Устарел; вместо него используйте опцию SmtpGreetingMessage.) Сообщение на входе SMTP. Печатается при запуске SMTP. Первое слово должно быть макросом $j, как определено RFC821. По умолчанию "$j Sendmail $v ready at $b". Обычно переопределяется, чтобы указать номер версии конфигурации, например, "$j Sendmail $v/$Z ready at $b" |
$f | Конвертный адрес отправителя (from). |
$g | Адрес отправителя по отношению к получателю. Например, если $f - "foo", $g будет "host!foo", "foo@host.domain", или что-нибудь другое, соответствующее принимающей почтовой программе. |
$h | Хост получателя. Устанавливается в наборе правил 0 из поля $# анализируемого адреса. |
$i | Идентификационный номер в очереди, например, "HAA12345". |
$j| | "Официальное" доменное имя для этого узла. Оно полностью уточнено, если может быть найдена полная квалификация. Оно должно быть переопределено, чтобы быть полностью уточненным доменным именем, если ваша система не сконфигурирована таким образом, что может найти его автоматически. |
$k | Имя узла UUCP (из системного вызова uname). |
$l| | (Устарел; вместо него используйте опцию UnixFromLine.) Формат строки UNIX from. До тех пор, пока вы не измените формат почтового ящика UNIX, вы не должны изменять умолчание, которое равно "From $g $d". |
$m | Доменная часть значения возвращенного gethostname.При нормальных обстоятельствах, $j эквивалентен $w.$m. |
$n| | Имя демона (для сообщений об ошибках). По умолчанию "MAILER-DAEMON". |
$o| | (Устарел: вместо него используйте опцию OperatorChars.) Набор "операторов" в адресах. Список знаков, которые могут быть рассмотрены как обозначения, и которые будут разделять значения во время анализа. Например, если "@" было в макросе $o, то ввод "a@b" будет просканирован как три обозначения: "a," "@," и "b." По умолчанию ".:@[]", минимально необходимые для анализа по RFC 822; более богатый набор операторов - ".:%@!/[]", добавляющий поддержку для UUCP, %-hack, и адресов X.400. |
$p | Идентификационный номер процесса sendmail. |
$q| | Формат адреса отправителя по умолчанию. Макрос $q указывает, как должен выглядеть по умолчанию адрес отправителя в сообщении. По умолчанию "<$g>". Обычно переопределяется на "$?x$x <$g>$|$g$." Или "$g$?x ($x)$.", соответствующим двум следующим форматам: Eric Allman <eric@CS.Berkeley.EDU> eric@CS.Berkeley.EDU (Eric Allman) Sendmail надлежащим образом квотирует имена, имеющие специальные знаки, если используется первая форма. |
$r | Протокол, использовавшийся для получения сообщения. Выставляется из флага командной строки -p или кодом сервера SMTP. |
$s | Имя хоста отправителя. Выставляется из флага командной строки -p или кодом сервера SMTP. |
$t | Числовое представление текущего времени. |
$u | Пользователь-получатель. |
$v | Номер версии бинарного файла sendmail. |
$w| | Hostname этого узла. Корневое имя для этого хоста (смотри ниже всякие нерулезности). |
$x | Полное имя отправителя. |
$z | Домашний каталог получателя. |
$_ | Подтвержденный адрес отправителя. |
${bodytype} | Тип тела сообщения (7BIT или 8BITMIME), определенный из конверта. |
${client_addr} | IP адрес клиента SMTP. Определяется только в сервере SMTP. |
${client_name} | Имя хоста клиента SMTP |
${client_port} | Номер порта клиента SMTP. Определяется только в сервере SMTP. |
${envid} | Идентификационный номер конверта, переданный в sendmail как часть конверта. |
${opMode} | Текущий режим работы (из флага -b). |
Существует три типа дат, которые могут быть использованы. Макросы $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 * (конечно же, используя косвенную форму определения $&!).