пятница, 9 ноября 2012 г.

NTLM (mod_ntlm) for Solaris 10

Описана устанока и конфигурирование для Solaris 10 x86. Есть ссылки на собранный модуль.
NTLM (mod_ntlm) for Solaris 10 

Замечание1: по ссылке собранный модуль не работает (seg.fault) с apache2 из поставки solaris. Похоже, из-за того, что собран gcc.

Замечание2: для сборки в этом случае нужен пакет SUNWspro. Собранный модуль находится в каталоге .libs. В apache2/libexec его оттуда лучше перенести руками.

Замечание3: в конфиге для DS надо указывать имя, а не IP адрес. Например: NTLMServer r01gui1

И самое гадкое: проблема с SMB_Logon_Server: SMB_SessSetupAndX failed; errorclass = 1, Error Code = 5\n при частом обновлении страницы, которую, похоже, никто не исследовал.

А она, оказывается, связана с тем, что в mod_ntlm.c:ntlm_check_response() (строчка примерно 600) есть проверка:
if (ntlm_connection->auth_ok && ntlm_connection->user) {
/* user has already valid credentials */
if ((!strcmp(ntlm_connection->user, ntlmssp->user))
&& (!strcmp(ntlm_connection->domain, ntlmssp->domain))
&& (!memcmp(ntlm_connection->password, ntlmssp->nt, RESP_LEN))) {
log(r, APLOG_INFO, “silent reauthentication”);
/* silently accept login with same credentials */
r->user = apr_pstrdup(r->connection->pool, ntlm_connection->user);
r->ap_auth_type = apr_pstrdup(r->connection->pool, NTLM_AUTH_NAME);
return OK;
}
В (!memcmp(ntlm_connection->password, ntlmssp->nt, RESP_LEN)) password и nt содержат разные значения. Как workaround я закомментарил эту проверку на совпадение пароля. После этого все стало хорошо.

Еще один момент: в httpd.conf параметр KeepAlive OnНапример, в rhel6 он по-молчанию Off, и аутентификация не работает.
Это описано в :
http://www.tune-it.ru/web/tiamat/home/-/blogs/27671;jsessionid=91c6c25fe1cdaff0156df869f5e3  <- keepalive