diff --git a/CHANGES b/CHANGES index b9ee5d5..274b8e6 100644 --- a/CHANGES +++ b/CHANGES @@ -14,6 +14,10 @@ Corrections: corrected test IGNOREEOF. Thanks to Rusty Bird for the precise problem report. + Fixed the regression introduced with version 1.8.0.1 that in socks5 + addresses the explicit socksport (2nd address parameter) was ignored. + Thanks to Jakub FiĊĦer for reporting this bug. + Building: Disabling certain features during configure could break build process. diff --git a/doc/socat.yo b/doc/socat.yo index abfd991..2574a3f 100644 --- a/doc/socat.yo +++ b/doc/socat.yo @@ -1103,6 +1103,7 @@ label(ADDRESS_SOCKS4A)dit(bf(tt(SOCKS4A:<socks-server>:<host>:<port>))) Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET),link(IP4)(GROUP_IP4),link(IP6)(GROUP_IP6),link(TCP)(GROUP_TCP),link(SOCKS4)(GROUP_SOCKS),link(RETRY)(GROUP_RETRY) nl() label(ADDRESS_SOCKS5_CONNECT)dit(bf(tt(SOCKS5-CONNECT:<socks-server>:<socks-port>:<target-host>:<target-port>))) +dit(bf(tt(SOCKS5-CONNECT:<socks-server>:<target-host>:<target-port>))) Connects via <socks-server> [link(IP address)(TYPE_IP_ADDRESS)] to <target-host> [link(IPv4 address)(TYPE_IPV4_ADDRESS)] on <target-port> [link(TCP service)(TYPE_TCP_SERVICE)], @@ -1122,6 +1123,7 @@ label(ADDRESS_SOCKS5_CONNECT)dit(bf(tt(SOCKS5-CONNECT:<socks-server>:<socks-port link(TCP)(ADDRESS_TCP_CONNECT) label(ADDRESS_SOCKS5_LISTEN)dit(bf(tt(SOCKS5-LISTEN:<socks-server>:<socks-port>:<listen-host>:<listen-port>))) +dit(bf(tt(SOCKS5-LISTEN:<socks-server>:<listen-host>:<listen-port>))) Connects to <socks-server> [link(IP address)(TYPE_IP_ADDRESS)] using socks version 5 protocol over TCP and makes it listen for incoming connections on <listen-port> [link(TCP service)(TYPE_TCP_SERVICE)], binding to <-listen-host> [link(IPv4 address)(TYPE_IPV4_ADDRESS)] diff --git a/xio-socks.c b/xio-socks.c index 2e9c224..089fd27 100644 --- a/xio-socks.c +++ b/xio-socks.c @@ -239,7 +239,8 @@ int _xioopen_opt_socksport( { struct servent *se; - if (retropt_string(opts, OPT_SOCKSPORT, socksport) < 0) { + if (retropt_string(opts, OPT_SOCKSPORT, socksport) < 0 && + *socksport == NULL) { if ((se = getservbyname("socks", "tcp")) != NULL) { Debug1("\"socks/tcp\" resolves to %u", ntohs(se->s_port)); if ((*socksport = Malloc(6)) == NULL) { diff --git a/xio-socks5.c b/xio-socks5.c index 8543881..8d8ffc5 100644 --- a/xio-socks5.c +++ b/xio-socks5.c @@ -533,6 +533,7 @@ static int xioopen_socks5( target_name = argv[3]; target_port = argv[4]; } else { + socks_port = NULL; target_name = argv[2]; target_port = argv[3]; } @@ -548,6 +549,7 @@ static int xioopen_socks5( if (_xioopen_opt_socksport(opts, (char **)&socks_port) < 0) { return STAT_NORETRY; } + /*! possible memory leak */ result = _xioopen_ipapp_prepare(opts, &opts0, socks_server, socks_port, &pf, ipproto,