URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 91737
[ Назад ]

Исходное сообщение
"Exim 4.7 : сохранить результат выполнения perl "

Отправлено uchti , 09-Июн-11 18:37 
Здравствуйте, я столкнулся с проблемой в Exim4... для моих задач мне необходимо выполнить функцию perl и сохранить её результат в переменную конфига .. а затем подставить значение этой переменной в директивы конфига Exim4... как я пробовал сделать

в конфиге exim4 я прописал

VAR = ${perl{func}}

а затем подставил  VAR в нужных мне местах .. но как оказалось exim4 в тех местах куда я подставил VAR , каждый раз выполнял ${perl{func}} .

Возможно ли всетаки реально сохранить результат (в моем случаи строка) выполнения функции в переменную конфига exim4

документацию я читал, но не нашёл там решения как это можно реализовать



Содержание

Сообщения в этом обсуждении
"Exim 4.7 : сохранить результат выполнения perl "
Отправлено uchti , 09-Июн-11 19:03 
как я понимаю проблема в том что VAR является макросом а не переменной вот exim4 и каждый раз выполняет его ... но все же .. Возможно как то сохранить и подставить значение в конфиг exim4 ?



"Exim 4.7 : сохранить результат выполнения perl "
Отправлено Bosh , 09-Июн-11 20:26 
Как вариант

warn set acl_m_my=${perl{func}}

VAR == $acl_m_my


>[оверквотинг удален]
> а затем подставить значение этой переменной в директивы конфига Exim4... как
> я пробовал сделать
> в конфиге exim4 я прописал
> VAR = ${perl{func}}
> а затем подставил  VAR в нужных мне местах .. но как
> оказалось exim4 в тех местах куда я подставил VAR , каждый
> раз выполнял ${perl{func}} .
> Возможно ли всетаки реально сохранить результат (в моем случаи строка) выполнения функции
> в переменную конфига exim4
> документацию я читал, но не нашёл там решения как это можно реализовать


"Exim 4.7 : сохранить результат выполнения perl "
Отправлено uchti , 09-Июн-11 20:49 
не получилось

объявил VAR=  в начале конфига

затем

acl_check_rcpt:
  warn set acl_m_my=${perl{randominterface}}
  accept  hosts = :
  deny

после но до директивы транспорта сделал VAR == $acl_m_my

а в транспорте подставляет пустое значение макроса

может быть exim чтобы из acl уровня перейти к транспорту запускает другой процесс exim ?
вот и не получается у меня перебросить значение

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

> Как вариант
> warn set acl_m_my=${perl{func}}
> VAR == $acl_m_my


"Exim 4.7 : сохранить результат выполнения perl "
Отправлено Bosh , 09-Июн-11 20:59 
вместо acl_m_my=${perl{randominterface}}
      
acl_с_my=${perl{randominterface}}

acl_m действует в пределах одного aсl  data rcpt ...
acl_с действует глобально пока живо письмо
  
>[оверквотинг удален]
> вот и не получается у меня перебросить значение
> пробовал записать переменную из перла в системное окружение( ENV переменную) а затем
> второй функцией читать значение .. ничего не вышло ... у меня
> он так и не записал туда ничего ... ((( очень печально
> .. так как пока вижу только самый плохой вариант с записью
> в файл и последующим чтением его ... что очень отразиться на
> производительности
>> Как вариант
>> warn set acl_m_my=${perl{func}}
>> VAR == $acl_m_my


"Exim 4.7 : сохранить результат выполнения perl "
Отправлено Bosh , 09-Июн-11 21:14 
И вообще зачем юзать макросы ,  это специфическая вещь ,  я думаю без нее
спокойно можно обойтись
>[оверквотинг удален]
>> вот и не получается у меня перебросить значение
>> пробовал записать переменную из перла в системное окружение( ENV переменную) а затем
>> второй функцией читать значение .. ничего не вышло ... у меня
>> он так и не записал туда ничего ... ((( очень печально
>> .. так как пока вижу только самый плохой вариант с записью
>> в файл и последующим чтением его ... что очень отразиться на
>> производительности
>>> Как вариант
>>> warn set acl_m_my=${perl{func}}
>>> VAR == $acl_m_my


"Exim 4.7 : сохранить результат выполнения perl "
Отправлено uchti , 09-Июн-11 21:19 
счас попробовал

в acl

acl_check_rcpt:
  warn set acl_c_my=${perl{randominterface}}
  accept  hosts = :
  deny


в транспорте
  interface = $acl_c_my

пишет пустую строку  interface = ${perl{randominterface}}

все подставляет

сложность в том что мне нужно одинаковое значение подставить
и в interface = $acl_c_my
и в headers_add = X-Originating-IP: [$acl_c_my]

так не работает


елси делаю сразу в транспорте

>[оверквотинг удален]
>>> вот и не получается у меня перебросить значение
>>> пробовал записать переменную из перла в системное окружение( ENV переменную) а затем
>>> второй функцией читать значение .. ничего не вышло ... у меня
>>> он так и не записал туда ничего ... ((( очень печально
>>> .. так как пока вижу только самый плохой вариант с записью
>>> в файл и последующим чтением его ... что очень отразиться на
>>> производительности
>>>> Как вариант
>>>> warn set acl_m_my=${perl{func}}
>>>> VAR == $acl_m_my


"Exim 4.7 : сохранить результат выполнения perl "
Отправлено Bosh , 09-Июн-11 21:33 
Короче, постановку задачи в студию ,  только коротко  
>[оверквотинг удален]
>>>> вот и не получается у меня перебросить значение
>>>> пробовал записать переменную из перла в системное окружение( ENV переменную) а затем
>>>> второй функцией читать значение .. ничего не вышло ... у меня
>>>> он так и не записал туда ничего ... ((( очень печально
>>>> .. так как пока вижу только самый плохой вариант с записью
>>>> в файл и последующим чтением его ... что очень отразиться на
>>>> производительности
>>>>> Как вариант
>>>>> warn set acl_m_my=${perl{func}}
>>>>> VAR == $acl_m_my


"Exim 4.7 : сохранить результат выполнения perl "
Отправлено uchti , 09-Июн-11 22:57 
есть список ip выбрать из него рендомно любой ip (это счас я делаю в perl ) и подставить в interface и дополнительный хедер  .... до тех пор пока я подставлял только в интерфейс все гуд было .. когда попробовал подставить и в хедер получилось что в интерфейсе один ip а в хедере другой ... вот и думаю как это решить ...

>[оверквотинг удален]
>>>>> вот и не получается у меня перебросить значение
>>>>> пробовал записать переменную из перла в системное окружение( ENV переменную) а затем
>>>>> второй функцией читать значение .. ничего не вышло ... у меня
>>>>> он так и не записал туда ничего ... ((( очень печально
>>>>> .. так как пока вижу только самый плохой вариант с записью
>>>>> в файл и последующим чтением его ... что очень отразиться на
>>>>> производительности
>>>>>> Как вариант
>>>>>> warn set acl_m_my=${perl{func}}
>>>>>> VAR == $acl_m_my


"Exim 4.7 : сохранить результат выполнения perl "
Отправлено uchti , 10-Июн-11 00:11 
все проблема решена , помогла переменная $sending_ip_address в транспорте

я с начала выбрал рендомно ip и назначил его на интерфейс а затем добавил $sending_ip_address в хедеры

  interface = ${perl{randominterface}}
  helo_data = ${lookup dnsdb{ptr=$sending_ip_address}{$value}{$primary_hostname}}
  headers_add = X-Originating-IP: [$sending_ip_address]


> есть список ip выбрать из него рендомно любой ip (это счас я
> делаю в perl ) и подставить в interface и дополнительный хедер
>  .... до тех пор пока я подставлял только в интерфейс
> все гуд было .. когда попробовал подставить и в хедер получилось
> что в интерфейсе один ip а в хедере другой ... вот
> и думаю как это решить ...