Re: [Exim-users] Не работает dlopen

2012-02-25 Пенетрантность Алексей Киреев
Методом тыка понял, кто виновник: это опция (к ней нет никаких комментарев в 
Makefile):
CFLAGS += -fvisibility=hidden

Собрал exim4.77 на CentOS 5.5, не сразу, но добился работы exim-dlfunc.so и 
начал изучать различие в флагах компиляции. Оказывается, в EXTRALIBS можно 
ничего не писать, т.к. -ldl и -rdynamic (которого достаточно, т.е. не нужен 
флаг -export-dynamic) - эти флаги берутся из опций линковщика, которые 
выставляет perl (в конце набора параметров компиляции), примерно так:

gcc -o exim  acl.o child.o crypt16.o daemon.o dbfn.o debug.o deliver.o 
directory.o dns.o drtables.o enq.o exim.o expand.o filter.o filtertest.o 
globals.o dkim.o header.o host.o ip.o log.o lss.o match.o moan.o os.o parse.o 
queue.o rda.o readconf.o receive.o retry.o rewrite.o rfc2047.o route.o search.o 
sieve.o smtp_in.o smtp_out.o spool_in.o spool_out.o store.o string.o tls.o 
tod.o transport.o tree.o verify.o lookups/lf_quote.o lookups/lf_check_file.o 
lookups/lf_sqlperform.o local_scan.o perl.o malware.o mime.o regex.o spam.o 
spool_mbox.o demime.o bmi_spam.o spf.o srs.o dcc.o version.o \
  routers/routers.a transports/transports.a lookups/lookups.a \
  auths/auths.a pdkim/pdkim.a \
  -lresolv -lnsl -lcrypt -lm   -lpam -ldl \
   -ldb -lldap -llber -lmysqlclient -lpq -lsqlite3 -lsasl2 \
  -Wl,-E  -fstack-protector -L/usr/local/lib  -L/usr/lib/perl/5.14/CORE 
-lperl -ldl -lm -lpthread -lc -lcrypt -lgnutls -lpcre -rdynamic

В последней строке - опции для perl, там -rdynamic. Возможно это и есть ответ 
на вопрос, почему без компиляции perl не видны символы acl_added_headers.
 я год назад пытался найти зависимость от сборки с поддержкой и без
 поддержки perl и выводом сообщения об ошибке Undefined symbol
 acl_added_headers - безуспешно.


В CentOS символ acl_added_headers виден глобально (второе поле - g):
objdump -t /usr/sbin/exim|grep acl_added
0812b05c g O .bss   0004  acl_added_headers

В Debian, когда не работала exim-dlfunc.so этот символ был виден локально 
(второе поле - l):
objdump -t /usr/sbin/exim4.bad |grep acl_added
081267ec l O .bss   0004  acl_added_headers

Причём проверять надо бинарник без strip, иначе SYMBOL TABLE: no symbol 


 при этом strings `which exim` | grep acl_removed_headers выдавало пустую
 строку или acl_removed_headers?
 
Сейчас strings `which exim` | grep acl_added_headers
выдаёт acl_added_headers

acl_removed_headers - я сейчас не патчил с этим функционалом. Вообще, он нужен 
или можно без него нормально работать?

Так же заметил, что у Вас на сайте на главной странице ссылка 
http://mta.org.ua/exim-4.76-conf/ (Паровоз (конфигуратор для exim 4.70 и 
выше):) ведёт на http://mta.org.ua/exim-4.69-conf/. Аналогично и с другой 
ссылкой - Паровоз (конфигуратор для exim 4.67 и выше):. Похоже из-за этого я 
взял файл kas3.c из 4.69.

Спасибо Вам и Лене за помощь. И спасибо за kas3.c - наконец то получилось 
прикрутить нормально kas к exim. При local_scan я не мог на этапе получения 
сообщения своими условиями отвергнуть сообщение. Ну а метод интеграции с 
kas-pipe вообще не понравился.
___
Exim-users mailing list
Exim-users@mailground.net
http://mailground.net/mailman/listinfo/exim-users



Re: [Exim-users] Не работает dlopen

2012-02-25 Пенетрантность Victor Ustugov
Алексей Киреев wrote:
 Методом тыка понял, кто виновник: это опция (к ней нет никаких комментарев в 
 Makefile):
 CFLAGS += -fvisibility=hidden
 
 Собрал exim4.77 на CentOS 5.5, не сразу, но добился работы exim-dlfunc.so и 
 начал изучать различие в флагах компиляции. Оказывается, в EXTRALIBS можно 
 ничего не писать, т.к. -ldl и -rdynamic (которого достаточно, т.е. не нужен 
 флаг -export-dynamic) - эти флаги берутся из опций линковщика, которые 
 выставляет perl (в конце набора параметров компиляции), примерно так:
 
 gcc -o exim  acl.o child.o crypt16.o daemon.o dbfn.o debug.o deliver.o 
 directory.o dns.o drtables.o enq.o exim.o expand.o filter.o filtertest.o 
 globals.o dkim.o header.o host.o ip.o log.o lss.o match.o moan.o os.o parse.o 
 queue.o rda.o readconf.o receive.o retry.o rewrite.o rfc2047.o route.o 
 search.o sieve.o smtp_in.o smtp_out.o spool_in.o spool_out.o store.o string.o 
 tls.o tod.o transport.o tree.o verify.o lookups/lf_quote.o 
 lookups/lf_check_file.o lookups/lf_sqlperform.o local_scan.o perl.o malware.o 
 mime.o regex.o spam.o spool_mbox.o demime.o bmi_spam.o spf.o srs.o dcc.o 
 version.o \
   routers/routers.a transports/transports.a lookups/lookups.a \
   auths/auths.a pdkim/pdkim.a \
   -lresolv -lnsl -lcrypt -lm   -lpam -ldl \
-ldb -lldap -llber -lmysqlclient -lpq -lsqlite3 -lsasl2 \
   -Wl,-E  -fstack-protector -L/usr/local/lib  
 -L/usr/lib/perl/5.14/CORE -lperl -ldl -lm -lpthread -lc -lcrypt -lgnutls 
 -lpcre -rdynamic
 
 В последней строке - опции для perl, там -rdynamic. Возможно это и есть ответ 
 на вопрос, почему без компиляции perl не видны символы acl_added_headers.

на сколько я понимаю, при сборке с поддержкой perl в таком случае
используется значение из CFLAGS_DYNAMIC

и получается, что при сборке с поддержкой dlfunc без поддержки зукд
нужно просто добавить -rdynamic в EXTRALIBS


 я год назад пытался найти зависимость от сборки с поддержкой и без
 поддержки perl и выводом сообщения об ошибке Undefined symbol
 acl_added_headers - безуспешно.
 
 
 В CentOS символ acl_added_headers виден глобально (второе поле - g):
 objdump -t /usr/sbin/exim|grep acl_added
 0812b05c g O .bss   0004  acl_added_headers
 
 В Debian, когда не работала exim-dlfunc.so этот символ был виден локально 
 (второе поле - l):
 objdump -t /usr/sbin/exim4.bad |grep acl_added
 081267ec l O .bss   0004  acl_added_headers
 
 Причём проверять надо бинарник без strip, иначе SYMBOL TABLE: no symbol 

ясно

 при этом strings `which exim` | grep acl_removed_headers выдавало пустую
 строку или acl_removed_headers?

 Сейчас strings `which exim` | grep acl_added_headers
 выдаёт acl_added_headers
 
 acl_removed_headers - я сейчас не патчил с этим функционалом. Вообще, он 
 нужен или можно без него нормально работать?

можно работать без него. просто я много использую удаление полей
заголовок в acl. делаю это с помощью патча, который когда-то
опубликовали в exim-dev, но который не включили в релиз.

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

 Так же заметил, что у Вас на сайте на главной странице ссылка 
 http://mta.org.ua/exim-4.76-conf/ (Паровоз (конфигуратор для exim 4.70 и 
 выше):) ведёт на http://mta.org.ua/exim-4.69-conf/.

поправил

 Аналогично и с другой ссылкой - Паровоз (конфигуратор для exim 4.67 и 
 выше):. Похоже из-за этого я взял файл kas3.c из 4.69.

поправил

на самом деле в самой dlfunc ничего не поменялось, кроме упрощения
сборки ее без учета использования патча для удаления полей заголовков в acl

 Спасибо Вам и Лене за помощь. И спасибо за kas3.c - наконец то получилось 
 прикрутить нормально kas к exim.

спасибо из пинок в сторону -rdynamic

а касперы потихоньку поворачиваются лицом к более функциональным методам
интеграции контент сканеров и антивирусов с exim.
в KAV 5.6 штатно включена их dlfunc.

среди нас тут есть тот, кто к этому руку приложил ощутимо. даже наверное
две :)

 При local_scan я не мог на этапе получения сообщения своими условиями 
 отвергнуть сообщение. Ну а метод интеграции с kas-pipe вообще не понравился.

поэтому я в свое время и стал испльзовать dlfunc.

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

-- 
Best wishes Victor Ustugov   mailto:vic...@corvax.kiev.ua
public GnuPG/PGP key:http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 77186900, 371808614 nic-handle: CRV-UANIC

___
Exim-users mailing list
Exim-users@mailground.net
http://mailground.net/mailman/listinfo/exim-users