Как я собирал licq-1.0.3 с поддержкой socks5 и без поддержки openssl (дистрибутив Spring2001/Sisyphus - ALTLinux). Внимание: это просто описание моих действий, они не претендуют на какую-либо секьюрность или правильность. Просто у меня после них заработала licq через socks5-сервер (от http://www.socks.nec.com). В состав Spring2001 входит licq, собранная с поддержкой openssl и без поддержки socks5, вместе эти опции в предыдущих версиях не работали. Как в licq-1.0.3 - не знаю, я пока не использую openssl. Не забудьте удалить дистрибутивный licq перед плясками. Конечно, понадобятся исходники, берут их на http://www.licq.org. Также понадобятся заголовочные файлы от какой-нибудь реализации socks5 (об этом написано в licq-1.0.3/doc/README.SOCKS). Я воспользовался реализацией c http://www.socks.nec.com/reference/socks5.html. Для скачивания по ссылке Download SOCKS v5 Reference Implementation (http://www.socks.nec.com/cgi-bin/download.pl) придется заполнить форму, с указанием имени, фамилии, e-mail адреса и т.п., впрочем, подлинность не проверяется и URL для скачивания не высылается на e-mail, а доступен сразу. Также нужно скачать sigfix.h patch (http://www.socks.nec.com/patch/socks5-v1.0r11.patch1.txt). Есть еще реализация socks5, свободно доступная по http://www.inet.no/dante/ без каких-либо заполнений форм, но с ней мне не удалось собрать licq, также как и серверная ее часть в работе меня не устроила. Если кто-нибудь имеет опыт успешной работы/настройки dante - милости прошу. Также я не разбирался с лицензиями, если кто-то разобрался и поделится - будет здорово. Нужно пропатчить файл sigfix.h (я о реализации с socks.nec.com). Для этого нужно скопировать socks5-v1.0r11.patch1.txt в каталог socks5-v1.0r11/include, после чего дать команду patch -p0 < socks5-v1.0r11.patch1.txt Такой запарный способ у меня получился потому, что иначе patch ругался на missing header в патче. Теперь нужно внести поправки в файлы licq-1.0.3/src/main.cpp и licq-1.0.3/src/socket.cpp, как это описано в том же licq-1.0.3/doc/README.SOCKS. Эти поправки оформлены следующим патчем ---cut--- diff -c --context=3 -r licq-1.0.3/src/main.cpp licq-1.0.3-socks5/src/main.cpp *** licq-1.0.3/src/main.cpp Mon Feb 26 22:45:27 2001 --- licq-1.0.3-socks5/src/main.cpp Tue Jun 5 11:02:52 2001 *************** *** 10,15 **** --- 10,16 ---- #ifdef USE_SOCKS5 #define SOCKS + #define INCLUDE_PROTOTYPES extern "C" { #include } diff -c --context=3 -r licq-1.0.3/src/socket.cpp licq-1.0.3-socks5/src/socket.cpp *** licq-1.0.3/src/socket.cpp Tue Jan 30 01:43:58 2001 --- licq-1.0.3-socks5/src/socket.cpp Tue Jun 5 11:04:48 2001 *************** *** 1,6 **** --- 1,8 ---- // -*- c-basic-offset: 2 -*- /* Socket routine descriptions */ + #define SOCKS + #define INCLUDE_PROTOTYPES #ifdef HAVE_CONFIG_H #include "config.h" #endif *************** *** 290,296 **** bool INetSocket::SetLocalAddress(bool bIp) { // Setup the local structure ! socklen_t sizeofSockaddr = sizeof(struct sockaddr_in); if (getsockname(m_nDescriptor, (struct sockaddr *)&m_sLocalAddr, &sizeofSockaddr) < 0) { m_nErrorType = SOCK_ERROR_errno; --- 292,298 ---- bool INetSocket::SetLocalAddress(bool bIp) { // Setup the local structure ! int sizeofSockaddr = sizeof(struct sockaddr_in); if (getsockname(m_nDescriptor, (struct sockaddr *)&m_sLocalAddr, &sizeofSockaddr) < 0) { m_nErrorType = SOCK_ERROR_errno; *************** *** 506,512 **** *---------------------------------------------------------------------------*/ void TCPSocket::RecvConnection(TCPSocket &newSocket) { ! socklen_t sizeofSockaddr = sizeof(struct sockaddr_in); newSocket.m_nDescriptor = accept(m_nDescriptor, (struct sockaddr *)&newSocket.m_sRemoteAddr, &sizeofSockaddr); newSocket.SetLocalAddress(); } --- 508,514 ---- *---------------------------------------------------------------------------*/ void TCPSocket::RecvConnection(TCPSocket &newSocket) { ! int sizeofSockaddr = sizeof(struct sockaddr_in); newSocket.m_nDescriptor = accept(m_nDescriptor, (struct sockaddr *)&newSocket.m_sRemoteAddr, &sizeofSockaddr); newSocket.SetLocalAddress(); } ---cut--- Можно скопировать этот текст в отдельный файл (рядом с licq-1.0.3) и запустить patch -p0 < filename.patch После всего нужно собрать licq, в каталоге licq-1.0.3 ./configure --prefix=/usr --enable-socks5 \ --with-socks5-inc=where/is/socks5/include \ --disable-openssl --enable-shared если после всех сообщений будут сообщения, что SOCKS5 support is enabled OpenSSL support is not avaible то можно запускать make если пройдет нормально, то su make install После этого нужно собрать какой-нибудь plugin, я пользуюсь Qt-gui. Для сборки точно понадобятся пакеты XFree86-devel, qt2-devel. В каталоге licq-1.0.3/plugins/qt-gui-1.0.3: ./configure --prefix=/usr make su make install В update-alternatives у меня выбран gcc-2.96, но, по-моему, это не принципиально. Запускать licq через socks5-сервер нужно с помощью скриптов runsocks (из реализации socks.nec.com) runsocks licq или socksify (из реализации dante) Про установку socks.nec.com помню только, что нужен ncurses-devel, хотя configure без него не ругается, только make. Кстати, желающие описать процесс установки принимаются в список рассылки howto (www.altlinux.ru) с распростертыми объятиями :) В /etc/libsocks5.conf (для socks.nec.com) должны быть указаны параметры для socks5-приложений, например socks5 - - - - ip_or_name_socks_server[:port] Соответственно, должен быть настроен socks5 сервер. В настройках licq (~/.licq/licq.conf) пришлось указать ip сервера icq.mirabilis.com, разрешение имени не проходило. Возможно, для успешной сборки понадобится установить недостающие пакеты *-devel Все поправки и критика принимаются в списке рассылки howto (www.altlinux.ru). Regards, Vyt