[samba] В модуле passdb/pdb_ldap.c не правильно инициализируются функции модуля lib/smbldap.c
Слава
slava-iv на yandex.ru
Чт Июл 28 06:23:00 MSD 2005
Использую FreeBSD 5.4-STABLE, samba-3.0.14a, openldap- 2.2.26.
Демон smbd в момент старта использует модуль lib/smbldap.c. Демон smbd
устанавливает соединение с демоном slapd. В модуле passdb/pdb_ldap.c не
правильно инициализируются функции модуля lib/smbldap.c. Не создается цикл с
вызовом функции lib/smbldap.c:smbldap_idle_fn. Происходит ошибка.
Запускаю ldap сервер:
# ps ax|grep slapd
532 ?? Ss 0:00,17 /usr/local/libexec/slapd -u ldap -g ldap
Запускаю samba сервер:
# ps ax|grep smbd
1404 ?? Ss 0:00,01 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
1406 ?? S 0:00,00 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
# ps ax|grep nmbd
1398 ?? Ss 0:00,04 /usr/local/sbin/nmbd -D -s /usr/local/etc/smb.conf
Вижу:
# sockstat |grep smbd
root smbd 1406 6 tcp4 127.0.0.1:60917 127.0.0.1:389
root smbd 1406 7 tcp4 127.0.0.1:56835 127.0.0.1:389
root smbd 1404 6 tcp4 127.0.0.1:60917 127.0.0.1:389
root smbd 1404 7 tcp4 127.0.0.1:56835 127.0.0.1:389
root smbd 1404 21 tcp4 *:445 *:*
root smbd 1404 22 tcp4 *:139 *:*
Последовательно выполняются функции:
passdb/pdb_ldap.c:pdb_init_ldapsam_common,
lib/smbldap.c:smbldap_init,
lib/module.c:smb_register_idle_event (происходит регистрация функции
smbldap_idle_fn),
lib/smbldap.c:another_ldap_try,
lib/smbldap.c:smbldap_close,
lib/smbldap.c:smbldap_delete_state,
lib/smbldap.c:another_ldap_try,
lib/smbldap.c:smbldap_open, т.е. создается соединение с демоном slapd:
root smbd 1406 6 tcp4 127.0.0.1:60917 127.0.0.1:389
root smbd 1406 7 tcp4 127.0.0.1:56835 127.0.0.1:389
root smbd 1404 6 tcp4 127.0.0.1:60917 127.0.0.1:389
root smbd 1404 7 tcp4 127.0.0.1:56835 127.0.0.1:389
Однако, цикл с вызовом функции lib/module.c:smb_run_idle_events не запущен.
Поэтому функция smbldap_idle_fn не выполняется и соединения демона smbd с
демоном slapd остаются не закрытыми.
Выполняю:
mount_smbfs //andy на temp/user /mnt
umount /mnt
Последовательно выполняются функции:
smbd/server.c:main,
smbd/process.c:smbd_process,
создается цикл, выполняется lib/module.c:smb_run_idle_events,
создестся цикл, выполняется lib/smbldap.c:smbldap_idle_fn
state->last_use + SMBLDAP_IDLE_TIME < now
выполняется функция:
lib/smbldap.c:smbldap_close
и т.д.
Повторяю:
mount_smbfs //user на temp/user /mnt
mount_smbfs: unable to open connection: syserr = Operation timed out
Через некоторое время:
# mount_smbfs //andy на temp/user /mnt
mount_smbfs: unable to open connection: syserr = Connection reset by peer
Последовательно выполняются функции:
smbd/server.c:main,
smbd/process.c:smbd_process,
создается цикл, выполняется lib/module.c:smb_run_idle_events,
создестся цикл, выполняется lib/smbldap.c:smbldap_idle_fn
state->last_use + SMBLDAP_IDLE_TIME < now
выполняется функция:
lib/smbldap.c:smbldap_close,
работа процесса прекращается.
Подробная информация о списке рассылки Samba