Начиная с версии 2.3 Sarg умеет искать информацию о пользователях в сетевом справочнике LDAP:
Jun-21-2010 Version 2.3
- LDAP usertab added.
Now you can have your users in a LDAP Server.
Use these tags in sarg.conf: LDAPHost, LDAPPort, LDAPBindDN, LDAPBindPW, LDAPBaseSearch, LDAPFilterSearch
Но такая замечательная функция переставет работать в том случае, когда журналы прокси-сервера содержат очень много записей: в процессе работы Sarg падает с ошибкой:
LDAP search failed: Can't contact LDAP server
Почему так получается и как работает этот LDAP usertab ? В log.c:main после определения всех переменных и разбора параметров чуть ли не самым первым реальным действием можно увидеть вызов:
init_usertab(UserTabFile);
Для для usertab=ldap это означает вызов ldap_init/ldap_simple_bind_s в usertab.c, т.е. соединение с LDAP сервером, после которого начинается вся работа с журналами. Если журналы содержат много данных, их обработка может занять достаточно длительное время и соединения с сервером может отвалиться по таймауту
. Завершив аггрегацию журналов, Sarg начинает искать для каждого пользователя его ФИО при помощи usertab.c:get_ldap_name. Вот тут-то он и получает ошибку:
LDAP search failed: Can't contact LDAP server
Исправить ошибку просто - необходимо устанавливать соединение с LDAP сервером после обработки журналов:
--- sarg-2.3.1/log.c 2010-09-15 14:57:30.000000000 +0400
+++ sarg-2.3.1.new/log.c 2011-07-19 16:53:58.000000000 +0400
@@ -745,8 +746,6 @@
}
#endif
- init_usertab(UserTabFile);
-
if ((line=longline_create())==NULL) {
debuga(_("Not enough memory to read a log file\n"));
exit(EXIT_FAILURE);
@@ -1663,6 +1666,8 @@
sort_users_log(tmp, debug);
+ init_usertab(UserTabFile);
+
if(DataFile[0] != '\0')
data_file(tmp);
else
Наверное разработчики не тестировали свой продукт на больших объемах данных ;-(