Version: (using KDE KDE 3.3.91) Installed from: Compiled From Sources Compiler: gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3) OS: Linux I am using kopete from the kde3.4-beta1 release (compiled from konstruct). I need to get kopete to work with the SOCKS proxy that I have. I am running Fedora Core 3, and have installed the dante client. I am using "ssh -D" to be my SOCKS server, as shown on this page: http://www.spinics.net/lists/kde/msg01883.html My /etc/socks.conf is this: -------------------- debug: 1 logoutput: /tmp/dante.out route { from: 0.0.0.0/0 to: 0.0.0.0/0 via: 127.0.0.1 port = 11080 proxyprotocol: socks_v4 } route { from: 0.0.0.0/0 to: . via: 127.0.0.1 port = 11080 proxyprotocol: socks_v4 } -------------------- And my ssh command is this: ssh -v -f -N -D 11080 user@host Both gaim and firefox work correctly with the SOCKS proxy in this way. Also, konqueror works correctly with this setup. When I run konqueror and have it use my SOCKS proxy, I see this from ssh's debug (-v) output: ebug1: Connection to port 11080 forwarding to socks port 0 requested. debug1: channel 1: new [dynamic-tcpip] debug1: Connection to port 11080 forwarding to socks port 0 requested. debug1: channel 2: new [dynamic-tcpip] debug1: Connection to port 11080 forwarding to socks port 0 requested. debug1: channel 3: new [dynamic-tcpip] debug1: channel 2: free: direct-tcpip: listening port 11080 for 64.233.187.104 port 443, connect from 127.0.0.1 port 37325, nchannels 4 debug1: channel 3: free: direct-tcpip: listening port 11080 for 64.233.171.105 port 443, connect from 127.0.0.1 port 37326, nchannels 3 debug1: channel 1: free: direct-tcpip: listening port 11080 for 64.233.171.107 port 80, connect from 127.0.0.1 port 37324, nchannels 2 And, as I said, the page actually does come up correctly. And I see this in both kopete's command line output as well as konqueror's output: kdecore (KSocks): Found Dante SOCKS kdecore (KSocks): SOCKS has been activated! When I run kopete and ask it to connect to my MSN account (though it does this for AIM and ICQ also), here's what I see from my ssh debug: debug1: Connection to port 11080 forwarding to socks port 0 requested. debug1: channel 1: new [dynamic-tcpip] That's it. And, while kopete keeps trying to connect to MSN, I see this in dante's output: Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 Jan 27 11:09:59 KDE[16533]: Rconnect(): 207.46.104.20.1863 ... over and over and over again. And kopete is never able to connect to MSN (or AIM or ICQ). Since Konqueror is able to use my SOCKS firewall, as is firefox, it seems that the bug is somewhere in kopete. What else can I give that would be helpful? Thanks!!!
This seems to be a regression the functionality of the KNetwork classes vs. KExtendedSocket. Protocols that use KNetwork classes won't connect via proxy. Protocols that use KExtendedSocket should work via proxy. (except IRC, but that's another problem, i'm sure)
I'm hoping some of this helps... After talking with mattr in #kopete, I've discovered that the ONLY kopete account that I can log into via the SOCKS proxy is a yahoo account. In addition, I've just used gaim to connect via the SOCKS proxy and it worked fine, using a SOCKS4 setting, and this is what I see from ssh's debug.... debug1: channel 4: free: direct-tcpip: listening port 11080 for 207.46.106.142 port 1863, connect from 127.0.0.1 port 37432, nchannels 5 debug1: Connection to port 11080 forwarding to socks port 0 requested. debug1: channel 1: new [dynamic-tcpip] debug1: Connection to port 11080 forwarding to socks port 0 requested. debug1: channel 4: new [dynamic-tcpip] debug1: channel 1: free: direct-tcpip: listening port 11080 for 207.46.104.20 port 1863, connect from 127.0.0.1 port 37436, nchannels 6 debug1: Connection to port 11080 forwarding to socks port 0 requested. debug1: channel 1: new [dynamic-tcpip] debug1: Connection to port 11080 forwarding to socks port 0 requested. debug1: channel 6: new [dynamic-tcpip] debug1: channel 1: free: direct-tcpip: listening port 11080 for 65.54.179.228 port 443, connect from 127.0.0.1 port 37438, nchannels 7 debug1: Connection to port 11080 forwarding to socks port 0 requested. debug1: channel 1: new [dynamic-tcpip] debug1: channel 6: free: direct-tcpip: listening port 11080 for 65.54.179.192 port 443, connect from 127.0.0.1 port 37439, nchannels 7 debug1: channel 1: free: direct-tcpip: listening port 11080 for 65.54.179.198 port 443, connect from 127.0.0.1 port 37441, nchannels 6 Hope this helps you guys fix this!! =:)
*** Bug 88766 has been marked as a duplicate of this bug. ***
We got report of same problem in Konversation. Looks like a KNetwork problem. Thiago is there a chance of fixing this before 3.4?
I hope to! Unfortunately, I have no working SOCKS proxy, no SOCKS client libraries installed and it's been three years since I've looked at SOCKS code. For KDE4, I hope to get rid of KSocks dependency on SOCKS client libraries and, instead, write our own SOCKS client code, much as has been done for the HTTP proxy support.
Thiago - if you want a SOCKS proxy to test this on, I am sure I can run one for you on my PC here (it is up 24/7). Ping me in private mail if you want me to set one up.
I was just going to add... The easiest way to do this is to simply install the dante client libraries (rpms are pretty readily available, iirc) and run the SSH command that I have shown above. SSH can act as a SOCKS4/5 proxy, which means that you don't actually have to set up a SOCKS server--all you have to do is have an SSH tunnel and that will be your SOCKS4/5 proxy server too (ssh -D). Please forgive if this is stating the obvious. =:)
Raising severity even more.
Sorry, debugging indicates nothing wrong in KDE code. So far, I'm leaning on libdsocks bug. I'll continue investigating.
Indeed it's a bug in Dante, but it's one we already had workarounds for.
CVS commit by thiago: Adding workaround for the Dante bug with asynchronous connection. This will make a *synchronous* connection every time Dante is used. So, too bad if you're using Dante, your KDE application will freeze its UI whenever a socket connects. For KDE4, I plan to write the SOCKS protocol myself and avoid this kind of problems. To be backported. BUG:98018 M +17 -1 ksockssocketdevice.cpp 1.7 --- kdelibs/kdecore/network/ksockssocketdevice.cpp #1.6:1.7 @@ -119,5 +119,21 @@ bool KSocksSocketDevice::connect(const K return false; // failed creating! - if (KSocks::self()->connect(m_sockfd, address.address(), address.length()) == -1) + int retval; + if (KSocks::self()->hasWorkingAsyncConnect()) + retval = KSocks::self()->connect(m_sockfd, address.address(), + address.length()); + else + { + // work around some SOCKS implementation bugs + // we will do a *synchronous* connection here! + // FIXME: KDE4, write a proper SOCKS implementation + bool isBlocking = blocking(); + setBlocking(true); + retval = KSocks::self()->connect(m_sockfd, address.address(), + address.length()); + setBlocking(isBlocking); + } + + if (retval == -1) { if (errno == EISCONN)
Hi Thiago, Thanks so much for looking into this. > Adding workaround for the Dante bug with asynchronous connection. Cool. All working for me in Kopete and Konversation. :o) Have you reported upstream? > This will make a *synchronous* connection every time Dante is used. No big deal, I didn't notice any difference from a normal connect. Thanks again, Martin
I'm not really sure. It was Waldo Bastian who first found the bug, not me. I'm not sure if he reported it upstream.
CVS commit by thiago: (Backport 1.6:1.7) Backporting the fix to KDE 3.4.x. Sorry, this didn't make into 3.4.0. CCBUG:98018 M +17 -1 ksockssocketdevice.cpp 1.6.2.1 --- kdelibs/kdecore/network/ksockssocketdevice.cpp #1.6:1.6.2.1 @@ -119,5 +119,21 @@ bool KSocksSocketDevice::connect(const K return false; // failed creating! - if (KSocks::self()->connect(m_sockfd, address.address(), address.length()) == -1) + int retval; + if (KSocks::self()->hasWorkingAsyncConnect()) + retval = KSocks::self()->connect(m_sockfd, address.address(), + address.length()); + else + { + // work around some SOCKS implementation bugs + // we will do a *synchronous* connection here! + // FIXME: KDE4, write a proper SOCKS implementation + bool isBlocking = blocking(); + setBlocking(true); + retval = KSocks::self()->connect(m_sockfd, address.address(), + address.length()); + setBlocking(isBlocking); + } + + if (retval == -1) { if (errno == EISCONN)
*** Bug 88215 has been marked as a duplicate of this bug. ***