Мы — долго запрягаем, быстро ездим, и сильно тормозим.

RFC
Программирование
FreeBSD
man
EXIM
  4.62
  часть 1
  часть 2
  часть 3
  часть 4
  часть 5
  часть 6
  часть 7
  часть 8
  часть 9
  часть 10
  часть 11
  часть 12
  часть 13
  часть 14
  часть 15
  часть 16
  часть 17
  часть 18
  часть 19
  часть 20
  часть 21
  часть 22
  часть 23
  часть 24
  часть 25
  часть 26
  часть 27
  часть 28
  часть 29
  часть 30
  часть 31
  часть 32
  часть 33
  часть 34
  часть 35
  часть 36
  часть 37
  часть 38
  часть 39
  часть 40
  часть 41
  часть 42
  часть 43
  часть 44
  часть 45
  часть 46
  часть 47
  часть 48
  часть 49
  часть 50
  часть 51
  часть 52
  часть 53
  filter facility
  4.70


www.lissyara.su —> документация —> EXIM —> 4.62 —> часть 11

11. Раскрываемые строки


    Mногие строки, конфигурации exim, раскрываются перед использованием. Одни раскрываются каждый раз, при использовании, другие же, раскрываются лишь один раз.
   Раскрытие строки - дословное копирование её слева направо, исключая символы доллара (
$) и обратного слэша. Символ $ задаёт начало части строки, которая интерпретируется и заменяется, как описно ниже, в разделе 11.5. Обратный слэш используется как экранирующий символ, как описано в следующем разделе.

11.1 Дословный текст в раскрываемых строках

   Неинтерпретируемый $ может быть включен в раскрываемую строку, путём помещения перед ним обратного слэша.Обратные слэш может быть использован для экранировки любого специального символа, который может быть развёрнут, включая экранирование самого себя, обратного слша. Если используестя строка в кавычках, должны использоваться два обратных слэша, поскольку кавычки сами вызывают интерпретацию обратного слэша, при чтении строки (смотрите секцию 6.16).
   Часть строки может быть определна как нераскрываемая, при помощи помещения её между двумя символами \N. Это необходимо для защиты регулярных выражений, которые часто содержат символы
$ и \. Например:
deny senders = \N^\d{8}[a-z]@some\.site\.example$\N

   При достижении первого символа \N экспандер копирует последующие символы без интерпретации, пока не достигнет следующего символа \N или новой строки.

11.2 Последовательности с обратным слэшем, в расширенных строках.

   Обратный слэш, с последующим за ним символом n, r, или t - это специальная последовательность, означающая новую строку, возврат каретки, и табуляцию, соответствено. если за обратным слешем следует три восьмеричных цифры, то это расшифровывается как восьмеричная запись единичного символа, а если за обратным слешем следует символ x и до двух шестнадатеричных цифр - то это тракутется как шестнадцатеричная запись символа.
   Эти последовательности распознаются и внутри кавычек. Их интерпретация, как есть, полезна в строках без кавычек, и в других случаях поиска строк, которые могут быть раскрыты.

11.3 Тестирование раскрываемых строк.

   Очень многие, раскрываемые, строки могут быть проверены, путём вызова exim с опцией -be. В этом случае принимаются параметры команды, или строки со стандартного ввода, если аргументов нет, выполняет их через код раскрытия строк, и пишет результат на стандартный вывод. Переменные, основанные на конфигурации, установлены, но т.к. не обрабатывается никакое сообщение, переменные типа $local_part не имеют никакого значения. Однако, опцию -be можно применять для проверки файлов и обращений к БД, а также для проверки раскрытия операторов раскрытия, типа sg, substr и nhash.
   Exim управляет root`овыми привилегиями, при вызове его с опцией
-be, и выполняется под uid и gid пользователя, вызвавшего его, для того чтобы пользователь использующий опцию -be не смог получить доступ к файлам, которые ему не принадлежат.

11.4 Принудительный отказ от раскрытия строки.

   
   Множество раскрытий, описанных в следующем разделе, имеют подстроки
true и false, помещённые в в символах фигурных скобок. То, какая из двух строк используется, зависит от условия, которое тоже раскрывается. Если вместо false используется слово fail (не в фигурных скобках), раскрытие строки происходит неудачно, и может быть обнаружено кодом, который запрашивал раскрытие. Это называют принудительным отказом раскрытия и его последствия зависят от обстоятельств. В одних случаях это неотличимо от любой другой ошибки раскрытия, но в отдельных случаях может быть предпринять иное действие. Такие варианты упомянуты в документации раскрывемой опции.

11.5 Элементы раскрытия.

   Следующие элементы распознаются в раскрываемых строках. Пустое пространство может использоваться между подпунктами, которые являются ключевыми словами, или подстроками снаружи фигурных скобок, для улучшения читабельности. Внимание: Внутри фигурных скобок, пустое пространство имеет значение.

$<имя переменной> или ${<имя переменной>}
Замена содержимым, переменной, например:
$local_part
${domain}

Вторая форма записи может быть использована для отделения, от имени переменной, последующих алфавитно-цифровых символов. Эта форма (с использованием фигурных скобок) доступна только для переменных; её нельзя применять для заголовков сообщений. Имена переменных приведены в секции 11.9. Если используется имя несуществующей переменной, то раскрытие терпит неудачу.

  • ${<op>:<строка>}
    Вначале раскрывается строка, а затем производится заданная <op> операция. Например:
    ${lc:$local_part}
    

    Строка начинается с первого символа после двоеточия, которое может предворяться пустым пространством. Список операторов приведен в секции 11.6. Нотация оператора использует простое раскрытие элементов, которые могут иметь один аргумент, поскольку это уменьшает число фигурных скобок, и позволяет легче понимать итоговую строку.

  • ${dlfunc{<file>}{<function>}{<arg>}{<arg>}...}
    Это раскрытие динамически загружается, и затем вызывает локальную функцию, написанную на C. Такая функциональность доступна лишь в случае, если exim собран со следующим аргументом:
    EXPAND_DLFUNC=yes
    

    заданным в Local/Makefile. Однажды загруженный, exim запоминает динамически загруженный объект, так что не требуется перезагружать файлы объектов при работе того же процесса exim (но сам экзим, часто запускает свои новые копии, при работе).
       У функции может быть от нуля до восьми аргументов. Собирая локальную функцию, вызываемую таким образом, необходимо включить local_scan.h. Переменные и функции exim`a, определённые в API также доступны для динамически загружаемых функций. Сама функция должна иметь следующий вид:
    int dlfunction(uschar **yield, int argc, uschar *argv[])
    

    Где uschar является typedef для unsigned char в local_scan.h. Функция должна возвратить одно из следующих значений:
    OK: Успех. Строка, помещённая в переменную
    yield помещена в раскрытую строку и будет построена.
    FAIL: Непринудительная неудача раскрытия, с сообщением об ошибках взятых из
    yield, если такое задано.
    FAIL_FORCED: Принудительный отказ раскрытия, с сообзением об ошибках из
    yield, если такое задано.
    ERROR: Тоже что и
    FAIL, за исключением, что пишутся ошибки в лог.
       При использовании gcc для сборки такой функции, необходимо добавить ключ
    -shared к строке запуска gcc. Также в при сборке exim`a необходимо добавить -export-dynamic в EXTRALIBS.

  • ${extract{<key>}{<string1>}{<string2>}{<string3>}}
    Вначале раздельно раскрываваются
    key и <string1>. Начальные и замыкающие пустые символы (пробелы, табы) удаляются из key (но не из строк). Ключ (key) не должен состоять полностью из цифр. Раскрытая строка <string1> должна иметь форму:
    <key1> = <value1>  <key2> = <value2> ...
    

    где знак равенства и пробел (но не оба одновременно) опциональны. Если любое из значений содержит пустые символы, они должны быть помещены в двойные кавычки, чтобы быть обработанными, как описано в разделе 6.16. Раскрытие <string1> - поиск значения соответствующего ключу. Поиск нечувсвителен к регистру. Если ключ найден, <string2> раскрывается, и заменяет элемент, иначе используется <string3>. В процессе раскрытия <string2> переменная $value содержит значение, которое было извлечено. Впоследствии, оно восстанавливается до предыдущего значение, которое, возможно, было.
       Если
    {<string3>} отсутствует, элемент заменяется пустой строкой, если ключ не найден. Если {<string2>} также отсутствует, то используется значение, которое было извлечено. Таким образом, например, эти два раскрытия идентичны и уступают (видимо, соответствуют) 2001:
    ${extract{gid}{uid=1984 gid=2001}}
    ${extract{gid}{uid=1984 gid=2001}{$value}}
    

    Вместо {<string3>} может быть слово fail (не в фигурных скобках), например:
    ${extract{Z}{A=... B=...}{$value} fail }
    

    Это вызывает принудительный отказ раскрытия (смотрите секцию 11.4); {<string2>} должна присутствовать, чтобы fail был распознан.

  • ${extract{<number>}{<separators>}{<string1>}{<string2>}{<string3>}}
    Аргумент
    number (число, в смысле цифра) должен полностью состоять из десятичных цифр, кроме начальных и конечных пустых символов, которые игнорируются. Это то, что отличает эту форму extract от предыдущего вида. Она ведёт себя точно также, за тем исключением, что вместо того, чтобы извлечь названное поле, оно извлекает из <string1> поле, номер которого даётся как первый аргумент. Вы можете использовать $value в <string2> или fail вместо <string3> как и прежде.
       Поля в строке разделены любым из символов в строке разделителя. Они мугут включать пустые символы и табы. Первое поле имеет номер один. Если номер отрицательный, то поля считаются с конца строки, считая что самое правое имеет номер
    -1. Если задано номер 0, то возвращается вся строка, целиком. Если модуль числа (видимо, всё-таки, не модуль числа, а само число) больше чем число полей в строке, то результат - раскрытие строки <string3> или пучтая строка, если <string1> отсутствует. Например:
    ${extract{2}{:}{x:42:99:& Mailer::/bin/bash}}
    

    вернёт 42 и
    ${extract{-4}{:}{x:42:99:& Mailer::/bin/bash}}
    

    вернёт 99. Два последовательных разделителя означают, что область между ними пуста (например пятая область, в предыдущем примере).

  • ${hash{<string1>}{<string2>}{<string3>}}
       Это - текстовая функция хэширования, и она была первой, осуществлённой в ранних версиях exim. В нынешних релизах добавлены другие функции работы с хэшами (числовой, MD5, и SHA-1), описанные ниже.
       Первые две строки, после раскрытия, должны быть числами. Зовите их
    <m> и <n>. Если вы используете фиксированные значения для этих чисел, т.е. <string1> и <string2> не изменяются при раскрытии, вы можете использовать более простой синтаксис оператора, без использования некоторых фигурных скобок:
  • ${hash_<n>_<m>:<string>}
       Второе число является опциональным (в обоих нотациях). Если
    <n> больше или равно длинне строки, раскрытие строки вернёт саму строку. Иначе, будет вычислена новая строка с длинной <n>, с помощью применения функции хэширования к строке. Новая строка состоит из <m> символов взятых от начала строки.
    abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQWRSTUVWXYZ0123456789
    

    Если <m> не задана, то используется значение 26, с целью, чтобы были тока строчные буквы. Например:
    $hash{3}{monty}}              результат  jmg
    $hash{5}{monty}}              результат  monty
    $hash{4}{62}{monty python}}   результат  fbWx
    

  • $header_<header name>: или $h_<header name>:
    Смотрите $rheader ниже.

  • $bheader_<header name>: или $bh_<header name>:
    Cмoтpитe $rheader ниже.

  • $rheader_<header name>: или $rh_<header name>:
    Замена заголовка содержанием названной строки. Например:
    $header_reply-to:
    

       Символ новой строки, который завершает строку заголовка не включен в раскрытие, но внутренние символы новой строки (разделяющие заголовок на на несколько строк) могут присутствовать.
       Различие между
    rheader, bheader, и header в способе интерпретации данных в строке заголовка.

  • rheader - выдаёт оригинальное содержимое (raw) заголовка, вообще без обработки, без удаления начального и конечного пустого пространства.
  • bheader - удаляет пустые символы в начале и конце строки, затем декодирует base64 или экранированные кавычками MIME слова в пределах заголовка, но не производит трансляции символов. Если расшифровка MIME слов неудачна, возвращается raw строка. Если в результате расшифровки появляется символ двоичного нуля, он заменяется вопросительным знаком, это то, что делает exim с бинарными нулями, переданными в строке заголовка.
  • header - пробует транслировать строку как bheader, к стандартному набору символов. Это - попытка воспроизвести ту же строку, которая была бы отображена MUA пользователю. Если трансляция неудачна, возвращается строка bheader. Попытки трансляции предпринимаются только на OC которые поддерживают функцию iconv(). Это указано при компиляции макросом HAVE_ICONVв системном Makefile или Local/Makefile.
       В файле фильтра, целевой набор символов для заголовка может быть определен командой следующей формы:
    headers charset "UTF-8"
    

       Эта команда затрагивает все ссылки на расширения $h_ (или $header_) в командах фильтра. В отсутствии этой команды, итоговый набор символов устанавливается из опции headers_charset в текущей конфигурации. Дефолтовые значения этих опий - значение HEADERS_CHARSET Local/Makefile. Окончательное значение по-умолчанию - ISO-8859-1.
       Имена заголовков следуют синтаксису RFC 2822, в котором говориться, что они могут содержать любые символы, кроме пробелов и двоеточий. Следовательно, фигурные скобки, не заканчивают имена заголовков, и не могут использоваться для помещения в начале и конце, как в переменных. Попытка сделать такое - ошибка синтаксиса.
       Только заголовки, являющиеся общими для всех копий сообщения видны этому механизму. Тут фигурируют только оригинальные заголовки, переданные с сообщением, и некоторые, добавленые правилами
    warn, или системным фильтром. Заголовки, добавленные к особой копии сообщения, роутером или транспортом - недоступны.
       Для входящих SMTP сообщений, никакие заголовки не видны в ACL, в правилах до DATA ACL, поскольку структура заголовка не установлена, пока сообщение не получено. Заголовки, добавленные правилами
    warn, например в RCPT ACL, сохраняются до тех пор пока, недоступны заголовки входящего сообщения, в какой точке они добавлены. Однако, когда выполняются DATA ACL, заголовки добавленные другими ACL - видны.
       В именах заголовков не имеет значения, какие используются буквы - заглавные, или строчные. Если следующий символ - пробел, то завершающее доеточие может быть пропущено, но это не рекомендуется, поскольку вы можете забыть об этом, когда оно понадобиться. Когда имя заголовка завершается пробелом, оно включается в раскрываемую строку. Если сообщение не содержит данный заголовок, раскрытие заменяется пустой строкой. (Смотрите условие определения в секции 11.7 для проверки существования заголовка.)
       Если есть более чем один заголовок с одинаковым именем, то все они объединяются для формирования строки замены, максимальной длинны 64k. Символ новой сроки вставляется между каждой строкой. Для раскрытия заголовка, для тех заголовков, которые содержат список адресов, также вставляется запятая, между строками.

  • ${hmac{<hashname>}{<secret>}{<string>}}
       Эта функция использует криптографическое хэширование (либо
    MD5 либо SHA-1), для конвертации пароля и текста, в код идентификации сообщения, как определено в RFC2104. Это отличается от ${sha1:secret_text...} или ${sha1:secret_text...}, в этом шаге hmac добавляет в подпись криптографический хэш допустимый для аутентификации, что невозможно только с MD5 or SHA-1. Имя хэша, в настоящее время, должно быть либо MD5 либо SHA-1. Например:
    ${hmac{md5}{somesecret}{$primary_hostname $tod_log}}
    

    Для имени хоста mail.example.com и времени 2002-10-17 11:30:59, это будет:
    dd97e3ba5d1a61b5006108f8c8252953
    

    Как пример, где это можно использовать, вы могли бы поместить в основной части конфигурации экзима:
    SPAMSCAN_SECRET=cohgheeLei2thahw
    

    В роутере или транспорте можно было бы иметь:
    headers_add = \
      X-Spam-Scanned: ${primary_hostname} ${message_exim_id} \
      ${hmac{md5}{SPAMSCAN_SECRET}\
      {${primary_hostname},${message_exim_id},$h_message-id:}}
    

    Тогда данное сообщение, вы могли бы проверить, где оно было проверено, по заголовкам X-Spam-Scanned:. Если вы знаете секретную строку, то можно проверить подлинность этой строки, повторно вычислив опознавательный код из имени хоста, message ID и заголовка Message-id:. Это может быть сделано с использованием опции экзима -be, или другими средствами, например использованием функции hmac_md5_hex() в Perl.

  • ${if <condition> {<string1>}{<string2>}}
       Если
    <condition> - истинно, то раскрывается <string1> и заменяет весь элемент; иначе используется <string2>. Доступные кондишены описаны в секции 11.7. Например:
    ${if eq {$local_part}{postmaster} {yes}{no} }
    

    Вторая строка может не присутствовать, если условие не соответствует, и условие не истинно, элемент ничем не заменяется. Аналогично, слово fail может быть вместо второй строки (без фигурных скобок). В этом случае происходит принудительный отказ раскрытия, если условие не истинно (смотрите секцию 11.4).
       Если отсутствуют обе строки, результат - строка
    true если условие истинно, и пустая строка если условие ложно. Это облегчает написание своих ACL и условий для роутеров. Например, вместо:
    condition = ${if >{$acl_m4}{3}{true}{false}}
    

    вы можете использовать
    condition = ${if >{$acl_m4}{3}}
    

  • ${length{<string1>}{<string2>}}
       Элемент
    length используется для извлечения начальной части строки. Обе строки раскрываются, и первая должна вернуть число <n>. Если вы используете жёстко заданное число, т.е. строка <string1> при раскрытиии не изменяется, вы можете использовать более простую нотацию оператора, без некоторых фигурных скобок:
    ${length_<n>:<string>}
    

    Результатом будет или первые <n> символов, или вся строка <string2>, смотря что короче. Не путайте length со strlen, возвращающей длинну строки.

  • ${lookup{<key>} <search type> {<file>} {<string1>} {<string2>}}
       Это первый из двух различных типов поиска отдельных элементов, оба которых описаны в следующем пункте.
  • ${lookup <search type> {<query>} {<string1>} {<string2>}}
       Две формы поиска определяют поиск данных в БД и файлах, как обсуждается в главе 9. Первая форма использует одноключевой поиск, а вторая использует стиль запросов для поиска. Строки
    <key>, <file>, и <query> раскрываются перед использованием.
       Если есть пустые символы в элементе поиска как часть команды фильтра, правила повтора или перезаписи, правила роутинга для
    manualroute, или любого другого мета, где пустое пространство существенно, то элемент поиска должен быть заключён в двойные кавычки. Использование поиска данных в файлах фильтров пользователей может быть заблокировано системным администратором.
       Если поиск успешен,
    <string1> раскрывается и замещает весь элемент. В процессе его раскрытия переменная $value содержит данные, возвращённые поиском. Впоследствии оно возвращается к предыдущему своему значению (внешне оно пустое). Если поиск неудачен, раскрывается <string2> и замещает элемент. Если <string2> пропущена, то замена - пустая строка, в случае неудачного поиска. Если <string2> присутствует, то она может быть самостоятельным вложенным поиском, таким образом обеспечивая механизм поиска значения по-умолчанию, в случае неудачи основоного поиска.
       Если вложенный поиск используется как часть
    <string1>, $value содержит данные для внешнего поиска, когда параметры второго поиска раскрыты, и также когда <string2> второго поиска раскрыта, второй поиск будет неудачен (нихрена толком не понял этой фразы). Вместо <string2> можно использовать fail, и в этом случае, если поиск неудачен, с раскрытием происходит принудительный отказ при раскрытии строки (смотрите секцию 11.4). Если пропущены обе строки - <string1> и <string2> то результат - искомое значение в случае успешного поиска, и ничего в случае неудачи.
       Для одноключевого поиска
    неполной строке разрешается предшествовать типу поиска, чтобы сделать частичное соответствие и * или *@ могут быть вместе со строкой поиска, для поиска по-умолчанию, если ключ не совпадает (смотрите секции 9.6 и 9.7 для деталей).
       Если используется частичный поиск, переменные
    $1 и $2 содержат части ключа в процессе раскрытия текста замены. Они возвращаются к их предыдущим значениям после окончания поиска.
       Вот пример поиска альяса
    postmaster`a в обычном файле альясов:
    ${lookup {postmaster} lsearch {/etc/aliases} {$value}}
    

    Этот пример использует NIS+ для поиска полного имени пользователя, соответствующего локальной части адреса, с принудительным отказом раскрытия, в случае неудачи.
    ${lookup nisplus {[name=$local_part],passwd.org_dir:gcos} \
      {$value}fail}
    

  • ${nhash{<string1>}{<string2>}{<string3>}}
       Три строки раскрываются; первые две должны вернуть числа. Зовите их
    <n> и <m>. Если вы используете жёско заданные значения этих чисел, т.е. если <string1> и <string2> не изменяются при раскрытии, то вы можете использовать более простую форму этого оператора, без использования некоторых фигурных скобок:
    ${nhash_<n>_<m>:<string>}
    

    Второе число является опциональным (в обоих нотациях). Если тут только одно число, результатом будет число из диапазона от нуля до <n>-1. Иначе строка, обработанная функцией хэшрования, вернёт два числа, разделённых слэшем, в диапазонах от нуля до <n>-1 и от нуля до <m>-1, соответственно. Например:
    ${nhash{8}{64}{supercalifragilisticexpialidocious}}
    

    вернёт строку 6/33.

  • ${perl{<subroutine>}{<arg>}{<arg>}...}
       Этот элемент доступен лишь в том случае, если exim собран с встроенным интерпретатором perl. Имя подпрограммы и параметры, вначале, раздельно раскрываются, а затем вызывается подпрограмма perl с этими параметрами. Никакие дополнительные параметры передаваться не должны; максимальное разрешённое число аргументов, включая имя подпрограммы - девять.
       Значение возвращённое подпрограммой вставляется в раскрываемую строку, за тем исключением, если возвращённое значение
    undef. В этом случае, раскрытие неудачно, точно также как при fail в поиске. Возвращённое значение - скалярная величина. Независимо от того, что вы возвращаете, оно будет скалярной величиной. Например, если вы вернёте имя вектора perl, возвращённое значение будет размер вектора, а не содержимое.
       Если подпрограмма выполняется с вызовом функции perl die(), раскрытие неудачно, с сообщенем об ошибках, которые были переданы функцией die(). Больше информации, о встроенном perl можно получить из части 12.
       Роутер
    redirect имеет опцию вызывающую forbid_filter_perl, которая блокирует использование этого пункта в файлах фильтра.

  • ${prvs{<address>}{<secret>}{<keynumber>}}
       Первый параметр - полный e-mail адрес, и второй - секретная ключевая строка. В третьем аргументе задаётся номер ключа, и он является опциональным. При его отсутствии значение по-дефолту - ноль. Результат раскрытия - prsv-подписанный адрес e-mail, типичное его использование - с опцией
    return_path транспорта smtp как часть проверки схемы адреса возврата (BATV). За дополнительной информацией и примерами обратитесь к секции 39.38.
       
  • ${prvscheck{<address>}{<secret>}{<string>}}
       Этот пункт - дополнение пункта
    prvs. Он используется для проверки prsv-подписанных адресов. Если раскрытие первого параметра не приводит к синтаксически правильному prsv-подписанному адресу, то всё раскрывается в пустую строку. Когда первый параметр раскрывается в синтаксически правильный prsv-подписанный адрес, второй аргумент раскрывается с prvs-расшифрованным адресом и ключевым числом, в переменных $prvscheck_address и $prvscheck_keynum соответственно.
       Эти две переменные могут использоваться в раскрытии второго аргумента, для отыскания секретного слова. Тогда действительность prsv-подписанного адреса проверяется по нему. Результат сохраняется в переменную $prvscheck_result, пустую при ошибке и
    1 при соответствии.
       Третий параметр является дополнительным, если он отсутствует, то дефолт - пустая строка. Теперь этот параметр раскрыт. Если результат - пустая строка, то результат раскрытия - расшифрованная версия адреса. Проверяется, была ли сигнатура верной. Иначе, результат раскрытия - раскрытие третьего аргумента.
       Все три переменные могут использоваться в раскрытии третьего параметра. Однако, по завершении раскрытия остаётся только $prvscheck_result. За дополнительной информацией и примерами обратитесь к секции 39.38.
       
  • ${readfile{<file name>}{<eol string>}}
       Вначале, раздельно раскрываются
    имя файла и набор символов конца строки. Затем читается файл, и его содержимое заменяет весь пункт. Символы новой строки в файле, заменяются строкой <eol string>, если они есть. Иначе, символы перевода строк оставляют на месте. Раскрытие строки не применяется к содержимому файла. Если же вы хотите этого, то необходимо поместить элемент в оператор expand. Если файл не может быть прочитан, раскрытие строки неудачно.
       Роутер
    redirect имеет опцию forbid_filter_readfile которая блокирует использование этого пункта в пределах файлов фильтра.
       
  • ${readsocket{<name>}{<request>}{<timeout>}{<eol string>}{<fail string>}}
       Этот пункт вставляет данные из UNIX или Internet-сокета в раскрываемую строку. Минимальный способ использования требует только два аргумента, как в этих примерах:
    ${readsocket{/socket/name}{request string}}
    ${readsocket{inet:some.host:1234}{request string}}
    

       Для UNIX-сокета, первая подстрока должна быть путём к сокету. Для Internet-сокета, первая подстрока должна содержать подстроку inet: сопровождаемую именем хоста или IP адресом, через двоеточие порт, или имя сервиса, которое должно быть в /etc/services. Опционально, IP-адрес может заключаться в квадратные скобки. Адреса IPv6 лучше записывать именно так. Например:
    ${readsocket{inet:[::1]:1234}{request string}}
    

        Можно задать только одно имя хоста, но если поиск по нему приведёт более чем к одному IP-адресу, будут сделаны попытки соединиться с каждым из них, по очереди, пока не получиться подключиться. Для обоих видов сокетов, exim осуществляет подключение, пишет строку запроса (если она не пустая), и читает из сокета пока не наступит конец файла. Применяется таймаут в 5 секунд. Дополнительные аргументы могут продлить это время. Во-первых, можно изменить таймаут:
    ${readsocket{/socket/name}{request-string}{3s}}
    

       Четвёртый аргумент позволяет изменить символ перевода строки в читаемых данных, таким же образом как и в readfile (смотрите выше). Этот пример превращает их в пробелы:
    ${readsocket{inet:127.0.0.1:3294}{request-string}{3s}{ }}
    

       Как и во всех раскрытиях, подстроки раскрываются до начала обработки. Ошибки в под-раскрытиях приводят к ошибке самого раскрытия. Кроме того, могут встречаться такие ошибки:

  • Ошибка создания дескриптора файла сокета.
  • Ошибка соединения с сокетом.
  • Ошибка записи строки запроса.
  • Таймаут чтения из сокета.
       По дефолту, любая из этих ошибок приводит к ошибке раскрытия. Однако, если вы используете пятый аргумент, раскрытие происходит, если встречается любая из вышеупомянутых ошибок. Например:
    ${readsocket{/socket/name}{request-string}{3s}{\n}\
      {socket failure}}
    

       Вы можете проверить существование Unix-сокета, поместив раскрытие в ${if exists, но получается проверка кто отработает быстрей - открытие сокета, или проверка его существования. Таким образом, более корректно использовать пятый параметр, чтобы быть уверенным в том что будет корректно обработана ошибка раскрытия несуществующего Unix-сокета, или ошибка соединения с интернет-сокетом.
       Роутер
    redirect имеет опцию forbid_filter_readsocket которая блокирует использование этого пункта в пределах файлов фильтра.

  • $rheader_<header name>: or $rh_<header name>:
       Этот пункт вставляет необработанные (
    raw) строки заголовка. Это описано в пункте header, выше.
       
  • ${run{<command> <args>}{<string1>}{<string2>}}
       Вначале, отдельно, раскрываются команда и её параметры, затем команда запускается отдельным процессом, но под теми же gid и uid. Как и во всех других командах, выполняемых exim, по дефолту shell не используется. Если вы хотите его использовать, то нужно явно указать это в коде.
       Если команда выполняется успешно (возвращённый код равен нулю), то
    <string1> раскрывается и замещает строку; в процессе этого раскрытия стандартный вывод команды находиться в переменной $value. Если команда неудачна, то раскрывается и используется <string2>. Ещё раз, стандартный вывод команды, в процессе раскрытия находиться в переменной $value. Если <string2> отсутствует, то результат пуст. Альтернативно, <string2> может быть словом fail (не в фигурных скобках), для принудительного отказа от раскрытия, если команда не была успешно выполнена. Если пусты обе строки, то результат содержит стандартный вывод, в случае успеха и ничего не содержит в случае неудачи.
       Код возврата команды помещается в переменную $runrc, и впоследствии остаётся установленным, поэтому, в файле фильтра можно делать так:
    if "${run{x y z}{}}$runrc" is 1 then ...
      elif $runrc is 2 then ...
      ...
    endif
    

       Если выполнение команды неудачно (например, команда не существет), то код возврата равен 127 - тот же самый код, который шеллы используют для несуществующих команд.
       Предупреждение: В роутере или транспорте вы не можете установить порядок раскрытия опций, за исключением тех предварительный условий, чей порядок задокументирован. Поэтому нельзя быть уверенным в том что находиться в $runrc, запуская команду в одной опции и используя эту переменную в другой.
       Роутер
    redirect имеет опцию forbid_filter_run которая блокирует использование этого пункта в пределах файлов фильтра.
       

  • ${sg{<subject>}{<regex>}{<replacement>}}
       Этот пункт работает как оператор замены в perl, с глобальной опцией
    /g. Однако, в отличие от perl, exim не изменяет строку, вместо этого он возвращает строку для вставки в общее раскрытие. Есть три парааметра: строка объекта, регулярное выражение, строка замены. Например:
    {sg{abcdefabcdef}{abc}{xyz}}
    

    результат - xyzdefxyzdef. Поскольку все три параметра раскрываются перед использованием, то если в регулярном выражении необходимы символы $ или символы содержащие обратный слэш, то они должны быть экранированы. Например:
    ${sg{abcdef}{^(...)(...)\$}{\$2\$1}}
    

    вернёт defabc, и
    ${sg{1=A 4=D 3=C}{\N(\d+)=\N}{K\$1=}}
    

    вернёт K1=A K4=D K3=C. Отметтьте использование \N для защиты регулярного выражения от раскрытия.

  • ${substr{<string1>}{<string2>}{<string3>}}
        Три строки раскрываются, первые две должны вернуть числа. Зовите их
    <m> и <n>. Если вы используете фиксированные значения для этих чисел, т.е. <string1> и <string2> не изменяются при раскрытии, вы можете использовать более простой синтаксис оператора, без использования некоторых фигурных скобок:
    ${substr_<n>_<m>:<string>}
    

       Второе число опционально (в обоих нотациях). Если, в более простом формате, оно отсутствует, то предваряющее подчёркивание также должно быть опущено.
       Элемент
    substr может использоваться для извлечения более коростких подстрок из более длинной. Первое число <n>, является смещением точки начала, второе - <m> - требуемая длинна. Например:
    ${substr{3}{2}{$local_part}}
    

       Если стартовое смещение - больше длинны строки - то результатом будет пустая строка; если сумма старта плюс длинна смещения - результатом будет правая часть строки начинающаяся с точки старта.Первый символ строки имеет позицию ноль.
       Элемент
    substr может иметь отрицательные значения смещения, чтобы рассчитать позицию с правой стороны строки. Последний символ имеет значение смещения -1, предпоследний -2 и так далее. Вот пример:
    ${substr{-5}{2}{1234567}}
    

    результат - 34. Если абсолютное значение отрицательного смещения больше, чем длинна строки, то подстрока начинается с начала строки и её длинна уменьшается на величину проскакивания. Например:
    ${substr{-5}{2}{12}}
    

    вернёт пустую строку, но
    ${substr{-3}{2}{12}}
    

    вернёт 1.
       Когда второй параметр
    substr опущен, то берётся остаток строки, при положительном смещении. Если же смещение отрицательно, то берутся все символы строки, предшествующие точке смещения. Например, смещение -1 и никакая (нулевая) длинна, в этих одинаковых примерах:
    ${substr_-1:abcde}
    ${substr{-1}{abcde}}
    

    вернёт всю строку, кроме последнего символа, т.е. abcd.

  • ${tr{<subject>}{<characters>}{<replacements>}}
       Этот элемент - посимвольная замена строки объекта. Второй аргумент - список символов, которые будут заменены в строке объекта. Каждый совпадающий символ заменяется соответствующим символом из списка замены. Например:
    ${tr{abcdea}{ac}{13}}
    

    вернёт 1b3de1. Если во второй строке символов есть повторения, то используется последний из символов. Если третья строка короче чем вторая, последний символ копируется. Однако, если она пуста, то замена не производиться.

    11.6 Операторы раскрытия.

       Для раскрывающихся элементов, которые выполняют преобразования на одном аргументе строки, используется нотация оператора, поскольку это проще, и используется меньше фигурных скобок. Подстрока раскрывается до того, как над ней будет проведена операция. Следующие операции могут быть выполнены:
       

  • ${address:<string>}
       Строка интерпретируется как адрес, согласно RFC2822, и поскольку это может фигурировать в строках заголовков, то из неё извлекается эффективный адрес. Если строку не удаётся успешно разобрать, то результат пуст.

  • ${base62:<digits>}
       Строка должна полностью состоять из десятичных цифр. Число конвертируется к основанию 62 выводится как строка из шасти символов, включая ведущие нули. В некоторых окружениях, где exim использует основание 36 вместо 62 для идентификаторов сообщений (поскольку эти системы не учитывают регистр символов в имени файла), основание 36 используется этим оператором несмотря на его название. Отметтьте: Чтобы было абсолютно ясно: это не кодирование base64.

  • ${base62d:<base-62 digits>}
       Строка должна полностью состоять из цифр с основанием 62, или, в операционных системах где exim использует основание 36 вместо 62, из цифр с основанием 36. Число преобразуется в десятичные цифры, и выводится как строка.

  • ${domain:<string>}
       Строка интерпретируется как адрес, в соответствии с RFC2822, и из нёё извлекается домен. Если строка не может быть корректно разобрана, то результат пуст.

  • ${escape:<string>}
       Если строка содержит какие-то непечатные символы (ага, слова из трёх букв, например :)), то они будут преобразованы к их escape-последовательностям, начинающимся с символа обратного слэша (
    \). Символы, с установленным битом значимости (так называемые 8-ми битные символы) считаются печатными и не контролируются опцией print_topbitchars.
       
  • ${eval:<string>} и ${eval10:<string>}
       Эти пункты поддерживают простейшие арифметические операции в раскрываемых строках. Строка (после раскрытия) должна быть обычным арифметическим выражением, но оно ограничено пятью основными операторами (плюс, минус, умножение, деление и остаток) и круглыми скобками. Все операции выполняются с использованием арифметики целых чисел. Плюс и минус имеют меньший приоритет чем умножение, деление и остаток. Операторы с одинаковым приортитетом оцениваются слева направо.
       В
    eval числа могут быть десятичными, восьмеричными (начинаются с 0) или шестнадцатеричными (начинаются с 0x). В eval10 все числа считаются десятичными, даже если они начинаются с нуля. Это может оказаться полезным при обработке чисел извлечённых из дат и времени, они часто содержат ведущие нули.
       Число может сопровождаться
    K или M для умножения его на 1024 или 1024*1024, соответственно. Поддерживаются отрицательные числа. Результат вычисления - десятичное число (без K или M). Например:
    ${eval:1+1}       результат 2
    ${eval:1+2*3}     результат 7
    ${eval:(1+2)*3}   результат 9
    ${eval:2+42%5}    результат 4
    

    Как более реалистичный пример, в ACL можно использовать так:
    deny   message = Too many bad recipients
           condition =                    \
             ${if and {                   \
               {>{$rcpt_count}{10}}       \
               {                          \
               <                          \
                 {$recipients_count}      \
                 {${eval:$rcpt_count/2}}  \
               }                          \
             }{yes}{no}}
    

    Условие верно в случае, если было более 10 команд RCPT и меньше половины из них привели к правильному получателю.

  • ${expand:<string>}
       Оператор
    expand заставляет раскрывать строку по второму разу. Например:
    ${expand:${lookup{$domain}dbm{/some/file}{$value}}}
    

    вначале ищет строку в файле, в процессе раскрытия оператора expand, а затем снова раскрывает то, что было найдёно.

  • ${from_utf8:<string>}
       Мир медленно двигается в сторону Unicode, и хотя для электронной почты стандартов нет, она тоже двигается туда же.  Многие другие приложения (включая некоторые БД) начинают сохранять данные в Unicode, используя кодировку UTF-8. Этот оператор конвертирует строку UTF-8 в строки ISO-8859-1. Коды символов UTF-8 более 255 преобразовываются в подчёркивания.Ввод должен быть корректной строкой UTF-8. Если это не так, то результатом будет неопределённая последовательность символов.
       Точки кодов Unicode со значениями меньше 256 совместимы с ASCII и ISO-8859-1 (также известной как Latin-1). Для примера, символ 169 - символ копирайта (
    ©)в обоих случаях, хотя способ которым он закодирован - различен. В режиме UTF-8, более чем один байт необходим для символов  кодом более 127, тогда как в ISO-8859-1 используется однобайтное кодирование (таким образом, оно ограничено 256 символами). Это позволяет сделать прямой перевод из UTF-8 в ISO-8859-1.

  • ${hash_<n>_<m>:<string>}
       Оператор
    hash - это более простой интерфейс к функции хэширования, которая может использоваться, когда два её параметра - фиксированные числа (в противоположность строкам, динамически строящимся при раскрытии). Эффект, тоже самое, что и:
    ${hash{<n>}{<m>}{<string>}}
    

    Для дополнительных подробностей, смотрите описание главного оператора hash выше. Аббревиатура h может использоваться, когда hash используется как оператор.

  • ${hex2b64:<hexstring>}
       Этот оператор используется для преобразования шестнадцатеричной строки в кодировку base64. Это бывает полезно при обработке вывода функций хэширования md5 и sha-1.

  • ${lc:<string>}
    Это переводит буквы в нижний регистр. Например:
    ${lc:$local_part}
    

  • ${length_<number>:<string>}
       Оператор
    length - это более простой интерфейс к функции length, которая может использоваться, когда её параметр - фиксированное число (в противоположность строкам, динамически строящимся при раскрытии). Эффект, тоже самое, что и:
    ${length{<number>}{<string>}}
    

       Для получения дополнительной информации, смотрите примечания к к основной функции length. Заметтьте, length не тоже самое что и strlen. Аббревиатура l может применяться при использовании length в качестве оператора.

  • ${local_part:<string>}
       Строка интерпретируется как адрес, в соответствии с RFC2822, и из неё извлекается локальная часть адреса. Если строка не может быть корректно разобрана, то результат пуст.

  • ${mask:<IP address>/<bit count>}
       Если формат строки не соответсвует адресу IP и маске через слэш (т.е. сервой адрес в CIDR-нотации), раскрытие будет неудачным. Иначе, этот оператор преобразует IP-адрес в двоичный вид, маску, от наименьших битов, и проеобразует результат обратно в текстовый вид, с прилагаемой маской. Например:
    ${mask:10.111.131.206/28}
    

    вернёт строку 10.111.131.192/28. Так как предполагается, что эта операция, главным образом, будет использоваться для поиска адресов в файлах, результат для IPv6 использует точчки для разделения компонентов адреса, вместо двоеточий, поскольку двоеточия используются для разделения ключевых строк в lsearch файлах. Например:
    ${mask:3ffe:ffff:836f:0a00:000a:0800:200a:c031/99}
    

    вернёт строку
    3ffe.ffff.836f.0a00.000a.0800.2000.0000/99
    

    Буквы, в адресах IPv6 всегда выводятся в строчном виде.

  • ${md5:<string>}
       Оператор
    md5 вычисляет значение хэша MD5 строки, и возвращает его как шестнадцатеричное число с 32 цифрами, в котором все буквы в строчном виде.

  • ${nhash_<n>_<m>:<string>}
       Оператор
    nhash, это простой интерфейс к функции числового хэширования, которая может использоваться, когда оба параметра - фиксированные числа (в противоположность строкам, динамически строящимся при раскрытии). Эффект точно такой же как от:
    ${nhash{<n>}{<m>}{<string>}}
    

    Для дополнительных подробностей, смотрите описание главного оператора nhash выше.

  • ${quote:<string>}
       Оператор
    quote помещает переданный ему параметр в двойные кавычки, если это пустая строка, или содержит что-либо кроме букв, цифр, символа подчёркивания, точек или дефисов. Любые вхождения двойных кавычек и обратного слэша, экранируются обратным слэшем. Символы новой строки и возврата каретки преобразуются в \n и \r соответственно. Например,
    ${quote:ab"*"cd}
    

    становиться
    "ab\"*\"cd"
    

    Это полезно в местах, где агрумент - замена из переменной или заголовок сообщения.

  • ${quote_local_part:<string>}
       Этот оператор похож на предыдущий,
    quote, за тем исключением, что в кавычки она заключается по правилам RFC2822 для локальных частей адреса. Например символ + не вызвал бы заключение в кавычки (но при использовании quote строка была бы помещена в кавычки). Если вы создаёте новый адрес e-mail из содержимого $local_part (или других неизвестных данных), то вы всегда должны использовать этот оператор.

  • ${quote_<lookup-type>:<string>}
       Этот оператор применяет специфические правила экранирования, помещения в кавычки и замены к строке. Каждый тип запроса имеет свои правила, описанные в главе 9. Например:
    ${quote_ldap:two * two}
    

    вернёт
    two%20%5C2A%20two
    

       Для одноключевых поисков нет необходимости в кавычках, и этот оператор вернёт неизменную строку.

  • ${rxquote:<string>}
       Оператор
    rxquote прослэшивает все символы не являющиеся алфавитно-цифровыми. Это применяется, например, для замены значений переменных или заголовков внутри регулярных выражений.

  • ${rfc2047:<string>}
       Этот оператор шифрует текст согласно RFC2047. Это кодирование используется в строках заголовков, для кодирования символов не-ASCII. Предполагается, что входная строка находиться в кодировке, определённой опцией
    headers_charset, с дефолтом ISO-8859-1. Строки содержащие символы только в диапазоне 33–126, и не содержащие символов типа:
    ? = ( ) < > @ , ; : \ " . [ ] _
    

    не модифицирутся. В противном случае, разультат - строка закодированная в соответствии с RFC2047, содержащая так много закодированных букв, сколько нужно для кодирования строки.

  • ${sha1:<string>}
       Оператор
    shal вычисляет хэш SHA-1 строки, и возвращает это значение как шестнадцатеричное число с 40 цифрами, в котором все буквы находятся в прописном регистре.

  • ${stat:<string>}
       Строка, после раскрытия, должна представлять собой путь к файлу. Для этого пути делается вызов функции stat(). Если она (stat()) вернёт ошибку, то происходит ошибка раскрытия. Если же она отрабатывает успешно, то данные от stat() заменяют элемент, в виде ряда пар
    <name>=<value> где все значения числовые, за исключением значения smode.  Имена: mode (даёт режим в виде восьмеричного числа, с четырьмя цифрами), smode (даёт режим в символическом формате, как 10-ти символьную строку, как команда ls), inode, device, links, uid, gid, size, atime, mtime, и ctime. Вы можете извлечь отдельные поля с использованием оператора extract.
       Использование функции
    stat в файлах фильтров пользователей может быть блокировано системным администратором. Предупреждение: размер файла может быть неправильным на 32-х разрядных системах, для файлов больше 2Gb размером.

  • ${str2b64:<string>}
       Этот оператор кодирует строку в кодировку base64.

  • ${strlen:<string>}
       Этот пункт - заменяется длинной строки, в десятичном виде. Ометтьте: не путайте
    strlen с length.

  • ${substr_<start>_<length>:<string>}
       Оператор
    substr - это простой интерфейс к функции substr, который может использоваться, когда оба параметра функции - фиксированные числа (в отличие от раскрываемых строк). Эффект очно такой же как:
    ${substr{<start>}{<length>}{<string>}}
    

       За дополнительными деталями обратитесь к описанию функции substr. Аббревиатура s может использоваться, когда substr используется как оператор.

  • ${time_eval:<string>}
       Этот элемент преобразует временные интервалы exim, типа
    2d4h5m в число секунд.

  • ${time_interval:<string>}
       Параметр (после раскрытия подстроки) должен представлять собой последовательность десятичных цифр, которая представляет собой временной интервал в секундах. Число преобразуется к формату времени exim, например
    1w3d4h2m6s.

  • ${uc:<string>}
       Преобразует буквы в верхний регистр.

    11.7 Условия раскрытия

       Следующие условия доступны для проверки конструкции ${if, при раскрытиии строк:

  • !<condition>
       Восклицательный знак перед любым условием, приводит результат условия к противоположному.

  • <symbolic operator> {<string1>}{<string2>}
       Есть несколько символических операторов для проведения операций стравнения:
    Оператор
    значение
    = равно
    == равно
    > больше
    >= больше или равно
    < меньше
    <= меньше или равно


    Например:
    ${if >{$message_size}{10M} ...
    

       Заметтьте, что можно проверять неравенство, оператором отрицания (!). Обе строки должны принимать форму десятичных чисел, опционально используемо  K или M (в заглавном или строчном виде), что будет означать умножение на 1024 или 1024*1024 соответсвенно.

  • crypteq {<string1>}{<string2>}
       Это сравнение включено в бинарный файл exim, если он собран с поддержкой механизмов аутентификации (смотрите часть 33). Иначе, необходимо определить
    SUPPORT_CRYPTEQ в Local/Makefile для включения crypteq в исполняемый файл exim.
       Кондишен
    crypteq имеет два аргумента. Содержимого первого шифруется, и сравнивается со вторым, который уже зашифрован. Вторая строка может быть в форме хранения шифрованных строк в LDAP, которые начинаются с фигурных скобок, содержащих условие (алгоритм). Если вторая строка не начинается с {, то предполагается что алгоритм шифрования crypt() или crypt16() (смотрите ниже), т.к. такие строки не могут начинаться на {. Обычно это поле из файла паролей. Пример зашифрованной строки в формате LDAP:
    {md5}CY9rzUYh03PK3k6DJie09g==
    

    Если такая строка появляется непосредственно, в раскрытой строке, то фигурные скобки должны быть указаны, поскольку они - часть синтаксиса. Например:
    ${if crypteq {test}{\{md5\}CY9rzUYh03PK3k6DJie09g==}{yes}{no}}
    

    Следующие типы шифрования (их имена не зависят от регистра) поддерживаются:

  • {md5} - вычисляет MD5 сумму первой строки, и и представляет её в виде набора печатных символов, для сравнения с остатком от второй строки. Если длинна сравниваемой строки 24 символа, то exim предполагает что она закодирована base64 (как в примере выше). Если длинна 32 символа, txim предполагает что это шестнадцатеричное кодирование MD5. Если же длинна не 24 и не 32 то сравнение оканчивается неудачей.
  • {sha1} - вычисляет SHA-1 сумму первой строки, представляет её в печатном виде, и сравнивает с отатком от второй строки. Если длинна сравнения 28 символов, то exim предполагает чтоэто закодированно base64. Если длинна 40 символов, то предполагается что это шастнадцатеричное кодирование суммы SHA-1. Если же длинна не 28 и не 40 то сравнение оканчивается неудачей.
  • {crypt} - вызывает функцию crypt(), которая традиционно, использовала только первые восемь символов пароля. Однако, во многих современных ОС это уже не так, и используется весь пароль, несмотря на его длинну.
  • {crypt16} - вызывает функцию crypt16() (также известную как bigcrypt()), которая, изначально, была создана для использования первых 16-ти символов пароля. Опять-таки, в современных ОС может использоваться больше символов.
       Exim имеет собственную версию
    crypt16() (которая является просто двойным вызовом функции crypt()). Для ОС которые имеют свою версию, установка HAVE_CRYPT16 в Local/Makefile при сборке exim, заставляет его использовать версию из ОС, а не его собственную. Эта опция включена, по-умолчанию, в ОС-зависимом Makefile, для тех операционных систем, про которые известно, что они поддерживают crypt16().
       Если вы не помещаете тип криптования в фигурные скобки, при
    crypteq сравнении, то значение по-умолчанию также {crypt} или {crypt16}, как определено установкой опции DEFAULT_CRYPT в Local/Makefile. Значение по-умолчанию дефолтового значения - {crypt}. Вне зависимости от значения по умолчанию, вы можете использовать любую функцию, явно указав её в фигурных скобках.
       Заметтьте, что если пароль не более восьми символов длинной, то результат его шифрования функциями
    crypt() и crypt16() идентичен. Это означает что crypt16() обратно совметим, до тех пор, пока, ему не скормят пароль длинней восьми символов.

  • def:<variable name>
       Условие
    def может содержать имя одной из раскрываемых переменных, заданных в секции 11.9. Условие истинно, если переменная не содержит пустую строку. Например:
    ${if def:sender_ident {from $sender_ident}}
    

    Заметтьте, что имя переменной даётся без начального символа $. Если переменная не существует, то раскрытие неудачно.

  • def:header_<header name>: или def:h_<header name>:
       Это условие истинно, если сообщение обрабатывается, и указанный заголовок в нём существует. Например:
    ${if def:header_reply-to:{$h_reply-to:}{$h_from:}}
    

       Заметтьте: Символ $ появляется в условии до header_ или h_, и имя заголовка должно оканчиваться заголовком, если за ним не идёт пустое место (пробелы и прочее).

  • eq {<string1>}{<string2>}
       Вначале раскрываются подстроки. Условие истинно, если получившиеся подстроки идентичны, в том числе и в регистре букв.

  • eqi {<string1>}{<string2>}
       Вначале раскрываются подстроки. Условие истинно, если получившиеся подстроки идентичны, сравнение проводиться без учёта регистра букв.

  • exists {<file name>}
       Подстрока раскрывается, затем интерпретируется как абсолюный путь. Условие истинно, если существует указанный файл, или директория. Проверка существования осуществляется вызовом функции
    stat(). Использование проверки exists в пользовательских фильтрах может быть отключено системным администратором.

  • first_delivery
       Это условие, не имеющее никаких данных, является истинным в течение первой попытки доставки сообщения. Во время любых последующих попыток доставки оно будет ложным.

  • ge {<string1>}{<string2>}
       Смотрите
    gei.

  • gei {<string1>}{<string2>}
       Вначале раскрываются обе подстроки. Условие истинно, если первая строка лексически больше второй, или равна ей. Для
    ge сравнение производиться с учётом регистра, а для gei сравнение не зависит от регистра букв.

  • gt {<string1>}{<string2>}
       Смотрите
    gti.

  • gti {<string1>}{<string2>}
       Вначале раскрываются обе подстроки. Условие истинно, если первая строка лексически больше второй. Для
    gt сравнение производиться с учётом регистра, а для gti сравнение не зависит от регистра букв.

  • isip {<string>}
       Смотрите
    isip6.

  • isip4 {<string>}
       Смотрите
    isip6.

  • isip6 {<string>}
       Вначале подстрока раскрывается, затем проверяется, имеет ли она форму адреса IP. Оба адреса, IPv4 и IPv6 действительны для
    isip, тогда как isip4 и isip6 проверяют лишь адреса IPv4 и IPv6 соответственно. Например, можно использовать:
    ${if isip4{$sender_host_address}...
    

    для проверки версии протокола IP хоста, с которого осуществляется входящее SMTP подключение.

  • ldapauth {<ldap query>}
       Это условие поддерживает пользовательскую аутентификацию, с использованием LDAP. Смотрите секцию 9.13 для получения дополнительных деталей как использовать LDAP в поисках, и каков синтаксис запросов. Для этого использования, запрос должен содержать имя пользователя и пароль. Сам запрос не используется, он может быть пустым. Условие истинно, если пароль не пуст, и имя пользователя и пароль приняты сервером LDAP. Пустой пароль отбрасысается, без вызова LDAP, поскольку LDAP считает соединения с пустым паролем анонимными, вне зависимости от имени пользователя, согласно настройкам в большинстве конфигураций. Смотрите раздел 33 для получения дополнительных деталей о SMTP аутентификации, и раздел 34 для примеров использования.

  • le {<string1>}{<string2>}
       Смотрите
    lei.

  • lei {<string1>}{<string2>}
       Вначале раскрываются обе подстроки. Условие истинно, если первая строка лексически меньше или равна второй. Для
    le сравнение производиться с учётом регистра, а для lei сравнение не зависит от регистра букв.

  • lt {<string1>}{<string2>}
       Смотрите
    lti.

  • lti {<string1>}{<string2>}
       Вначале раскрываются обе подстроки. Условие истинно, если первая строка лексически меньше второй. Для
    lt сравнение производиться с учётом регистра, а для lti сравнение не зависит от регистра букв.

  • match {<string1>}{<string2>}
       Вначале раскрываются обе подстроки. Вначале, вторая обрабатывается как регулярное выражение. Из-за предварительного раскрытия, если регулярное выражение содержит символ
    $, или символы начинающиеся с обратного слэша, они должны быть экранированы. Также следует проявить внимание, если регулярное выражение содержит фигурные скобки. Закрывающая скобка должна стоять так, чтобы не вызывать преждевременного завершения <string2>. Самый лёгкий подход заключается в использовании \N, для отключения раскрытия регулярного выражения. Например:
    ${if match {$local_part}{\N^\d{3}\N} ...
    

       Если вся раскрываемая строка находиться в двойных кавычках, то требуется дальнейшее экранирование обратных слэшей.
       Условие истинно, если регулярное выражение срабатывает. Регулярное выражение не обязано начинаться с метасимвола крышки (
    ^), но если его нет, то выражение не поставлено на якорь и может соответствовать не только вначале строки, но и где-то в другом месте. Если вы хотите добиться соответствия паттерна в конце объекта, то необходимо включить метасимвол $ в соответствующем месте.
       Вначале раскрытия
    if запоминаются значения числовых переменных ($1). Удовлетворение условия match сбрасывает их к подстрокам этого условия, и они будут иметь эти значения в процессе раскрытия успешной подстроки. В конце if предыдущие значения будут восстановлены. После проверки комбинации использования условий or, последующие значения числовых переменных - таковые из условия, которое было успешным.

  • match_address {<string1>}{<string2>}
       Смотрите
    match_local_part.

  • match_domain {<string1>}{<string2>}
       Смотрите
    match_local_part.

  • match_ip {<string1>}{<string2>}
       Это условие проверяет IP-адрес на соответствие списку шаблонов IP-адресов. Оно должно содержать два параметра. Первый параметр, после раскрытия, должен быть IP-адресом или пустой строкой. Второй (после раскрытия) ограниченным списком хостов, который может соответствовать только IP-АДРЕСУ, но не имени хоста. Например:
    ${if match_ip{$sender_host_address}{1.2.3.4:5.6.7.8}{...}{...}}
    

       В списке разрешаются определённые типы элементов, согласно списку:

  • Адрес IP, опционально с маской CIDR.
  • Отдельная звёздочка, соответсвующая любому IP-адресу.
  • Пустой пункт, который совпадает с только в случае если IP-адрес пуст. Это может быть полезным, для проверки локально отправленных сообщений, или одного из специфических хостов, в одной проверке, типа:
    ${if match_ip{$sender_host_address}{:4.3.2.1:...}{...}{...}}
    

    где первый элемент в списке - пустая строка.

  • Элемент @[] совпадает с любым из адресов, на интерфейсах локальной машины.
  • Поиск предполагает стиль поиска net-, даже если net- не задан. Таким образом, следующие два примера эквивалентны:
    ${if match_ip{$sender_host_address}{lsearch;/some/file}...
    ${if match_ip{$sender_host_address}{net-lsearch;/some/file}...
    

       Вам нужно использовать приставку net- в случае если нужно задать определённую маску, например, при использовании net24-
       Просмотрите раздел 10.11 для получения дополнительных деталей по этим паттернам.

  • match_local_part {<string1>}{<string2>}
       Это условие, вместе с
    match_address и match_domain, позволяет проверить домен, адрес, и локальную часть. Каждое условие требует двух аргументов: элемент и список соответствия. Тривиальный пример:
    ${if match_domain{a.b.c}{x.y.z:a.b.c:p.q.r}{yes}{no}}
    

       В каждом случае, второй аргумент может содержать любой из допустимых пунктов для списка соответсвующего типа. Кроме того, поскольку второй параметр (после раскрытия) представляет собой список стандартной формы, то можно обратиться к именованному списку. Таким образом, можно использовать такие условия:
    ${if match_domain{$domain}{+local_domains}{...
    

       Для списка адресов, совпадения не зависят от регистра, но может использоваться элемент +caseful как во всех списках, если захотите чтобы локальная часть совпадала регистрозависимо. Имя домена всегда сравнивается регистронезависмо.
       Отметтьте: Списки хостов (видимо, имеется ввиду - IP-адресов хостов) тут не поддерживаются. Причина в том, что хост имеет два идентификатора: имя и IP-адрес, и не ясно какой из них бы тут использовался для проверки. Тем не менее, проверку IP-адресов можно провести используя
    match_ip.

  • pam {<string1>:<string2>:...}
       Подключаемые Модули Аутентификации (Pluggable Authentication Modules - http://www.kernel.org/pub/linux/libs/pam/) - это средство, которое стало доступно в последних выпусках Solaris, и в некоторых реализациях GNU/Linux (почему-то неоправданно забыта FreeBSD. Непорядок - ибо во FreeBSD PAM также доступен). Exim поддерживает PAM, для использования с командой
    SMTP AUTH, только в случае, если он собран с
    SUPPORT_PAM=yes
    

    в Local/Makefile. Вероятно, будет необходимо добавить -lpam к EXTRALIBS, а в некоторох реализациях GNU/Linux, также будет необходим -ldl.
       Вначале раскрываются аргументы строки, и  результатом должен быть спсок, разделённый двоеточиями. Начальное и конечное пустое пространство игнорируется. Модуль PAM инициализируется с сервисным именем
    exim и именем пользователя взятым из первого элемента списка в строке разделённой двоеточиями (<string1>). Остающиеся в строке пункты передаются в ответ на запросы функции опознавания. В простом случае будет лишь один запрос, для пароля, и таким образом данные будут содержать лишь две строки.
       Могут быть проблемы, если в любой из строк разрешено содержаться двоеточию. Обычно, они должны быть удвоены, чтобы избежать возможности быть разделителями. Если данные вставляются из переменной, может использоваться функция
    sg, для удвоения любых существующих двоеточий. Например, конфигурация аутентификатора LOGIN может содержать эти настройки:
    server_condition = ${if pam{$1:${sg{$2}{:}{::}}}{yes}{no}}
    

    Для PLAIN-аутентификатора можно использовать:
    server_condition = ${if pam{$2:${sg{$3}{:}{::}}}{yes}{no}}
    

       В некоторых операционных системах PAM-аутентификация может быть сделана только от процесса работающего от пользователя root. Так как exim выполняется от пользователя exim, при приёме сообщений, то это означает что PAM не может непосредствено использоваться в таких системах. Пропатченная версия модуля pam_unix, который идёт с пакетом Linux PAM, доступна на http://www.e-admin.de/pam_exim/. Пропатченный модульразрешает одной специальной комбинации uid/gid, дополнительно root, аутентифицироваться. Если вы собираете пропатченный модуль для того, чтобы разрешить пользователя и группу exim, PAM сможет использоватся в аутентификаторе exim.

  • pwcheck {<string1>:<string2>}
       Этот кондишен поддерживает аутентификацию пользователей с использованием даемона аутентификации Cyrus pwcheck. Это один из способов проверить пароли процессу не запущенному от root. Заметтьте: сейчас, использование pwcheck не рекомендуется. Его замена - saslauthd (смотрите ниже).
       Поддержка
    pwcheck не включена в exim по-умолчанию. Вы должны задать местоположение сокета даемона pwcheck в Local/Makefile до сборки exim. Например:
    CYRUS_PWCHECK_SOCKET=/var/pwcheck/pwcheck
    

       Нет необходимости устанавливать всё программное обеспечение Cyrus для использования даемона pwcheck. Вы можете собрать и установить только даемона из библиотеки Cyrus SASL. Обеспечьте, чтобы пользоваетель exim`a был единственным пользователем, имеющим доступ к директории где лежит сокет даемона pwcheck.
       У условия
    pwcheck один аргумент, которое является и именем пользователя, и паролем, разделёнными двоеточием. Например, для аутентификации типа LOGIN, можно сделать так:
    server_condition = ${if pwcheck{$1:$2}{1}{0}}
    

  • queue_running
       Это условие не имеет данных, и является истинным в течение попыток доставки сообщения инициированными процессо доставки, и ложным в другие моменты.

  • radius {<authentication string>}
       Аутентификация Radius (RFC2865) поддерживается похожим на PAM способом.  Вы должны определить опцию
    RADIUS_CONFIG_FILE в Local/Makefile для задания местоположения конфигурационного файла Radius, при сборке exim.
       При установке только этой опции, exim ожидает что будет слинкован с библиотекой
    radiusclient, с использованием оригинального API. Если же используется релиз этой библиотеки 0.4.0 или более поздний, то нужно установить опцию:
    RADIUS_LIB_TYPE=RADIUSCLIENTNEW
    

    в Local/Makefile при сборке exim. Также можно слинковать exim с библиотекой libradius, идущей в составе FreeBSD. Для использования этого, установите:
    RADIUS_LIB_TYPE=RADLIB
    

    в Local/Makefile, в дополнение к установленной опции RADIUS_CONFIG_FILE. Также, вероятно, надо будет настроить EXTRALIBS чтобы библиотека Radius`a была найдена при линковке exim.
       Строка, определённая в
    RADIUS_CONFIG_FILE раскрывается, и передаётся клиентской библиотеке Radius`a, которая связывается с сервером Radius. Условие истинно, если аутентификация успешнаю Например:
    server_condition = ${if radius{<arguments>}{yes}{no}}
    

  • saslauthd {{<user>}{<password>}{<service>}{<realm>}}
       Этот кондишен поддерживает аутентификацию пользователей с использованием даемона Cyrus saslauthd. Он заменяет даемона pwcheck, который больше не поддерживается. Использование этого даемона - один из способов проверки паролей процессом работающим не от рута.
       Поддержка
    saslauthd не включена в exim по-умолчанию. Вы должны указать местоположение сокета даемона saslauthd в Local/Makefile, до сборки exim`a. Например:
    CYRUS_SASLAUTHD_SOCKET=/var/state/saslauthd/mux
    

       Нет необходимости устанавливать всё программное обеспечение Cyrus для использования даемона saslauthd. Вы можете собрать и установить только даемона из библиотеки Cyrus SASL.
       До четырёх аргументов могут использоваться с кондишном
    saslauthd, но только два обязательны. Например:
    server_condition = ${if saslauthd{{$1}{$2}}{1}{0}}
    

       Сервис и окружение(?) являются опциональными параметрами (поэтому их параметры находятся в собственной паре фигурных скобок). Для деталей по этой службе, и как запустить даемона, обратитесь к документации по Cyrus.

    11.8 Комбинирование условий раскрытия.

       Несколько условий могут быть проверены за один раз, обединив их условиями and и or. Заметтьте, что условия and и or самостоятельные, полноценные условия, и предшествуют своим спискам субпаттернов. Каждое подусловие должно находиться внутри фигурных скобок, вместе с общими ффигурными скобками в которых находиться список. Не должно быть повторений, если используется условие if.

  • or {{<cond1>}{<cond2>}...}
       Подусловия оцениваются слева направо. Условие исинно, если одно из подусловий истинно. Например:
    ${if or {{eq{$local_part}{spqr}}{eq{$domain}{testing.com}}}...
    

       Когда находиться истинное подусловие, то остальные парсятся, но не оцениваются. Если тут несколько подусловий match, то значения числовых переменных берутся от того, которое первым будет успешно.

  • and {{<cond1>}{<cond2>}...}
       Подусловия оцениваются слева направо. Условие исинно, если все подусловия верны. Если тут несколько подусловий
    match, то значения числовых переменных берутся от последнего. Если найдено ложное подусловие, то остальные парсятся, но не оцениваются.

    11.9 Переменные раскрытия.

       Этот раздел содержит алфавитный список всех переменных раскрытия. Некоторые из них доступны только тогда, когда exim собран со специфическими опциями, типа поддержки TLS или опцией контентного сканирования.

  • $0, $1, и т.д.
       Когда успешно условие
    match, эти переменные содержат фиксированные подстроки идентифицированные по регулярному выражению в течение последующего процесса успешной строки сожержащей элемент if. Также, они могут быть установлены внешне, некоторыми другими процессами, предшествующими раскрытию строки. Например, команды доступные в файлах фильтрa exim`a  включают команду if с её собственным регулярным выражением, соответствующим условию.

  • $acl_c0 - $acl_c19
       Значения могут быть помещены в эти переменные, при помощи модификатора
    set в ACL. Значения сохраняются на протяжении всей жизни SMTP подключения. Они могут использоваться для передачи информации между ACL, и различными запросами того же самого ACL. После получения сообщения, значения переменных сохраняются вместе с сообщением, и могут использоваться в фильтрах, роутерах, и транспортах в течение последующей доставки.

  • $acl_m0 - $acl_m19
       Значения могут быть помещены в эти переменные, при помощи модификатора
    set в ACL. Они сохраняют их значения пока сообщение в процессе получения, но сбрасываются после получения. Они, также, сбрасываются командами MAIL, RSET, EHLO, HELO, и после начала сессии TLS. После получения сообщения, значения переменных сохраняются вместе с сообщением, и могут использоваться в фильтрах, роутерах, и транспортах в течение последующей доставки.

  • $acl_verify_message
       После неудачной проверки адреса, эта переменная содержит сообщение об отказе. Она сохраняет своё значение для использования в последующих модификаторах.Сообщение может быть использовано в коде, типа такого:
    warn !verify = sender
         set acl_m0 = $acl_verify_message
    

    Вы можете использовать $acl_verify_message в процессе раскрытия модификаторов message или log_message, для всключения информации о причине отказа.

  • $address_data
       Эта переменная устанавливается посредством опции
    address_data в роутере. В процессе обработки последующими маршрутизаторами, роутерами и транспортами значение остаётся с адресом. Если транспорт обрабатывает много адресов, используется значение первого адреса. Смотрите главу 15 для получения дополнительных деталей. Отметтьте:Содержимое переменной $address_data видимо (в смысле, доступно) в файлах пользовательских фильтров.
       Если
    $address_data установлена когда роутер вызывает ACL для проверки адреса получателя, конечное значение всё ещё находиться в переменной для последующих условий и модификаторов ACL. Если роутинг сделал переадресацию только к одному адресу, дочерний адрес также роутится как часть проверки, и в этом случае окончательное содержимое $address_data получено из дочернего процесса.
       Если
    $address_data установлена когда роутер вызывает ACL для проверки адреса отправителя, окончательное значение также сохраняется, но на этот раз в переменной $sender_address_data, чтобы можно было отличить от данных адреса получателя.
       В обоих случаях (проверки получателя и отправителя), значение не сохраняется после конца текущей проверки ACL. Если необходимо сохранить их дальше, то можно сохранить их переменных ACL.

  • $address_file
       Когда в результате альясинга, форвардинга или фильтрации сообщение направлено в специфический файл, эта переменная содержит имя файла, пока выполняется транспортировка. В другое время, переменная пуста. Например, используя дефолтовую конфигурацию, у пользователя
    r2d2 (однако, документацию писали юмористы :)) в файле .forward содержится:
    /home/r2d2/savemail
    

    Тогда когда работает транспорт address_file, переменная $address_file содержит /home/r2d2/savemail.
       Для фильтров Sieve, значение может быть
    inbox или относительным именем директории. Так продолжается до запуска транспорта, который построит абсолютный путь к необходимому файлу.

  • $address_pipe
       Когда в результате альясинга или форвардинга сообщение направляется в трубу (по другому - pipe, или именованный канал), переменная содержит команду трубы, пока работает транспорт.

  • $auth1 - $auth3
       Эти переменные используются в SMTP аутентификаторах (смотрите разделы 34-37). В других местах они пусты.

  • $authenticated_id
       Когда сервер полностью аутентифицирует клиента, то это (видимо, в этот момент) может быть сконфигурировано для сохранения части аутентификационной информации в переменной
    $authenticated_id (смотрите раздел 33). Например, конфигурация аутентификатора user/password могла бы сохранить имя пользователя, для использования в роутерах. Отметтьте, что это не таже самая информация, которая сохраняется в $sender_host_authenticated. Когда сообщение посылается локально, не через TCP соединение, переменная $authenticated_id содержит имя пользователя вызвавшего процесса.

  • $authenticated_sender
       Когда exim работает как сервер, он берёт во внимание параметр
    AUTH= для поступающей SMTP команды MAIL, если отправителю можно доверять, как описано в секции 33.2. Если данные, не являются строкой <> (странно, получается аутентифицировавшийся отправитель без имени...?), то устанавливается что сообщение шлёт аутентифицированный отправитель, и значение доступно в процессе доставки в переменной $authenticated_sender. Если отправитель не доверенный, то exim принимает синтаксис AUTH=, но игнорирует данные.
       Когда сообщение отправляется локально (т.е. не через TCP соединение), значение переменной
    $authenticated_sender является адресом, сконструированным из имени пользователя, и значения переменной $qualify_domain.

  • $authentication_failed
       Эта переменная устанавливается в
    1, в серевере exim, если клиент использует команду AUTH которая неуспешна. Иначе она устанавливается в 0. Это позволяет различить  did not try to authenticate (не пробовал провести аутентификацию - $sender_host_authenticated -пуста, $authentication_failed равна нулю) и tried to authenticate but failed (пробовал провести аутентификацию, но неуспешно - $sender_host_authenticated -пуста, $authentication_failed равна единице). Отказ включает любой отрицательный ответ на команду AUTH, включая (к примеру) попытку использовать неизвестный/неопределённый аутентификационный механизм.

  • $body_linecount
       Когда сообщение передаётся или принимается, эта переменная содержит число строк тела сообщения. Смотрите также
    $message_linecount.

  • $body_zerocount
       Когда сообщение передаётся или принимается, эта переменная содержит число бинарных нулевых байт в теле сообщения.

  • $bounce_recipient
       В этой переменной устанавливатеся адрес получателя отлупа, когда exim его создаёт. Полезно, если используется используется настраиваемый текстовый файл отлупов (смотрите раздел 45).

  • $bounce_return_size_limit
       Эта переменная содержит значение опции
    bounce_return_size_limit, округлённой к числу кратному 1000. Полезно, если используется используется настраиваемый текстовый файл ошибок сообщений (смотрите раздел 45).

  • $caller_gid
       Содержится реальный id той группы, под которой выполнялся процесс exim. Это не тоже самое что и gid создателя сообщения (смотрите
    $originator_gid). Если exim перезапускает себя, эта переменная в нормальнос состоянии, содержит gid exim.

  • $caller_uid
       Реальный uid пользователя, под которым выполняется процесс exim. Это не тоже самое что и uid создателя сообщения (смотрите
    $originator_uid). Если exim перезапускает себя, эта переменная в нормальнос состоянии, содержит uid exim.

  • $compile_date
       Дата, когда был скомпилен бинарник exim.

  • $compile_number
       Прочесс сборки exim сохраняет число раз, сколько он был скомпилен. Это позволяет отличить другие компиляции одной и той же версии программы.

  • $demime_errorlevel
       Эта переменная доступна когда exim собран с поддержкой content-scanning и вышедшим из употребления условием
    demime. Детали смотрите в секции 40.6.

  • $demime_reason
       Эта переменная доступна когда exim собран с поддержкой content-scanning и вышедшим из употребления условием
    demime. Детали смотрите в секции 40.6.

  • $dnslist_domain
       Когда для клиентского хоста найдена запись в блэк-листе DNS, то имя домена помещается в эту переменную, чтобы можно было включить эту информацию в сообщение об отлупе.

  • $dnslist_text
       Когда для клиентского хоста найдена запись в блэк-листе DNS, содержание любой ассоциированной TXT-записи помещается в эту переменную.

  • $dnslist_value
       Когда для клиентского хоста найдена запись в блэк-листе DNS, IP-запись для ресурса помещается в эту переменную. Если запесей много, то все адреса включаются, разделённые запятыми с пробелами.

  • $domain
       Когда адрес роутится, или самостоятельно доставляется, эта переменная содержит имя домена. Глобальная перезапись адреса происходит когда сообщение получено, таким образом значение
    $domain в течение марщрутизации и доставки - значение после перезаписи. Переменная $domain установлена во время пользовательской фильтрации, но не во время системной фильтрации, поскольку сообщение может иметь много получателей и системный фильтр вызывают только один раз.
       Когда доставляется больше одного адреса за раз, (например, несколько команд RCPT в одном SMTP соединении)
    $domain установлена лишь в случае, если все они имеют один и тот же домен. Транспорты могут быть ограничены обработкой только одного домена за раз, если значение $domain требуется во время работы транспорта - это, значение по-умолчанию для локальных транспортов. Для дополнительных деталей о переменных окружения во время выполнения транспортировки, смотрите главу 23.
       В конце доставки, если все отсроченные адреса имеют один домен, он помещается в
    $domain в процессе раскрытия delay_warning_condition.
       Переменная
    $domain также используется при некоторых других обстоятельствах:
  • Когда выполняется ACL для команды RCPT, переменная $domain содержит домен адреса получателя. Домен адреса отправителя находиться в $sender_address_domain во время команд MAIL и RCPT. Переменная $domain, обычно не устанавливается во время оаботы MAIL ACL. Однако, если адрес отправителя проверен при помощи callout в процессе MAIL ACL, домен отправителя помещается в $domain в процессе раскрытия hosts, interface, and port и в smtp транспорте.
  • Во время обработки перезаписи (смотрите раздел 31), переменная $domain содержит доменную часть адреса, который перезаписывается. Это может быть использовано в в раскрытии адреса замены, например, для замены домена поиском по файлу.
  • Каждый раз когда просматривается список доменов, за одним исключением, $domain содержит обрабатываемый домен. Исключение: Когда список доменов в условии sender_domains обрабатывается в ACL, обрабатываемый домен содержится в $sender_address_domain, а не в $domain. Так сделано для того, чтобы в RCPT ACL список доменов отправителя мог зависеть от домена получателя (который в это время содержится в $domain).
  • Когда раскрывается опция smtp_etrn_command, переменная $domain содержит полный параметр команды ERTN (смотрите раздел 44.8)

  • $domain_data
       Когда опция
    domains на маршрутизаторе совпадает с доменом найденным поиском, данные прочитанные поиском, доступны в течение работы роутера как $domain_data. Кроме того, если драйвер направляет адрес в транспорт, то значение доступно и в транспорте. Если транспорт обрабатывает много адресов, используется значение из первого адреса.
       Переменная
    $domain_data также устанавливается когда кондишен domainsв ACL совпадает с доменом найденным поиском. Данные прочитанные поиском доступны в течение остальной части условия ACL. Во всех других случаях, эта переменная ничего не содержит.

  • $exim_gid
       Эта переменная содержит числовое значение gid группы от которой работает exim.

  • $exim_path
       Эта переменная содержит путь к бинарному файлу exim.

  • $exim_uid
       Эта переменная содержит числовое значение uid пользователя от которого работает exim.

  • $found_extension
       Эта переменная доступна, когда exim собран с поддержкой content-scanning (сканирования содержимого, на вирусы, например), и устаревшим условием -
    demime. За дополнительными деталями, обратитесь к разделу 40.6.

  • $header_<name>
       Это не строгая переменная раскрытия. Это - синтаксис раскрытия для вставки строки заголовка сообщения с указанным именем. Заметтьте, что имя может оканчиваться двоеточием или пробелом, поскольку оно может содержать разнообразные символы. Также заметтьте, что фигурные скобки не должны использоваться.

  • $home
       Когда в роутере установлена опция
    check_local_user, в случае успешной проверки, домашняя директория пользователя помещается в переменную $home.  В частности, это означает, что она установлена в процессе выполнения фалов фильтров пользователей. Роутер, также может явно установить основную домашнюю директорию для использования транспортом. Это может быть отменено непосредственной установкой транспорта.
       Когда работает тест фильтра, через опцию
    -bf, в $home устанваливается значение перемeнной окружения HOME.

  • $host
       Когда транспорт
    smtp раскрывает опции, для шифрования с использованием TLS, $host содержит имя приконнектившегося хоста. Аналогично, когда используется клиентская часть конфигурации аутентификации (смотрите раздел 33), переменная $host содержитимя сервера к которому подключился клиент.
       Когда используется транспортный фильтр (смотрите раздел 24),
    $host содержит учивствующий в текущем соединении. Когда локальный транспорт запущен как результат роутера который устанавливает список хостов, $host содержит имя первого хоста.

  • $host_address
       Эта переменная содержит IP-адрес удалённого хоста каждый раз, когда устанавливается
    $host для удалённого соединения. Также в неё устанавливается адрес IP проверяемый в опции ignore_target_hosts.

  • $host_data
       Если кондишен
    $hosts в ACL удовлетворяется посредством поиска, результат поиска становиться доступен в переменной $host_data. Это позволяет далать, например, такие вещи:
    deny  hosts = net-lsearch;/some/file
    message = $host_data
    

  • $host_lookup_deferred
       В нормальном состоянии, эта переменная содержит
    0, что делает $host_lookup_failed. Когда сообщение приходит с удалённого хоста и производиться попытка поиска имени хоста по его IP-адресу, и если попытка безуспешна, эта переменная устанавливается в 1.
  • Если поиск получает какой-то отрицательный ответ (например, поиск в DNS успешен, но записей не найдено), $host_lookup_failed устанавливается в 1.
  • Если во время поиска происходят какие-то проблемы, такие, что в итоге exim не может утверждать задано ли имя хоста (например, таймаут поиска в DNS), $host_lookup_failed устанавливается в 1.
       Поиск имени хоста по его IP-адресу содержит больше чем просто один обратный поиск. Exim проверяет полученное имя в обратную сторону - приведёт ли оно к оригинальному IP-адресу. Если это не так, exim не принимает найденное имя, и переменная
    $host_lookup_failed устанавливается в 1. Таким образом, возможность находить имя по IP-адресу (например PTR запись в DNS) не является достаточным условием для успешного поиска имени хоста. Если обратный поиск успешен, но есть проблемы с прямым поиском, например таймаут, то имя не принимается, и $host_lookup_deferred устанавливается в 1. Смотрите также, $sender_host_name.

  • $host_lookup_failed
       Смотрите
    $host_lookup_deferred.

  • $inode
       Единственный момент времени, когда эта переменная установлена - при раскрытии опции
    directory_file в транспорте appendfile. Переменная содержит номер иноды временного файла который должен быть переименован. Это может использоваться для создания уникального имени файла.

  • $interface_address
       Как только сервер начинает обрабатывать TCP/IP соединение, эта переменная принимает значение IP-адреса локального интерфейса, а в переменную
    $interface_port устанавливается номер порта. Поэтому эти значения доступны для использования в connect ACL. Также смотрите опцию командной строки -oMi. Как присутствующая в ACL, эта переменная может использоваться, например, для создания имени файла, для сертификата TLS, зависящего от того какой порт/интерфейс используется.

  • $interface_port
       Смотрите
    $interface_address.

  • $ldap_dn
       Эта переменная доступна лишь если exim собран с поддержкой LDAP, и содержит DN для последнего успешного поиска в LDAP.

  • $load_average
       Эта переменная содержит среднюю загрузку системы, умноженную на 1000, и является целым числом. Например, если загрузка 0.21, то значение переменной 210. Значение пересчитывается каждый раз, когда ссылаются на эту переменную.

  • $local_part
       Когда адрес роутится или доставляется владельцу, эта переменная содержит локальную часть адреса. Когда идёт одновременная доставка нескольких адресов (например, несколько RCPT команд в SMTP сессии), переменная
    $local_part не задана.
       Глобальная перезапись адресов происходит при получении сообщения, таким образом значение
    $local_part в течение роутинга и доставки - значение после перезаписи. $local_part устанавливается во время работы пользовательского фильтра, но не во время системного, потому что сообщение может иметь много получателей, и системный фильтр вызывается лишь один раз.
       Если локальная часть преффикса или суффикса была успешно разобрана, то это не включается в значение
    $local_part в процессе роутинга и последующей доставки. Значения любой приставки или суффикса находятся в $local_part_prefix и $local_part_suffix соотвественно.
       Когда сообщение доставляется в файл, трубу или транспорт автоответа, в результате альясинга или форвардинга,
    $local_part устанавливается в локальную часть родительского адреса, не к имени файла или команды (смотрите $address_file и $address_pipe).
       Когда ACl запускается для команды RCPT,
    $local_part содержит локальную часть адреса получателя.
       Когда срабатывает перезапись (смотрите раздел 31),
    $local_part содержит локальную часть адреса который перезаписывается, это может быть использовано, например, в раскрытиях замены адреса.
       Во всех регистрах, все кавычки удаляются из локальной части. Например, оба адреса
    "abc:xyz"@test.example
    abc\:xyz@test.example
    

    дадут значение $local_part
    abc:xyz
    

       Если вы используете $local_part для создания других адресов, вы всегда должны обрабатывать его в операторе quote. Например, в переадресовывающем роутере, можно сделать так:
    data = ${quote_local_part:$local_part}@new.domain.example
    

       Отметтьте: Обычно, значение $local_part в нижнем регисте, если вы хотите обрабатывать локальные части в роутере в регистрозависимой манере, вы должны установить опцию caseful_local_part (смотрите раздел 15).

  • $local_part_data
       Когда опция
    local_part на роутере совпадает с локальной частью найденной поиском, данные прочитанные поиском доступны в течение выполнения роутара, как $local_part_data. Кроме того, если драйвер роутит адрес в транспорт, значение доступно и в транспорте. Если транспорт обрабатывает много адресов, используется значение первого адреса.
       Переменная
    $local_part_data также устанавливается когда кондишен local_part в ACL совпадает с локальной частью найденной поиском. Данные прочитанные поиском доступны в течение остальной части ACL. Во всех других ситуациях, значение переменной пустое.

  • $local_part_prefix
       Когда адрес роутится или доставляется владельцу, и распознан специфический преффикс для локальной части, он доступен в этой переменной, удалённой из
    $local_part.

  • $local_part_suffix
       Когда адрес роутится или доставляется владельцу, и распознан специфический суффикс для локальной части, он доступен в этой переменной, удалённой из
    $local_part.

  • $local_scan_data
       Эта переменная содержит текст, возвращённый функцией
    local_scan(), при получении сообщения. За дополнительными деталями, обратитесь к разделу 41.

  • $local_user_gid
       Смотрите
    $local_user_uid.

  • $local_user_uid
       В эту переменную, и
    $local_user_gid устанавливаются значения uid и gid после успешного предварительного условия check_local_user в роутере. Это означает, что их значения доступны для остальных, неотработавших, предварительных условий (senders, require_files, и condition), для раскрытия address_data, и дя других, специфичных для роутера условий. В любой другой момент времени, значения в этих переменных (uid_t)(-1) и (gid_t)(-1), соответственно.

  • $localhost_number
       Тут содержится раскрытое значение опции
    localhost_number. Это раскрытие происходит после прочтения основных опций.

  • $log_inodes
       Число свободных inode в дисковом разделе, куда пишутся логи exim`a. Это значение пересчитывается каждый раз, когда ссылаются на эту переменную. Если файловая система не знает, что такое inode, то значение переменной равно
    -1. Также смотрите опцию check_log_inodes.

  • $log_space
       Размер свободного места (в килобайтах) на дисковом разделе, в который пишутся логи exim`a. Это значение пересчитывается каждый раз, когда ссылаются на эту переменную. Если операционная система не способна вычислять размер свободного пространства (истинно только для экспериментальных систем), то значение переменной равно
    -1. Также смотрите опцию check_log_space.

  • $mailstore_basename
       Эта переменная устанавливается только при работе доставки в формате
    mailstore в транспорт appendfile. В процессе раскрытия опций mailstore_prefix, mailstore_suffix, message_prefix, и message_suffix она содержит имена записываемых файлов, т.е. имя без суффикса .tmp, .env, или .msg. В любое другое время переменная пуста.

  • $malware_name
       Эта переменная доступна когда exim скомпилен с поддержкой контентного сканирования. Она устанавливается в имя вируса, который был найден, когда условие
    malware ACL истинно (40.1).

  • $message_age
       Эта переменная устанавливается в начале попытки доставки сообщения, в число секунд с тех пор как сообщение было получено. Оно не изменяется в течение одной (видимо, текущей) попытки доставки.

  • $message_body
       Во время доставки, эта переменная содержит начальную часть сообщения, и предназначена, главным образом, для файлов фильтра пользователей. Максимальное число символов тела сообщения, помещаемое в переменную, устанавливается конфигурационной опцией
    message_body_visible; по дефолту - 500. Символы новой строки преобразуются в пробелы, для облегчения поиска фраз, которые были бы разбиты по переводу строки. Двоичные нули также преобразовываются в пробелы.

  • $message_body_end
       Во время доставки, эта переменная содержит конец тела сообщения. Формат и максимальный размер такой же как и у
    $message_body.

  • $message_body_size
       Во время доставки, эта переменная содержит размер тела сообщения в байтах. Счёт начинается после с символа после пустой линии, отделяющей заголовки от сообщения. Смотрите также
    $message_size, $body_linecount и $body_zerocount.

  • $message_exim_id
       Когда сообщение получается или доставляется, эта переменная содержит уникальный идентификатор сообщения, генерируемый и используемый exim`ом для идентификации сообщения. Идентификатор не создаётся для сообщения до тех пор, пока его заголовок не получен. Заметтьте: Это не содержимое стрки заголовка
    Message-ID:, это локальный идентификатор назначаемый exim`ом сообщению, например 1BXTIK-0001yO-VA.

  • $message_headers
       Эта переменная содержит все строки заголовка, во время обработки сообщения, за исключением строк добавленных роутерами и транспортами. Строки заголовка разделены символами новой строки.

  • $message_id
       Это старое название
    $message_exim_id, которое теперь не используется.

  • $message_linecount
       Эта переменная содержит общее количество строк в заголовке и теле сообщения. Сравните с
    $body_linecount содержащей лишь число строк в теле сообщения. В процессе DATA и ACL занимающихся контентным сканированием $message_linecount содержит число полученных строк. До доставки (т.е. перед фильтрами, маршрутизаторами, роутерами и транспортами) счётчик увеличен, чтобы включить строку заголовка Received:, стандартно добавляемую exim`ом, и любые другие заголовки, добавляемый ACL`ами. Пустая строка, отделяющая заголовки от тела сообщения не подсчитывается. Вот пример использования этой переменной в DATA ACL:
    deny message   = Too many lines in message header
         condition = \
           ${if <{250}{${eval:$message_linecount - $body_linecount}}}
    

       В MAIL и RCPT ACL`ах значение этой переменной - ноль, поскольку на этих стадиях сообщение ещё не получено.

  • $message_size
       Когда сообщение находится в процессе обработки, эта переменная содержит число байт. В большинстве случаев, размер включает те заголовки, которые были получены с сообщением, но не те (типа
    Envelope-to:), которые были добавлены индивидуальными доставкми.Однако, есть один специальный случай: в процессе раскрытия опции maildir_tag в транспорте appendfile, когда доставка происходит в формате maildir, значение $message_size - точный размер файла, который был записан (на диск). Смотрите также $message_body_size, $body_linecount и $body_zerocount.
       ПРи выполнении ACL во время команды SMTP RCPT,
    $message_size содержит размер предоставленный командой MAIL, или -1, если он не был предоставлен. Разумеется, значение может быть неверным или заведомо ложным.

  • $mime_xxx
       Множество переменных, с именами начинающимися на
    $mime доступны, в случае, если exim собран с поддержкой контентного сканирования. Для дополнительных делалей, смотрите раздел 40.4.

  • $n0$n9
       Эти переменные - счётчики, которые могут быть увеличены при помощи команды
    add в файлах фильтров.

  • $original_domain
       Когда адрес верхнего уровня обрабатывается для доставки, эта переменная содержит тоже самое значение, что и
    $domain. Однако, если дочерний адрес (например, сгенерённый альясом, форвардом или файлом фильтра) обрабатывается, эта переменная содержит доменную часть оригинального адреса. Это отличается от $parent_domain только когда здесь больше одного уровня альясинга или форвардинга. Когда происходит доставка более чем по одному адресу в одном транспорте, переменная $original_domain не установлена.
       Если новый адрес создан с помощью команды
    deliver в системном фильтре, то она (эта переменная) установлена с искуственным родительским адресом. В таком случае локальная часть system-filter и доменная - дефолтовый домен, из конфига.

  • $original_local_part
       Когда адрес верхнего уровня обрабатывается для доставки, эта переменная содержит тоже самое значение, что и
    $local_part, за исключением, если суффикс или преффикс были удалены из локальной части, поскольку $original_local_part всегда содержит полную локальную часть. Когда дочерний адрес (например, сгенерённый альясом, форвардом или файлом фильтра) обрабатывается, эта переменная содержит полную локальную часть оригинального адреса.
       Если роутер (процесс переназначения) нечувствителен к регистру локальной части адреса, значение
    $original_local_part в нижнем регистре букв.Эта переменная отличается от $parent_local_part только в случае, если больше одного уровня альясинга или форвардинга. Когда происходит доставка более чем по одному адресу в одном транспорте, переменная $original_local_part не установлена.
       Если новый адрес создан с помощью команды
    deliver в системном фильтре, то она (эта переменная) установлена с искуственным родительским адресом. В таком случае локальная часть system-filter и доменная - дефолтовый домен, из конфига.

  • $originator_gid
       Эта переменная содержит значение переменной
    $caller_uid, установленной при получении сообщения. Для сообщений полученных через командную строку, это gid пославшего его пользователя. Для сообщений полученных через TCP/IP, это, обычно, gid пользователя от которого работает exim.

  • $parent_domain
       Эта переменная подобна
    $original_domain (смотрите выше), за исключением того, что  относится непосредственно к предыдущему родительскому адресу.

  • $parent_local_part
       Эта переменная подобна
    $original_local_part (смотрите выше), за исключением того, что  относится непосредственно к предыдущему родительскому адресу.

  • $pid
       Эта переменная содержит идентификатор процесса текущего процесса.

  • $pipe_addresses
       Это не раскрываемая переменная, но она упомянута тут, поскольку строка
    $pipe_addresses обрабатывается специально в командной спецификации для транспорта pipe (раздел 29) и в транспортных фильтрах (описанных как transport_filter в разделе 24). Она не может использоваться в основных строках раскрытия и вызывает ошибку неизвестная переменная если с ней там сталкиваются.

  • $primary_hostname
       Эта переменная содержит значение установленное пунктом
    primary_hostname в конфигурационном файле, или прочитанное функцией uname(). Если uname() возвращает однокомпонентное имя, то exim вызывает функцию gethostbyname() (или getipnodebyname() - какая доступна) в попытке получить полное имя хоста. Смотрите также $smtp_active_hostname.

  • $prvscheck_address
       Эта переменная используется вместе с элементом раскрытия
    prvscheck, который описан в разделах 11.5 и 39.38.

  • $prvscheck_keynum
       Эта переменная используется вместе с элементом раскрытия
    prvscheck, который описан в разделах 11.5 и 39.38.

  • $prvscheck_result
       Эта переменная используется вместе с элементом раскрытия
    prvscheck, который описан в разделах 11.5 и 39.38.

  • $qualify_domain
       Значение этой переменной устанавливается опцией
    qualify_domain из конфигурационного файла.

  • $qualify_recipient
       Значение этой переменной устанавливается опцией
    qualify_recipient из конфигурационного файла, или, если там не задано, значением $qualify_domain.

  • $rcpt_count
       Когда сообщение получается по SMTP, эта переменная содержит число команд RCPT переданных для текущего сообшения. Если эта переменная используется в RCPT ACL, то её значение включает текущую команду.

  • $rcpt_defer_count
       Когда сообщение получается по SMTP, эта переменная содержит число команд RCPT в текущем сообщении, которые были ранее отклонены с временным (4xx) ответом.

  • $rcpt_fail_count
       Когда сообщение получается по SMTP, эта переменная содержит число команд RCPT в текущем сообщении, которые были ранее отклонены с постоянным (4xx) ответом.

  • $received_count
       Эта переменная содержит число заголовков
    Received: в сообщении, включая один, добавленный exim`ом (таким образом, это значение всегда больше нуля). Оно доступно в DATA ACL, в не-SMTP ACL, и во время роутинга и доставки.

  • $received_for
       Если во входящем сообщении только один адрес получателя, то эта переменная содержит адрес, из строки заголовка
    Received:, после её получения. Значение копируется после перезаписи адреса получателя, но до запуска функции local_scan().

  • $received_protocol
       При обработке сообщения, эта переменная содержит имя протокола по которому получено сообщение. Большинство имён, используемых exim, определено RFC821, RFC2821, и RFC3848. Они начинаются с
    smtp (клиент использовал HELO) или esmtp (клиент использовал EHLO). Они могут содержать s если было безопасное (шифрованное) соединение и/или a для аутентифицированных. таким образом, если получается протокол esmtpsa, то сообщение было передано по шифрованному SMTP соединению, и клиент был успешно аутентифицирован.
       Exim использует имя протокола
    smtps для случая, когда шифрование автоматически включается при соединении без использования STARTTLS (смотрите tls_on_connect_ports), и клиент использует HELO для начала шифрованного сеанса SMTP. Имя smtps также используется для редкой ситуации, когда клиент первоначально использует EHLO, устанавливает шифрованное соединение, используя STARTTLS, и затем использует HELO.
       Опция
    -oMr обеспечивает возможность определить имя протокола для сообщений которые отправлены локально, от доверенных отправителей. Обычно это используется для идентификации сообщений, которые повторно инжектятся после сканирования.

  • $received_time
       Эта переменная содержит дату и время, когда текущее сообщение было получено, в виде секунд с начала эпохи Unix.

  • $recipient_data
       Эта переменная устанавливается после успешного индексного поиска в кондишене ACL
    recipients. Она содержит данные из поиска, и значение остаётся установленным до следующей проверки recipients. Таким образом, можно делать такие вещи:
    require recipients  = cdb*@;/some/file
    deny    some further test involving $recipient_data
    

       Внимание; Эта переменная установлена только в случае, если поиск как метод индексации в списке адресов, с использованием синткаксиса точки с запятой, как в примере. Переменная не установлена для поиска, который используется как часть раскрытия строки, которому все такие списки подвергаются до интерпретации.

  • $recipient_verify_failure
       В ACL, когда проверка получателя неудачна, эта переменная содержит информацию о ошибке. Это может быть одно из следующих слов:
  • qualify: Адрес был неполный (нет домена), и сообщение не являлось ни локальным, ни прибывшим от неучтённого хоста.
  • route: Неудачная маршрутизация.
  • mail: Маршрутизация была удачной, и был предпринят обратный вызов; отклонение произошло до команды MAIL (n/t при начальном подключении, HELO, или MAIL)
  • recipient: Команда RCPT в обратном вызове была отклонена.
  • postmaster: Была отклонена проверка postmaster`а в обратном вызове.
       Ожидаемое главное использование этой переменной, для различения реджектов MAIL и реджектов RCPT.

  • $recipients
       Эта переменная содержит список получателей сообщения. Адреса разделяютя запятыми и пробелами в тексте замены. Однако, перменная не является общедоступной, для предотвращения просмотра
    Bcc получателей  в непривелигированных пользовательских фильтрах. Вы можете использовать $recipients только в этих двух случаях:
    1. В файле системного фильтра.
    2. В ACL ассоциированных с командой DATA, тоесть ACL определённые как
    acl_smtp_predata и acl_smtp_data.

  • $recipients_count
       В процессе обработки сообщения эта переменная содержит число получателей сообщения, которые шли с сообщением (имеется ввиду, что тут не учтены получатели, добавленные в процессе обработки). Дубликаты не исключаются из подсчёта. Во время приёма сообщения по SMTP, число увеличивается, для каждого принятого получателя.

  • $reply_address
       В процессе обработки сообщения, в этой переменной находится содержимое строки заголовка
    Reply-To:, если она существует и непуста, иначе она содержит значение из строки заголовка From:. Кроме удаления начального пустого пространства, эта переемнная никак не обрабатывается. В частности, не производится расшифровка по RFC2047 или символьная замена кода.

  • $return_path
       Во время доставки сообщения, эта переменная содержит обратный путь - поле отправителя, посылаемую как часть конверта. Оно не заключено в символы
    <>. В начале маршрутизации адреса, $return_path установлена в тоже значение, что и $sender_address, но если, например, входящее сообщение листа рассылки раскрыто роутером, определяющим другой адрес для возврата, то впоследствии $return_path содержит другой адрес возврата, тогда как $sender_address всегда содержит оригинальный адрес отправителя, полученный с сообщением. Если сказать по-другому, $sender_address содержит адрес отправителя входящего конверта, и $return_path содержит адрес исходящего конверта.

  • $return_size_limit
       Это устаревшее название
    $bounce_return_size_limit.

  • $runrc
       Эта переменная содержит код возврата команды, выполненой в элементе раскрытия
    ${run...}. Предупреждение: В роутере или транспорте, вы не можете предположить порядок раскрытия опций, за исключением тех предварительных условий, чей порядок тестирования задокументирован. Поэтому невозможно ожидать установки $runrc в раскрытии одной опции, и использовать её в другой.

  • $self_hostname
       Когда адрес направлен к возможному удалённому хосту, тут устанавливается локальный хост, этот случай контролируется общей
    self опцией роутера. Одно из его значений заставляет передать адрес другому роутеру. Когда такое происходит, значение $self_hostname будет именем локального хоста, с которым столкнулся роутер. При других обстоятельствах оно будет пустым (null).

  • $sender_address
       При обработке сообщения, эта переменная содержит адрес отправителя полученный в коныерте сообщения. Для возвращаемых сообщений, значение будет пустой строкой. Смотрите также
    $return_path.

  • $sender_address_data
       Если переменная
    $address_data установлена, когда роутеры вызываются из ACL для проверки адреса отправителя, то окончательное значение сохраняется в $sender_address_data, для возможности отличить его от адреса получателя. Значение не сохраняется после окончания текущей ACL. Если необходимо сохранять его дольше, то вы можете сохранить его в переменных ACL.

  • $sender_address_domain
       Доменная часть
    $sender_address.

  • $sender_address_local_part
       Локальная часть
    $sender_address.

  • $sender_data
       Эта переменная устанавливается после успешного поиска в условии ACL
    senders, или в опции senders, роутера. Оно содержит данные поиска, и и значение остаётся установленным до следующей проверки senders. Таким образом, можно делать такие вещи:
    require senders      = cdb*@;/some/file
    deny    some further test involving $sender_data
    

       Внимание: Эта переменная установлена тольков случае, если поиск используется как метод индексации в списке адресов, используя синтаксис точки с запятой, как в примере выше. Переменная не установлена для поиска который использует часть строки раскрытия, которому подвергаются все списки, до интерпретации.

  • $sender_fullhost
       Когда сообщение получено от удалённого хоста, эта переменная содержит имя хоста и адрес IP в одной строке. Она заканчиватся IP-адресом в квадратных скобках, с номером порта через двоеточие, если включено логирование портов. Формат остальной части строки зависит от того, какая была SMTP команда хоста - HELO или EHLO, и было ли подверждено имя хоста поиском по его IP-адресу. (Поиск IP-адреса модет быть вызыван опцией
    host_lookup, независимой от проверки). Простое имя хоста в начале строки - провереное имя хоста; если оно отсутствует, проверка или не проводилась, или не требовалась. Имя хоста в круглых скобках - параметр команды HELO или EHLO. Оно пропущено, если оно идентично проверенному имени хоста или IP-адресу в квадратных скобках.

  • $sender_helo_name
       Когда сообщение получено с удалённого хоста, давшего команду HELO или EHLO, аргумент этой команды помещается в эту переменную. Также оно устанавливается если HELO или EHLO использовалось при локальном SMTP с опциями
    -bs или -bS.

  • $sender_host_address
       Когда сообщение получено от удалённого хоста, эта переменная содержит IP-адрес удалённого хоста. Для локальных сообщений значение пустое.

  • $sender_host_authenticated
       Эта переменная содержит имя (не публичное имя) драйвера аутентификации, который успешно подтвердил подлинность клиента, от которого получено сообщение. Оно пустое, если аутентификации не было. Смотрите также
    $authenticated_id.

  • $sender_host_name
       Когда сообщение передаётся с удалённого хоста, эта переменная содержит имя хоста, полученное поиском по его IP-адресу. Для сообщений полученных другими способами, эта переменная пуста.
       Если имя хоста предварительно не искалось, ссылка на
    $sender_host_name вызывает поиск (для сообщений с удалённых хостов). Найденное имя принимвается, только если оно, при прямом поиске по нему, возвращает оригинальный IP. Если или прямой, или обратный поискне могут найти какие-то данные, или если прямой поиск не приводит к первоначальному IP, то $sender_host_name остаётся пустым, и $host_lookup_failed устанавливается в 1.
       Однако, если любой из поисков не может быть завершён (например, произошёл таймаут DNS),
    $host_lookup_deferred устанавливается в  1,  и $host_lookup_failed остаётся установленным в  0.
       Когда
    $host_lookup_failed установлена в 1, exim не пробует снова найти имя хоста при наличии информации о $sender_host_name в другом процессе exim`a, но он пробует ещё раз, если $host_lookup_deferred установлена в 1.
       Exim не ищет, автоматически, каждое имя хоста. Если вы хотите максимальной эффективности, вы должны упорядочить вашу конфигурацию так, чтобы вообще избежать этого поиска. Поиск происходит лишь в случае, если одно или больше условий истинны:
  • Строка содержащая $sender_host_name раскрыта.
  • Хост с которого идёт запрос, совпадает со списком host_lookup. В дефолтовой конфигурации, эта опция установлена в *, для устранения поиска надо этот пункт изменить (закомментить - в самом коде эта опция по дефолту не включена).
  • Экзим нуждается в имени хоста, для проверки элемента в списке хостов. Пункты, которые требуют этого, описаны в разделе 10.13 and 10.15.
  • Хост запроса соответствует helo_try_verify_hosts или helo_verify_hosts. В этом случае, имя хоста требует сравнения с именем, указанным в командах EHLO или HELO, отданных клиентом.
  • Удалённый хост даёт команду EHLO или HELO, которая содержит один из доменов в helo_lookup_domains. Значение по-умолчанию этой опции:
    helo_lookup_domains = @ : @[]
    

    и она вызывает поиск лишь в случае, если удалённый хост некорректно отдал имя сервера или IP-адрес в команде EHLO или HELO.

  • $sender_host_port
       Когда сообщение получено с удалённого хоста, эта переменная содержит номер порта использовавшегося удалённым хостом.

  • $sender_ident
       Когда сообщение получено с удалённого хоста, эта переменная содержит идентификацию перезанную в ответ на запрос по RFC1413. Когда сообщение получено локально, эта переменная содержит имя пользователя вызвавшего exim.

  • $sender_rate_xxx
       Множество переменных, имена которых начинаются с
    $sender_rate_, установленных как часть условия ACL ratelimit. Детали смотрите в секции 39.30.

  • $sender_rcvhost
       Это необходимо для использования в заголовках
    Received:. Она начинается с любого проверенного имени хоста (полученного от обратным поиском в DNS) или, если нет проверенного имени, IP-адресом в квадратных скобках. После этого, в круглых скобках может быть текст. Когда первый пункт - проверенное имя хоста, первый элемент в круглых скобках - IP-адрес в квадратных скобках, с номером порта через двоеточие, если разрешено логирование портов. Когда первый элемент - IP-адрес, то порт записывается внутри круглых скобок, в виде port=xxxx.
       Также могут быть пункты вида
    helo=xxxx, если использовались HELO или EHLO, и их параметр не был идентичен реальному имени хоста или IP, и ident=xxxx если доступна строка ident из RFC1413. Если все три элемента присутствуют в круглых скобках, то в строку вставляется символ новой линии и символ табуляции для улучшения читабельности заголовка Received:.

  • $sender_verify_failure
       В ACL, когда проверка отправителя неудачна, эта переменная содержит информацию об ошибке.Детали такие же как и у
    $recipient_verify_failure.

  • $smtp_active_hostname
       Во время сеанса SMTP, эта переменная содержит значение имени активного хоста, определённого опцией
    smtp_active_hostname. Значение $smtp_active_hostname сохраняется с любым переданным сообщением, и его значение можно использовать во время роутинга и доставки.

  • $smtp_command
       В процессе обработки входящей SMTP команды, эта переменная содержит всю команду. Это позволяет различать HELO и EHLO в ACL, а иакже различать команды, типа:
    MAIL FROM:<>
    MAIL FROM: <>
    

       Для команды MAIL, могут быть просмотрены дополнительный параметры, типа SIZE. Для команды RCPT, адрес в $smtp_command - оригинальный адрес, до любой перезаписи, тогда как значения в $local_part и $domain взяты из адреса после SMTP-перезаписи.

  • $sn0 - $sn9
       Эти переменные - копии значений
    $n0-$n9, сумматоры бывшие в конце файла системного фильтра. Это позволяет системному фильтру устанавливать значения, которые могут быть проверены в файлах фильтров пользователей. Например, системный фильтр мог установить значение, указывающее, что это сообщение, вероятно, является спамом.

  • $spam_xxx
       Множество переменных с именами начинающимися с
    $spam доступны, если exim скомпилен с расширением контентного сканирования. Для дополнительных деталей, смотрите секцию 40.2.

  • $spool_directory
       Имя директории спула для exim`a.

  • $spool_inodes
       Число свободных inоde в дисковом разделе, где exim держит свои spool-файлы. Значение пересчитывается каждый раз, когда к нему обращаются. Если файловая система не имеет понятия inode, то значение будет -1. Также смотрите опцию
    check_spool_inodes.

  • $spool_space
       Количество свободного места (как число килобайт) в дисковом разделе, где пишутся spool-файлы exim`a. Значение пересчитывается каждый раз, когда на переменную ссылаются. Если операционная система не может подсчитать количество свободного места (истинно для экспериментальных систем), то значение будет -1. Например, чтобы проверит в ACL, что есть хотябы 50 мегабайт свободного места в спуле, можно написать:
    condition = ${if > {$spool_space}{50000}}
    

       Также смотрите опцию check_spool_space.

  • $thisaddress
       Эта переменная установлена только в процессе обработки команды
    foranyaddress в файле фильтра. Её использование объясняется в описании той команды, которая может быть найдена в документации на интерфейс фильтрации почты exim`a.

  • $tls_certificate_verified
       Эта переменная установлена в
    1, если при приёме сообщения сертификат TLS проверен, и 0 в обратном случае.

  • $tls_cipher
       Когда сообщение получено с удалённого хоста по шифрованному SMTP-подключению, эта переменная содержит использовавшийся тип шифрования, например DES-CBC3-SHA. При других обстоятельствах, в частности, для сообщения полученного по незашифрованным подключениям, переменная пуста. Смотрите главу 38 для подробностей о поддержке TLS.

  • $tls_peerdn
       Когда сообщение получено с удалённого хоста по шифрованному SMTP-подключению, и exim сконфигурирован для запроса сертификата с клиента, значение переменной - имя сертификата, доступное в ней в процессе последующей обработки.

  • $tod_bsdinbox
       Время и дата в формате BSD-майлбокса, например: Thu Oct 17 17:14:09 1995.

  • $tod_epoch
       Время и дата в виде числа секунд с начала эпохи Unix.

  • $tod_full
       Полная версия времени и даты, например: Wed, 16 Oct 1995 09:51:40 +0100. Временной пояс всегд даётся как часово смещение от UTC, с положительными значениями для поясов которые впереди (к востоку), и отрицательных значений для тех, которые позади (на западе).

  • $tod_log
       Время и дата в формате используемом exim`ом в его лог-файлах, например: 1995-10-12 15:32:29, но без временной зоны.

  • $tod_logfile
       Эта переменная содержит дату в формате yyyymmdd. Этот формат используется для штампа даты в файлах логов, когда
    log_file_path содержит флаг %D.

  • $tod_zone
       Эта переменная содержит числовое значение локальной временной зоны, например: -0500.

  • $tod_zulu
       Эта переменная содержит дату и время в формате
    Zulu, как задано в ISO8601, например: 20030221154023Z.

  • $value
       Эта переменная содержит результат раскрытия поиска, операции извлечения, или внешней команды, как описано выше.

  • $version_number
       Номер версии exim.

  • $warn_message_delay
       Эта переменная установлена только в течение создания предупредительного сообщения о задержке доставки. Детали по её использованию раскрыты в разделе 45.2.

  • $warn_message_recipients
       Эта переменная установлена только в течение создания предупредительного сообщения о задержке доставки. Детали по её использованию раскрыты в разделе 45.2.


    =============
    translated by lissyara



    Ссылка на обсуждение: http://forum.lissyara.su/viewforum.php?f=20.



  • Хостинг HOST-FOOD

    2014-07-27, lissyara
    gmirror

    Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
    2013-08-20, zentarim
    Scan+Print server FreeBSD 9

    Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
    2011-11-20, BlackCat
    Разъём на WiFi-карту

    Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
    2011-09-14, manefesto
    Настройка git+gitosis

    Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
    2011-08-14, zentarim
    Wi-FI роутер + DHCP + DNS

    Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
    2011-06-15, -ZG-
    Охранная система на FreeBSD+LPT

    В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
    2011-03-13, terminus
    ng_nat

    Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
    2011-02-20, Капитан
    Nagios+Digitemp

    Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
    2011-02-17, Le1
    Zyxel Configuration

    Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
    2011-02-16, fox
    hast carp zfs ucarp cluster

    HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
    2011-02-04, BlackCat
    Восстановление ZFS

    История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
    2011-02-03, Капитан
    1-Wire

    Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
    2011-01-28, Капитан
    Температура в серверной

    Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
    2011-01-21, m4rkell
    Syslog server

    Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
    2011-01-07, lissyara
    Canon/gphotofs

    Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
    2010-12-13, Al
    IPSec

    Описание принципов работы IPSEC и способов аутентификации.
    2010-12-07, manefesto
    FreeBSD on flash

    Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
    2010-12-05, Fomalhaut
    root ZFS, GPT

    Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
    2010-09-05, Cancer
    Настройка аудиоплеера на ximp3

    Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
    2010-08-31, Cancer
    Установка и настройка OpenVPN

    На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
    2010-08-25, manefesto
    freebsd lvm

    Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
    2010-04-30, gonzo111
    proftpd file auth&quota

    Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
    2010-04-22, lissyara
    tw_cli

    Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
    2010-04-14, fox
    MySQL Master+Master

    MySQL (Master Master) and (Master Slave) Как настроить репликацию…
    2010-03-09, terminus
    DNS zones

    Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
    2010-03-09, aspera
    Squid+AD (group access)

    Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
    2010-03-02, BlackCat
    Шлюз: Часть 4

    Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
    2010-03-01, BlackCat
    Шлюз: Часть 3

    Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
    2010-03-01, BlackCat
    Шлюз: Часть 2

    Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
    2010-03-01, BlackCat
    Шлюз: Часть 1

    Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
    2010-02-23, Morty
    darkstat

    Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
    2010-01-23, gonzo111
    squid+sams+sqstat

    Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
    2009-12-19, schizoid
    mpd5 + radius + ng_car + Abills

    Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
    2009-11-16, lissyara
    UFS->ZFS

    Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
    2009-11-13, gx_ua
    fusefs-ntfs

    Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
    2009-11-12, Morty
    LiveCD

    Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
    2009-09-27, lissyara
    Samba как PDC

    Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
    2009-08-30, terminus
    ipfw nat

    Подробное руководство по ipfw nat, сложные случаи конфигурации.
    2009-08-24, levantuev
    HotSpot

    Установка Hotspot системы в общественное заведение.
    2009-08-18, lissyara
    diskless

    Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
    2009-07-29, BAV_Lug
    Видеонаблюдение

    Настройка бюджетного варианта видеонаблюдения на удаленном объекте
    2009-07-22, Cancer
    OpenLDAP адресная книга

    Настройка и создание адресной книги на базе OpenLDAP + phpLDAPadmin
    2009-06-30, SergeySL
    AimSniff

    Руководство по созданию системы мониторинга ICQ-переписки на базе AimSniff, использующей базу данных MySQL для хранения и Web-интерфейс WAS (Web Aim Sniff) для просмотра перехваченных сообщений
    2009-06-25, atrium
    Управление правами доступа

    Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX.
    2009-06-16, DNK
    Exim+PgSQL

    Установка почтовой системы exim+pgsql на FreeBSD 7.1
    2009-05-30, mvalery
    HDD(mbr) -> HDD(gpt)

    Как разбить диск размером более 2TB на разделы, сделать загрузочным, а затем перенести на него информацию с рабочей системы — донора.
    2009-05-22, Cancer
    SendXMPP

    Отправка сообщений на Джаббер сервер по средствам SendXMPP
    2009-05-11, Raven2000
    Network UPS Tools

    Network UPS Tools представляет собой набор программ, которые обеспечивают общий интерфейс для мониторинга и администрирование UPS оборудования.
    2009-04-29, m0ps
    IPSEC over GRE with RIP

    Пример IPSEC over GRE и динамическим роутингом (RIP), с ADSL в качестве последней мили на оборудовании Cisco.
    2009-04-24, WhiteBear777
    qemu network

    Появилась необходимость поставить на БСД эмулятор(qemu) и настроить в качестве гостевой ОС Windows XP, предоставив ей выход в локалку и в сеть internet...
    2009-04-22, vp
    freebsd + huawei 162 gsm modem

    В статье описывается простой способ подключения модема huawei 162 к freebsd + первичная настройка smstools
    2009-04-12, mvalery
    Мониторинг RAID

    Мониторинг из командной строки RAID компаний AMCC 3ware, HighPoint, Dell (Perc 5/i и PERC 6/i) и LSI (MegaRAID SAS 8408E и SAS1078)
    2009-04-09, texnotronic
    RAID1 via LAN

    Функциональности DRBD во FreeBSD можно добиться примонтировав блочное устройство по сети при помощи GEOM Gate (ggate) и добавив его в зеркало с локальным диском средствами gmirror.
    2009-04-03, Raven2000
    Оптимизация хоста для CMS

    В последнее время на старый и не очень быстрый ПК (Celeron 800 RAM 256) мною было навешано с десяток сайтов и некоторые были из серии тяжелых CMS. И так нам дано FreeBSD 7.1 и ~10 сайтов/CMS.
    2009-04-01, atrium
    VSFTPD + AD && MySQL

    Настройка самого безопасного сервера FTP - vsftpd.
    2009-03-31, Dron
    Peoplenet + C-motech (3G)

    Описание подключения к сети Peoplenet посредством 3G модема С-motech CCu-650U на FreeBSD
    2009-03-25, lissyara
    mod_auth_external

    mod_auth_external - авторизация пользователей в apache c помощью внешней программы - например, системных пользователей.
    2009-03-24, gx_ua
    Lightsquid

    Частично lightsquid может заменить sams: быстрая и простая инсталляция, быстрый парсер, cgi скрипт для динамической генерации отчета, нет привязки к БД, различные графические отчеты, мультиязычный инт
    2009-03-18, LHC
    Установка Zabbix-1.6

    Установка и первоначальная настройка системы мониторинга Zabbix (версия 1.6)
    2009-03-16, Cancer
    Принт-Сервер Samba+LPD & AD

    Простейшая настройка Принт-Сервера на FreeBSD используя Samba+LPD & AD
    2009-03-04, Mad_caterpillar
    ipsec_vpnc

    Настройка VPN IPSec концентратора на FreeBSD 6.2 для клиента cisco с использованием ipsec-tools и авторизацией в активной директории
    2009-02-18, Andy
    Free-SA

    Программа анализирует log файлы Squid'а и формирует по ним отчет.
    2009-02-02, Cancer
    Openfire Jabber Server

    Установка Jabber сервера на примере Openfire
    2009-01-28, Cancer
    mpd5 + сжатие и шифрование

    Установка VPN сервера mpd5 + сжатие и шифрование
    2009-01-26, vp
    freebsd + webcamera

    Подключение и настройка вебмкамеры для работы с freebsd на примере Logitech QCam STX
    2009-01-10, Grishun_U_S
    конфиг для офисов

    В статье разбирается конфиг для офиса, пользователи которого имеют строгие ограничения по портам. Заворачиваем www трафик на транспарентный прокси, а остальное NAT'им. Эффективно делим канал интернет
    2008-12-27, Storoge
    sftp+chroot

    Возникла необходимость дать возможность нескольким пользователям заливать на сервер контент для своих сайтов через sftp, чтобы при этом не страдала безопасность.
    2008-12-13, Morty
    PurefFTPd

    Администрирование pureftpd-сервера с помощью вэб интерфейса Usermanager
    2008-12-11, lissyara
    termlog

    Небольшая простая утилита, использующаяся для записи в файл всего что происходит на терминалах системы. Полезно, когда есть доступ по ssh у тех, кому не очень доверяете. Паранойя - это не плохо =)
    2008-11-26, Cancer
    SQUID+SAMS +Rejik-(ADLDAP)

    Установка Прокси сервера SQUID с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf,РЕЖИК собственно рубит банеры и запрещает пользователям ходить на запрещенные сайты,
    2008-11-22, dvg_lab
    php5-oci8

    Решение проблем segmentation fault (core dumped) при работе с oracle8-client и php5-oci8
    2008-11-21, m0ps
    NTP

    Пример настройки NTP сервера для локальной сети и клиента, для синхронизации времени с локальный NTP сервером. Обновление ntpd из портов.
    2008-11-20, Cancer
    SQUID+SAMS +Rejik-(NTLM)

    Установка Прокси сервера SQUID с аутентификацией по NTL с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf, РЕЖИК собственно рубит банеры и запрещает пользователям хо
    2008-11-20, UA
    Hotspot

    Настройка безпроводной точки доступа (WiFi) на freebsd
    2008-11-12, Shaman
    Enemy Territory

    Появилась у меня такое желание поднять сервер Enemy Territory. Поискал погуглил, ничего толкового не нашел пришлось все самому делать. И вот решил поделиться опытом. Начинаем......
    2008-11-11, lissyara
    Samba+ NT ACL

    Использование vfs самбы - модули full_audit и recycle. Настройка для использования в качестве файлопомойки с 500+ одновременно работающих юзеров. Раздача прав через нативный виндовый интерфейс.
    2008-11-11, Raven2000
    Upgrading OpenBSD

    Сегодня мы будем обновлять OpenBSD. Систему необходимо поддерживать в актуальном виде и следить, чтобы все работало, как часы и все дырки были залатаны до прихода врага =)
    2008-11-10, lexy
    SMSTools 3

    Как автоматизировать отправку и обработку входящих сообщений при помощи мобильного телефона, датакабеля и компа
    2008-11-06, Cancer
    Asterisk IP PBX

    Установка VoiP сервера Asterisk IP PBX для соединения двух шлюзов и АТС
    2008-10-30, atrium
    Samba & CUPS & AD & ACL

    Настройка Samba в роли доменного файл-сервера, и CUPS в роли принт-сервера для Windows клиентов
    2008-10-17, Raven2000
    src & ports

    Конечно, в OpenBSD система портов никогда не сможет быть полной сравнение с той же системой во FreeBSD. Связано это с тем, что разработчики включают в порты лишь те приложение которые протестированн
    2008-10-13, Morty
    Mysql - базовое описание

    Базовое описание и принципы работы с MySQL
    2008-10-10, Cancer
    exim&dovecot + fetchmail + SSL

    Exim & Dovecot + Postfixadmin & Roundcube + Fetchmail & smtp_relay С возможностью отправлять письма через смтп релей провайдера. С использование SSL шифрование: POP3s IMAPs sSMTP
    2008-10-09, m0ps
    Дополнительные порты для роутера

    Увеличение количества Ethernet портов маршрутизатора за счет свободных портов коммутатора пробросив vlan с сабинтерфейса роутера на интерфейс коммутатора.
    2008-10-06, princeps
    Bacula

    Настройка сервера системы резервного копирования Bacula на FreeBSD для бэкапов FreeBSD и Windows машин
    2008-10-02, zheromo
    Postfix + DBMail

    Создание почтовой системы на основе Postfix + DBMail + SASL2 + TLS + DSpam + ClamAV + RoundCubeWebMail
    2008-10-02, Cancer
    SugarForge CRM

    SugarForge CRM предоставляет подавляющее большинство функциональных возможностей CRM систем
    2008-09-12, arksu
    ng_ipacct + squid

    Подсчет трафика с помощью ng_ipacct. Связка ng_ipacct + squid + парсер логов + авторизатор + nginx + mysql и куча служебных скриптов для работы всей системы.
    2008-09-03, Raven2000
    GLPI

    Мне надо было найти замену существующей программы инвентаризации, чтобы за компьютерами, принтерами, картриджами, лицензиями и тп был учет. Желательно с дополнительными бонусами типа системы подачи...
    2008-09-03, salimk
    POWERDNS

    Статья о том как мигрировать с DNS сетвера ISC Bind на POWERDNS
    2008-09-03, DNK
    Rinetd

    Редирект TCP портов с помощью утилиты rinetd - просто до безобразия - само прилодение простое, конфиг в одну строчку - что ещё надо для счастья? =)
    2008-09-03, L!Ner
    eGroupWare

    Это сервер групповой работы. Он укомплектован собственным веб-интерфейсом, который обеспечивает доступ к вашим данным с любой платформы по всей планете.
    2008-08-30, jafff
    MAC адрес

    У девайса VoIP Planet VIP-000 слетел MAC адрес и стал FF-FF-FF-FF-FF-FF, как я его востанавливал
    2008-08-30, Morty
    clonehdd

    Перенесение, бэкапирование HDD,легко и просто
    2008-07-31, Raven2000
    Proxy Auto Configuration

    Возникла необходимость автоматически настраивать прокси для всех компов и не бегать например если поменялось что-то на сервере прокси. Для этого давно существует технология Proxy Auto Configuration.
    2008-07-29, f0s
    NNTP сервер

    Конфигурирование собственного NNTP-сервера.
    2008-07-28, Al
    spamooborona

    настройка yandex spamooborona в качестве smtp-proxy для работы с exim
    2008-07-28, Cancer
    SQUID+SAMS +Rejik-(NCSA)

    Установка Прокси сервера SQUID с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf,РЕЖИК собственно рубит банеры и запрещает пользователям ходить на запрещенные сайты,
    2008-07-20, Raven2000
    Pax

    Эта замечательная утилита поставляется с FreeBSD по умолчанию, и она имеет неплохой потенциал. Можно создавать архивы модифицировать их, а так же живьем переносить всю операционную систему с данными
    2008-07-16, Andy2k
    BIND & AD

    Настройка BIND для обслуживания запросов контроллеров Active Directory. Альтернатива поднятию DNS от Microsoft.
    2008-07-16, aleksey.kravchenko
    Samba (PDC+BDC)

    Поднять главный (офис) и резервный (филиал) контроллер домена на базе Samba и OpenLDAP, организовать синхронизацию и репликацию между ними. Запись в LDAP должена выполняться только на PDC.
    2008-07-14, aleksey.kravchenko
    OpenVPN + LDAP

    Статья о том, как настроить OpenVPN с авторизацией пользователей в OpenLDAP.
    2008-07-14, aleksey.kravchenko
    ProFTPd + LDAP

    ProFTPd с авторизацией пользователей в OpenLDAP
    2008-07-13, lissyara
    Asus Eee PC

    Дали на несколько дней поиграться Asus Eee PC - мелкий ноутбок по смешной цене. Ну, первым делом ставим правильный ОС и смотрим - что из этого получиться.
    2008-07-09, terminus
    DNS сервер Unbound

    Установка и настройка кеширующего DNS сервера Unbound под управлением FreeBSD 7.0
    2008-07-08, f0s
    mozilla autoconfig

    Автонастройка браузера и почты Mozilla Seamonkey пользователям
    2008-07-05, lissyara
    iftop

    Утилита предназначена для мониторинга загрузки канала в режиме реального времени - позволяет видеть кто именно занял полосу. Полезно для организаций с FreeBSD на шлюзовой машине.
    2008-07-02, manefesto
    snd_hda

    Патчим snd_hda для корректной работы с наушниками
    2008-06-27, Grishun_U_S
    dd : бэкапируем windows

    Клонирование разделов windows с помощью загрузочного диска FreeBSD
    2008-06-25, terminus
    DNS сервер NSD

    Установка и настройка авторитарного DNS сервера NSD под управлением FreeBSD 7.0
    2008-06-17, Al
    NetXtreme BCM5722

    Драйвер для сетевой карты NetXtreme BCM5722 Gigabit Ethernet
    2008-06-15, tango
    Amanda

    Установка и настройка сервера резервного копирования Amanda на FreeBSD.
    2008-06-12, LMik
    Виртуальный свитч

    Статья описывает создание виртуального коммутатора для соединения удаленных физических ethernet сетей.
    2008-06-08, littlesavage
    SiS*Mirage*1 на D201GLY2

    Как заставить работать видеоrарту SiS*Mirage*1 на материнской D201GLY2
    2008-06-06, nsand
    Рыбалка на FreeBSD

    Стьатья о том как настроить рыбалку со спутника под FreeBSD
    2008-06-06, nsand
    TT budget S-1401

    Настройка драйвера ttbudget (SkyStar3) под FreeBSD
    2008-05-30, Andy2k
    NOD32 mirror

    Скрипт для создания зеркала обновлений для антивируса NOD. Автоматически ищет нужные логин-пароль для получения обновлений. В теории не требует обслуживания.
    2008-05-25, Romzes
    метаданные exif

    Пример сортировки фотографий сделаных разными фотоаппаратами, с разными названиями, датами создания/модификации. Из под консоли, конечно.
    2008-05-23, FenX
    svn+apache+trac

    Установка связки Apache2.2 + Subversion + Trac (Установка и настройка SVN сервера с доступом к репозиториям по http протоколу)
    2008-05-22, Grishun_U_S
    простой конфиг PF

    В статье разбирается простой конфигурационный файл pf "изнутри можно все"
    2008-05-20, KrivoSoft
    HAVP

    HAVP(HTTP AntiVirus proxy)- работает как http прокси, проверяющий файлики используя LibClamav. В заметке описан процес прикручивания антивируса к уже работающему прокси серверу squid.
    2008-05-20, Covax
    ALTQ в IPFW

    Исполльзование ALTQ вместе с IPFW
    2008-05-19, nonalog2007
    pppoe

    Настройка ADSL-модема для подключения к Интернет.
    2008-05-04, Abigor
    php + mssql

    Настройка php на freebsd для работы с базами в mssql по доменной авторизации.
    2008-04-28, serge
    i386=>amd64

    Рассматриваеться способ удаленной миграции с архитектуры i386 на amd64 на рабочем сервере.
    2008-04-24, Mr.Y
    Lan over Bluetooth

    Статья описывает как используя Bluetooth, объединить две FreeBSD машины в сеть.
    2008-04-19, lissyara
    WiFi WPA

    Подключение FreeBSD к беспроводной WiFi сети с использованием шифрования WPA.
    2008-04-18, nikll
    nginx+php-fpm+mysql

    Статья о настройке мощного веб сервера который не ляжет от хорошей нагрузки.
    2008-04-16, nikll
    qmail-ldap + AD

    Статья о том как я прикрутил qmail к АД win2003 (с упровлением почтовыми аккаунтами через консоль mmc из под винды)
    2008-04-14, SHPAk
    Приглашение csh/tcsh

    Приглашение csh/tcsh не всегда удобно. Здесь описано как помянять оное...
    2008-04-07, inspirra
    deltup, xdelta, bdelta

    Некоторые тонкости создания бинарных патчей. И использование "The dynamic deltup server network" для экономии на обновлениях исходников программ устанавливаемых из портов.
    2008-04-02, fr33man
    exim + cyrus-imapd

    Руководство по настройке почтовой системы на базе OpenBSD-4.2: exim + cyrus-imapd + mysql
    2008-03-30, Morty
    LiveCD (+restore)

    LiveCD, который развернет мне на жёсткий диск готовую настроенную систему
    2008-03-25, lissyara
    BlueTooth mouse

    Краткое повествование о том, как привернуть BlueTooth мышь к FreeBSD. Краткое - потому как делается это с полпинка...
    2008-03-21, moonug
    ProFTPD+iconv

    Порт позволяющий включить перекодировку имён файлов в proftpd. Раньше для этого был патч, а щас всё поломали =))
    2008-03-11, helloworld
    vsftpd + mysql

    Настройка фтп сервера vsftpd с пользователями из mysql
    2008-03-06, Raven2000
    Call of Duty 4

    Call of Duty 4: Modern Warfare — компьютерная игра, продолжение серии COD, разработанное студией Infinity Ward. Это первая игра в серии, действие которой происходит не во время мировой войны.
    2008-03-04, schizoid
    NeTAMS 2

    Netams, статистика, биллинг, огрнаичение и подсчет трафика
    2008-03-04, schizoid
    NeTAMS

    Программа для учета и управления сетевым трафиком
    2008-03-01, Le1
    EA Battlefield 2 server

    Установка игрового сервера EA Battlefield 2 под ОС FreeBSD
    2008-02-25, dikens3
    Dynamic DNS

    Свой сервер с динамическим IP-Адресом.
    2008-02-23, fr33man
    squid ntlm

    Настройка Squid с аутентификацией ntlm, под OpenBSD. Решение проблем сборки с поддержкой АД.
    2008-02-18, lissyara
    BlueTooth

    Встала задача залить на Нокию гиг музыки через BlueTooth. ОС - правильный - FreeBSD, вот про то как это сделать из под неё - и рассказ. Также немного про нынешнее состояние дел с голубыми зубами =)
    2008-02-17, Raven2000
    NFS & Win2k3

    При работе с UNIX системами на предприятиях часто приходится организовывать совместную работу с Windows. Необходимо обеспечить взаимодействие UNIX<>WIN бывает, что доступ по FTP или др не устраивает.
    2008-02-14, Morty
    Lightsquid

    Снятие статистики с OOPS, SQUID с помощью lightsquid - нечто на подобии SARGa, и выполняет туже задачу, подбивает статистику пользования прокси сервером
    2008-02-14, Morty
    OOPS

    Краткое описание установки и настройки прозрачного прокси-сервера OOPS
    2008-02-12, fr33man
    Apache

    Настройка web-сервера apache, на базе OpenBSD. Нужен был web сервер. Стандартно нужно было ставить apache. Но я помнил, когда раньше работал с OpenBSD, что апач поставляется вместе с системой. Так
    2008-02-11, Raven2000
    Установка OpenBSD

    OpenBSD — свободная многоплатформенная операционная система, основанная на 4.4BSD — BSD-реализации UNIX системы. Основным отличием OpenBSD от других свободных операционных систем, базирующихся на
    2008-01-31, serge
    ApacheStats

    Сбор статистики с веб-сервера Apache в Cacti с использованием модулей mod_status и mod_info. Отображается число хитов в секунду, загрузка чилдренов и прочая полезная инфа.
    2008-01-30, Raven2000
    CVSUP и софт через Proxy

    При работе за прокси люди испытывают неудобство при обновление портов и установки портов. Хотя, наверное, догадываются, что FreeBSD может элегантно обходить эти камни, но не знают как.
    2008-01-25, nikll
    kde и smb

    статья о том как фрю сделать членом win2003 домена и о том как в кде 3.5 ходить по доменным шарам с нормальной русской кодировкой
    2008-01-21, Fastman
    Создание программ на QT4/С++

    Установка и настройка QT4. Пример создание приложения с GUI.
    2008-01-17, Morty
    stunnel для pop3,smtp

    Создание защищенного подключения для сервисов POP3, SMTP, Imap , www с помощью stunnel
    2008-01-09, lissyara
    Atheros AR5007EG

    Прикручивание карточки Atheros AR5007EG (в ноутбуке Toshiba L40-139) под FreeBSD.
    2008-01-04, LMik
    growfs

    Статья наглядно описывает изменение размера раздела диска в FreeBSD при помощи growfs, без потери данных находящихся на диске.
    2007-12-23, serge
    FreeBSD на VDS

    Рассматривается настройка FreeBSD6.2 на VDS с чистой ОС.
    2007-12-22, serge
    OTRS на Apache1

    Рассматривается установка Open Ticket Request System для работы на хостинг сервере в связке apache1.3 + mod_perl + mysql50.
    2007-12-11, INFected
    SkyStar-2+SlonAx

    Встала задача организовать прием трафика от спутникового провайдера. Естественно на раздающем сервере должна быть FreeBSD. А как же иначе?
    2007-12-08, netcat
    GEOM-ELI

    Шифрование файловых систем посредством класса GEOM-ELI
    2007-12-07, helloworld
    PVPGN

    Настройка сервера Battle.net в небольшой локальной сети.
    2007-12-06, seacon
    ESET NOD32

    Описание настройки антивирусной системы NOD32 ESET File Security
    2007-11-23, azu
    Bluetooth proximity monitor

    Описание и скрипты для отслеживания удаленности bluetooth устройства.
    2007-11-19, catdog_
    verlihub (p2p)

    описывается, как установить, настроить p2p-сервер и как им управлять
    2007-11-14, UA
    OpenVPN

    руководство по настройке openvpn между FreeBSD и Windows
    2007-11-11, AlkoGekS
    atacontrol

    Проверка работы raid-1 с помощью штатной утилиты atacontrol на freebsd 6.2
    2007-11-08, Raven2000
    Transport Tycoon Deluxe

    Transport Tycoon Deluxe (сокращенно - TTD) - экономическая транспортная стратегия, в которой целью игрока является создание максимально доходной транспортной империи.
    2007-11-06, lissyara
    squid+AD

    Инструкция - как авторизовать пользователей в домене, разделив доступ к ресурсам по виндовым группам - кому куда можно, а кому нельзя, с использованием squid2.6. Ну и объяснение - почему пока не 3.0.
    2007-11-03, schizoid
    icecast2

    Вещание интернет радио в локальной сети с помощью icecast2
    2007-11-02, AlkoGekS
    RoundCube

    Возникла необходимость перевести пользователей с squirrelmail на roundcube, завязать все это хотелось на postgresql, чтобы и в ней разобратьс заодно.
    2007-10-30, SniZ
    queues

    Краткая заметка по использованию очередей В IPFW
    2007-10-29, s@sh@
    LACP и VLAN

    Описание настройки LACP отдельно и совместно с VLAN во FreeBSD 7.0
    2007-10-26, Al
    portaudit

    Эти приложение используется для контроля уязвимостей и обновления приложений, установленных из портов.
    2007-10-24, -cat-
    Заметки об IPFW

    Заметки о настройке IPFW, подключение IPFW и NATD, принцип взаимодействия, принципы построения правил IPFW.
    2007-10-23, Raven2000
    X-Bomber

    Представляю вниманию отличную аркаду которая скрасит наш быт и существование в офисном пространстве именуемая как "работа" И так прошу любить и жаловать X-Bomber
    2007-10-22, Raven2000
    TeamSpeak

    Teamspeak (тимспик) — семейство программ, предназначенных для общения голосом в сети. От классического телефона отличается практически неограниченным количеством абонентов, разговаривающих одноврем
    2007-10-22, RageLT
    Nginx+php+fcgi

    "Nginx + PHP + Spawn-fcgi" - установка nginx под FreeBSD и настройка для выполнения PHP скриптов.
    2007-10-20, dikens3
    UFS2

    Как устроена UFS2. Небольшой взгляд изнутри.
    2007-10-19, Al
    Nagios - мониторинг сети

    настройка мониторинга сети с использованием Nagios
    2007-10-19, BlackCat
    FFS из-под WinXP

    Описание програмки для чтения BSD разделов под Windows. К сожалению, диск подключается в режиме только чтения - но и это уже неплохо.
    2007-10-14, dikens3
    recovery files

    Восстановление файлов на FreeBSD с использованием foremost, sleuthkit, photorec. Немного теории о хранении файлов на диске.
    2007-10-05, lissyara
    ClamAV mirror

    Понадобилось создать внутри локальной сети зеркало обновлений ClamAV, c учётом того, что разработчики это не привтствуют - пришлось изобретать подпорки и велосипеды.
    2007-10-04, SeeD
    irc + services

    Установка irc сервера (unreailircd) + сервисов (anope) на FreeBSD 6.0. Приведён тот необходимый минимум, который вполне подойдет для одиночных серверов.
    2007-10-04, lissyara
    установка по сети

    Столкнувшись с невозможностью поставить FreeBSD на старенький ноут с CD-ROM (толи диск царапаный, толи чё), пришлось изгаляться с установкой по сети - благо на нём был PXE у встроенной сетевухи.
    2007-10-04, Al
    cups-samba на samba+AD

    Пример настройки сервера печати с использованием CUPS, Samba и AD. Пример установки и настройки клиентских (для винды) драйверов принтера на сервер с использованием порта cups-samba.
    2007-10-03, schizoid
    ipcalc

    Скрипт для вычисления широковещательного адреса, диапазон хостов, шаблон сетевой маски по полученному IP и сетевой маске. Может использоваться для конструирования сетей и подсетей, а также в обучающих
    2007-09-26, lissyara
    немного о ssh

    Краткое описание как пробросить порты с удалённой локальной сети на локальную машину при помощи ssh. Может быть полезным, когда нет VPN в удалённую сеть, а есть ssh, и нужен доступ к какому-то сервису
    2007-09-26, SniZ
    mod_ntlm2

    mod_ntlm2 - модуль для apache22, позволяющий прозрачно авторизовать пользователя использую его доменную учетную запись. Удобно, если необходимо сделать ограниченный доступ к содержимому корпоротивного
    2007-09-18, lissyara
    klaptopdaemon

    даемон KDE для мониторинга состояния батареи ноутбука. Наверное, самое удобное и функциональное из того, что я перебрал.
    2007-09-17, bisyarin
    Удаленное разбиение HDD

    В статье рассмотрен пример удаленной доразбивки винчестера. Показан путь решения задачи как с использованием sysinstall, так и с помощью утилит fdisk, bsdlabel и newfs.
    2007-09-14, freeman_tnu
    DSL-G804V и FreeBSD 6.2

    Настройка VPN-туннеля между D-Link DSL-G804V и FreeBSD 6.2
    2007-09-13, lissyara
    KNemo

    Служба KDE отображающая в трее значка сетевого подключения, с богатым функционалом - позволяет собирать статистику, строить графики, выполнять скрипты при изменении статуса сетевого подключения.
    2007-09-12, lissyara
    desktopbsd-tools

    Набор утилит для упрощения жизни под KDE. Включают в себя утилиты трея для слежения за сетью, монтирования/ демонтирования, информацию о заряде батереи. Также несколько апплетов для контрольной панели
    2007-09-06, lissyara
    nettop

    Приложение позволяющее отслеживать сетевую активность по портам-протоколам, и отображать скорость передачи данных по этим портам и протоколам. Весьма удобно для наблюдения - что происходит на сервере.
    2007-09-04, squid
    sshd & AD

    Использование одной учетной записи на FreeBSD и Windows - используя AD для авторизации пользователей по ssh
    2007-09-02, lissyara
    ISPmanager

    Краткое описание того, как заменить дефолтовый майлер на ISPmanager, если он у вас - sendmail. Может пригодится тем кто берёт виртуальный сервер, и хочет большей гибкости в настройке.
    2007-08-25, serge
    mod_ntlm

    mod_ntlm - модуль для apache13, позволяющий прозрачно авторизовать пользователя использую его доменную учетную запись. Удобно, если необходимо сделать ограниченный доступ к сайту.
    2007-08-15, lissyara
    colorize

    colorize - утилита для подсветки ключевых слов в просматриваемых логах. Весьма удобно - становится более понятно и доходчиво, тока временами слишком уж пёстро :)))
    2007-08-13, Raven2000
    Документация на Unix

    Здесь представляем список необходимой документации для чтения и полного освоения FreeBSD как основной серверной операционной системы. И не только ее.
    2007-08-06, lissyara
    QTFW

    Графический интерфейс для составления и редактирования правил файрволла IPFW - абсолютно бесполезная приблуда...
    2007-08-01, Raven2000
    Counter-Strike 1.6

    По просьбам трудящихся, точнее по их заявлениям, о том что нужна им Counter-Strike 1.6 хоть "убейся об стену". Решил разобраться, наконец, с этим вопросом, что и сделал. И так поехали. :)
    2007-07-31, f0s
    LDAP: samba, dns, dhcp

    Настраиваем PDC на самбе, все данные в LDAP. Попутно вешаем DDNS+DHCP - их данные тоже храним в LDAP.
    2007-07-27, lissyara
    root-tail

    Практически бесполезное, но довольно забавное приложение, показывающее логи на рабочем стол. Может пригодится лишь если на ваш десктоп логи передаются с удалённых хостов.
    2007-07-27, lissyara
    laptop battery

    Краткий обзор программ мониторинга состояния заряда батареи ноутбука - что можно использовать на FreeBSD7.0 (CURRENT) и AMD64.
    2007-07-24, Raven2000
    phpBB-2/3

    phpBB – это мощное, полностью масштабируемое и легко изменяемое программное обеспечение с открытым исходным кодом для создания конференций. Основанный на мощном языке PHP и имеющий поддержку серверов
    2007-07-23, lissyara
    apache 2.0

    Настройка WEB-сервера на apache2 и php в режиме CGI с использованием mod_fastcgi.
    2007-07-15, lissyara
    geom_uzip

    Создание образа сжатой ФС с загрузкой по сети - данный метод может использоваться для создания загрузочных дисков/сидюков и прочего - на машинах где мало оперативки, например...
    2007-07-06, bdmalex
    2 CD -> 1 DVD

    FreeBSD: Заменим 2 инсталляционных диска на 1 DVD.... чтобы коллекцию дисков уменьшить....
    2007-07-04, Andy
    NSPluginWrapper

    Перевод с французского очень хорошего мануала, досконально объясняющего, как инсталлировать линуксовые плугины для firefox, используя NSPluginWrapper. В том числе и 9-й flash.
    2007-07-01, lissyara
    sshit

    Перловый скрипт мониторящий попытки подбора паролей для ssh/ftp в режиме реального времени, и блокирующий атакующего используя файрволл - pf/ipfw/ipfw2 - просто и со вкусом :)
    2007-06-19, Raven2000
    CMS - TYPO3

    Ставим CMS TYРOЗ - Корпоративная система управления веб-контентом TYРOЗ — система управления сайтами (CMS/CMF) с открытым исходным кодом и свободной лицензией. Написана на PHP, для хранения данных...
    2007-06-15, lissyara
    SAMBA+ACL

    SAMBA + правка расширенных пермишенов (ACL) через виндовые галочки - полезно для передачи управления шарами на самбе виндовым админам, ничё кроме галок и не умеющим :)
    2007-06-13, roygbiv
    ntop 4.10

    Установка, настройка, оптимизация сетевого анализатора трафика ntop 4.1 stable с плагинами (в т.ч.SPAN-Sniffer и NetFlow) на FreeBSD 8.2 release. Описание nProbe.
    2007-06-09, Andy
    vsftpd

    перевод мана на vsftpd
    2007-06-04, lissyara
    exim + dovecot + win2003 AD

    Как заставить связку exim+dovecot использовать в качестве БД пользователей виндовый домен. Статья неполноценная - тока основные моменты и ссылки, где взять остальное. Скорее - просто заметка для себя.
    2007-05-30, lissyara
    exim + exchange

    Настройка релея на exim для сервера M$ exchange находящегося внутри локальной сети. Настройка перезаписи адресов локального домена на внешний.
    2007-05-13, Raven2000
    Бронированный FreeBSD

    Как и любую другую систему FreeBSD нужно так же защищать от посягательств на нее. Она не так уж защищена, как много людей о ней думают и ее можно так же сломать и крякнуть, как и тот же Windows.
    подписка

        вверх      
    Статистика сайта
    Сейчас на сайте находится: 9 чел.
    За последние 30 мин было: 44 человек
    За сегодня было
    5570 показов,
    690 уникальных IP
     

      Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
      Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.0895 секунд
    Из них PHP: 70%; SQL: 30%; Число SQL-запросов: 56 шт.
    Исходный размер: 540132; Сжатая: 92942