Персональные инструменты
 

SASL, SVN, Mercurial и Bazaar

Материал из CustisWiki

Версия от 13:26, 20 июля 2011; StasFomin (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск

Те, кто предпочитают использовать SVN через встроенный легковесный сервер Svnserve (вместо Apache и mod_dav_svn), вместе с интегрированной Windows-доменной авторизацией через SASL, могут столкнутся с странной ошибкой.

  • В command-line клиенте SVN, дистрибутив от CollabNet (с дистрибутивом SlikSVN все ОК)
 svn: Cannot negotiate authentication mechanism

или что-то типа

subvertpy.SubversionException: ('Cannot negotiate authentication mechanism', 210007)
  • в Bazaar, который умеет работать с SVN-репозитариями, используя subvertpy.
  • в Mercurial, который может работать с SVN, используя дополнение hgsubversion, которое, в свою очередь, использует SWIG-биндинги WinSVN или тот же subvertpy.

Причина — самодурство библиотеки SASL (вернее ее конкретной, самой распространенной сборки), и неполный набор DLL-ей для SVN.

Итак, чтобы «починить» CollabNet-oвский клиент, нужно залить в него все SASL-DLLи (разумеетяся, соответствующей «битности»), полный набор которых, кстати, есть в дистрибутиве TortoiseSVN (от того же CollabNet), обычно отсутствуют последние две:

saslANONYMOUS.dll
saslCRAMMD5.dll
saslDIGESTMD5.dll
saslNTLM.dll
saslLOGIN.dll
saslPLAIN.dll

Затем, убедиться, что в реестре следующим образом прописаны пути к этим библиотекам (первый путь ищется под 32 битами, второй — под 64).:

Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library]
"SearchPath"="C:\\Program Files\\TortoiseSVN\\bin"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Carnegie Mellon\Project Cyrus\SASL Library]
"SearchPath"="C:\\Program Files\\TortoiseSVN\\bin"

Важный момент — пути прописывать без завершающего слеша! Библиотеке конечно позор — и за это, и за использование реестра (никаких portable-сборок), и за «Carnegie Mellon».

В случае с Bazaar — залить все эти библиотеки в папку lib дистрибутива, и тоже самое с реестром.

Mercurial у меня питоновский, по крайней мере расширение hgsubversion все равно требует Python с установленными SVN-биндингами, так что там, проще ставить subvertpy (хоть easy_install-ом), а потом перегрузить в папку с subvertpy все DLLи из «полного» CollabNet-дистрибутива (т.е. дополненного тортилловыми SASL-библиотеками), и опять таки вправить мозги реестру.



За решение проблемы благодарность procmon-у от Руссиновича, без которого, наверное, уже точно давно был виндекапец и все сидели под Linuxом, где таких проблем нет (с виндовой доменной авторизацией), и мне бы не пришлось выслушивать издевательства от рядом сидящего линуксоида.

Если кто-то готов посоветовать лучшее решение (можно ли пересадить в Python 2.7 SVN библиотеки от SlikSVN, в общем, чтобы не было завязок на реестр) — посоветуйте.