[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