[devel] proftpd: сегфолт при работе с модулями (mod_sql_mysql в частности)

Dmitry Afanasov =?iso-8859-1?q?afanasovdmitry_=CE=C1_gmail=2Ecom?=
Чт Сен 25 19:06:13 MSD 2008


грыз я proftpd на предмет какой libltdl он будет юзать - системный или
свой, слинкованный статикой. и налетел на интересное поведение:

настройки /etc/proftpd.conf
-----
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

SQLAuthenticate on
SQLAuthTypes plaintext
SQLBackend mysql
SQLConnectInfo ftp user
-----
работает недостаточно полно, но для testcase'а сойдет.

что наблюдается:
1. коментим mod_sql.c
# LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

proftpd орет undefined symbol: sql_register_backend. что логично, так
как этот символ находится в mod_sql.c

2. коментим mod_sql_mysql.c
LoadModule mod_sql.c
# LoadModule mod_sql_mysql.c
ребёнок proftpd валится с Segmentation fault.

что показывает gdb:
0xb7fcb310 in _sql_dispatch (cmd=0x81581dc, cmdname=0xb7fdb2c8
"sql_identify") at mod_sql.c:398
398	  for (i = 0; sql_cmdtable[i].command; i++) {

просмотр показывает, что тут sql_cmdtable == NULL

на этом месте падает и в 1.3.2rc1 и текущим сизифным 1.3.2rc2.
отличия rc1 от rc2 - если rc1 подает молча, то rc2 начинает срать в
лог до тех пор, пока его не убьют.

3. расскоментированы все.
тут всё работает.

ошибка наблюдается в независимости от вида взаимодействия с libltdl -
статика там или динамика. завтра постараюсь уточнить.

вот я сижу и думаю - что со всем этим делать. не патчить же на предмет
ругани mod_sql, если у него нет ни одного бакенда. либо крутить
handler SQLBackend на предмет dso_module_load.
а лучше всего разобраться с mainstream, но тут мне поддержка
переводчиков нужна будет :)

в общем, я даже не знаю.

lakostis: не та ли это ошибка, о которой ты говорил?

-- 
С уважением
Афанасов Дмитрий


Подробная информация о списке рассылки Devel