You are viewing [info]p0six's journal

p0six
21 December 2009 @ 08:18 pm
Был один интересный проект по созданию маршрутизатора на основе debian. Основная идея в том, что система загружается с flash-носителя и работает полностью в оперативной памяти. Такой системе совершенно не страшны перебои питания, т.к. отсутствует жёсткий диск, который может накрыться при сбое. Если требуется сохранить изменения конфигурации, используется простой скрипт, который временно монтирует flash-накопитель и rsync'ом синхронизирует содержимое фс в памяти с диском. Ну и главное преимущество для администратора - доступ к огромной базе программ стабильного репозитория debian (и их обновлений), которое можно использовать на этом роутере. Выбор железа для подобных маршрутизаторов огромен (например advantech) и не ограничивается только платформой x86.
Сайт проекта: http://gate-bunker.p6.msu.ru/~berk/ (зеркало?: http://bart.tm-net.ru/mirrors/gate-bunker.p6.msu.ru/~berk/router.html )

Основной сайт по видимости перестал работать (на момент поста). Судя по всему проект перестал развиваться и последним был выложен экспериментальный тарбол на основе debian Etch. Проект просто отличный и думаю было бы жалко если бы он оказался заброшен. Для своих задач мне потребовался роутер на основе текущего стабильного дистрибутива debian lenny.

Вот что получилось )
 
 
p0six
Обновлённый плагин к Djabberd для ntlm-авторизации.
Изменения:
* исправления в соответствии с изменениями в API DJabberd-SASL (r864)
* исправлена проблема "зависания" ntlm-хелпера при высокой загрузке
Tags:
 
 
p0six
01 December 2009 @ 09:26 pm
29 ноября вышла новая версия pidgin 2.6.4. Смотреть changelog
В этой версии после двух лет был частично пофикшен баг 2910. Т.о. теперь pidgin может авторизоваться на прокси с использованием NTLM.

upd. оказывается наоборот, авторизация была сломана совсем... думаю в 2.6.5 зафиксят регресс.

upd2. Обновлена сборка с ntlm-патчами pidgin-2.6.4-ntlm.exe (MD5SUM: 45b8627f1d5393005d732676b376e1cc)
Патчи:
* pidgin-2.6.4-ntlmsspi.patch
* pidgin-2.6.4-ntlmauth.patch
* pidgin-2.6.4-ntlmproxy.patch
Tags:
 
 
p0six
Патч для ntlm-аутентификации на xmpp-сервере обновлён.
Два основных изменения:

  • теперь возможна ntlm-аутентификация и в сборке pidgin под linux

  • в win32-сборке если имя пользователя, указанного в настройках соединения (вида DOMAIN\user) совпадает со значением соответствующих переменных окружения %UserDomain% %UserName% (т.е. соответствуют пользователю, под которым запущен pidgin), то в этом случае используется прозрачная ntlm-аутентификация (пароль не требуется). Если не совпадают, то в этом случае используются имя пользователя и пароль введённый в настройках соединения.


Последнее изменение позволяет, во-первых, подключаться к джаббер-серверу с компьютера/учётки не входящий в AD-домен, а во-вторых, подключаться к джаббер-серверу под другой учёткой, отличной от той, с которой залогинились в данный момент в систему.

win32:
pidgin-2.5.5-ntlm.exe (MD5SUM)

ubuntu intrepid 64-bit (как правило нужны только deb'ы отмеченные значком '+'):
finch_2.5.2
finch-dev_2.5.2
+ libpurple0_2.5.2
libpurple-bin_2.5.2
libpurple-dev_2.5.2
+ pidgin_2.5.2
+ pidgin-data_2.5.2
pidgin-dbg_2.5.2
pidgin-dev_2.5.2
Tags: ,
 
 
p0six
На днях на глаза попался djabberd ( http://www.danga.com/djabberd ) - реализация высокопроизводительного расширяемого xmpp-сервера, который, кстати, используется в сервисе ljtalk. Проект заинтересовал прежде всего тем, что это не просто yet another реализация велосипеда, а настоящий конструктор для сборки произвольных велосипедов с люльками, стерео-магнитолами на дизельной тяге с аэродинамическими формами. Естественно руки просто зачесались сделать свой сервер с нужным мне функционалом.
Меня прежде всего интересовала возможность интеграции сервиса IM с AD и возможность прозрачной ntlm-авторизации для клиентов. На сколько мне известно поддержка ntlm-авторизации есть в openfire, но она работает только на платформе M$. Но как организовать подобное на linux? На linux есть winbind, который поддерживает серверный вариант протокола ntlm v2. Для авторизации можно использовать утилиту ntlm_auth (как например делается в прокси-сервере squid для ntlm-авторизцации на прокси или модуле для apache mod_auth_ntlm_winbind).
Ок, с сервером вроде бы всё ясно, но вот с IM-клиентами, поддерживающими ntlm-авторизацию не всё так хорошо, по крайне мере ни один из opensource пейджеров не умеет ntlm. Написал патч для pidgin'а, но, к сожалению, есть регресс: поскольку реализовывать поддержку ntlm надо было в cyrus-sasl, а этим заниматься категорически не хотелось, поэтому сборка делается без cyrus-sasl и поддерживаются только три механизма: digest-md5, plain ну и заветный ntlm.


плагин Djabberd-SASL-NTLM. ( http://xrt.no-ip.org/pidgin/DJabberd-SASL-NTLM.tar.gz )
Пока это просто хак, "который просто работает" (C). В конфигурацию djabberd добавляется такие строки:

<Plugin DJabberd::SASL::NTLM>
Optional yes
NTLMAuthHelper /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
</Plugin>

После чего xmpp-сервер будет анонсировать наличие механизма NTLM для SASL-авторизации. Это также требует настроенного winbind на сервере и чтобы пользователь, под которым запускается xmpp-сервер, входил в группу winbind_privileged.


Набор патчей для Pidgin 2.5.5 для ntlm-авторизации (только для win32):

* pidgin-2.5.5-ntlmsspi.patch ( http://xrt.no-ip.org/pidgin/pidgin-2.5.5-ntlmsspi.patch ) - общая поддержка механизма прозрачной ntlm-авторизации (нужен для обоих последующих патчей)
* pidgin-2.5.5-ntlmauth.patch ( http://xrt.no-ip.org/pidgin/pidgin-2.5.5-ntlmauth.patch ) - ntlm-авторизация на xmpp-сервере
* pidgin-2.5.5-ntlmproxy.patch ( http://xrt.no-ip.org/pidgin/pidgin-2.5.5-ntlmproxy.patch ) - ntlm-авторизация на прокси-сервере

Т.о. если требуется настроить в Pidgin прозрачную ntlm-авторизацию на xmpp-сервере, то в настройках соединения указываются *произвольные* логин и пароль (просто иначе кнопка создать учётку будет неактивна). При авторизации будут использоваться учётные данные с которым пользователь вошёл в систему (вида domain\user )

Третий патч нужен если требуется выход через корпоративный прокси (какой протокол ICQ, Jabber, MSN... не важен), требующий ntlm-авторизацию. В настройках соединения указывается тип прокси "использовать настройки окружения".


Для тех кому лень собирать самому в cygwin'е, есть готовая сборка pidgin:
pidgin-2.5.5 (все патчи): http://xrt.no-ip.org/pidgin/pidgin-2.5.5-ntlm.exe
md5sum: http://xrt.no-ip.org/pidgin/pidgin-2.5.5-ntlm.exe.md5sum
 
 
p0six
13 December 2007 @ 08:17 am
Вышел pidgin 2.3.1.
Обновил патч для поддержки в pidgin прозрачной ntlm-авторизации на прокси на win32 плафтормах (basic схема авторизации отключена). Выложил пока на рапидшару..

Сам патч (pidgin-2.3.1-win32sspi.patch): http://www.rapidshare.ru/501009
win32 инсталлер (pidgin-2.3.1-ntlmsspi.exe): http://www.rapidshare.ru/501017
Tags:
 
 
p0six
11 October 2007 @ 09:28 pm
После прикручивания патча к pidgin для прозрачной ntlm авторизации на прокси, у некоторых с ним возникли проблемы. Подземный стук выражался в том, что pidgin выдавал ошибку "Unable to parse response from HTTP proxy", причём через некторое время соединение могло всё-таки состоятся.

Посмотрев дампы сетевых сессий и исходный код proxy.c libpurple, обнаружил кривой костыль в коде. Дело в том, что вроде бы код написан для асинхронной работы с сокетом (по приходу данных, запускается callback-функция, обрабатывающая приходящие данные), но в случае если ответ прокси превышает максимальный размер пакета (в данном случае ethernet-кадр ~1500 с хвостиком), то оставшийся кусок http-ответа приходит в следующем пакете (а значит вызовет ещё один вызов callback-функции). Чтобы обойти эту сложность (надо сохранить состояние, etc), в callback запедалили вот такой цикл, дочитывающий остаток (посимвольно!):

while (len--) {
    /* TODO: deal with EAGAIN (and other errors) better */
    if (read(connect_data->fd, &tmpc, 1) < 0 && errno != EAGAIN)
        break;
}

Этот костыль мог сработать, а мог и не сработать, что и выражалось в странном поведении pidgin'а.
По уму бы сделать и корректно дочитать данные в следующем вызове callback, а тут такое...