Методом тыка понял, кто виновник: это опция (к ней нет никаких комментарев в 
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   00000004              acl_added_headers

В Debian, когда не работала exim-dlfunc.so этот символ был виден локально 
(второе поле - l):
objdump -t /usr/sbin/exim4.bad |grep acl_added
081267ec l     O .bss   00000004              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
[email protected]
http://mailground.net/mailman/listinfo/exim-users

Ответить