-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
hi.
This patch makes `user-proof' the SOCKS5 configure options.
The cvs behaviour is to trust in the directories that the user enter with
- --with-socks-inc and --with-socks-lib.
Also, it checks the type of the getsockopt's optlen
- --
Buenos Aires, Argentina
-----BEGIN PGP SIGNATURE-----
iD8DBQE+ATGjUMlRieHkprgRAlU8AJ9qkIx9RpweOUkFqoB28WSqDhgAQACcCV/Y
3GafDLcCXcwB7KQzE6bj7wQ=
=GMqq
-----END PGP SIGNATURE-----
Index: acinclude.m4.in
===================================================================
RCS file: /cvsroot/licq/licq/acinclude.m4.in,v
retrieving revision 1.18
diff -u -d -p -r1.18 acinclude.m4.in
--- acinclude.m4.in 3 Dec 2002 06:29:41 -0000 1.18
+++ acinclude.m4.in 19 Dec 2002 02:17:37 -0000
@@ -10,7 +10,7 @@ AC_DEFUN(AC_CHECK_SOCKS5,
SOCKS_LIBS=""
SOCKS_LIBDIR=""
SOCKS_INCDIR=""
-
+
AC_ARG_ENABLE(
socks5,
[ --enable-socks5 enable SOCKS5 firewall support],
@@ -30,33 +30,83 @@ AC_DEFUN(AC_CHECK_SOCKS5,
AC_MSG_RESULT(no)
else
AC_MSG_RESULT(yes)
+ WITH_SOCKS5="no"
- if test "$socks_libdir" = "no"; then
- SOCKS_LIBS=""
- AC_CHECK_LIB(socks5, SOCKSinit, SOCKS_LIBS="-lsocks5")
- if test -z "$SOCKS_LIBS"; then
- AC_CHECK_LIB(socks, SOCKSinit, SOCKS_LIBS="-lsocks")
- fi
- else
- AC_MSG_CHECKING(where to look for the SOCKS5 library)
- SOCKS_LIBS="-lsocks5"
- SOCKS_LIBDIR="-L$socks_libdir"
- AC_MSG_RESULT($socks_libdir)
+ dnl Init
+ if test "$socks_libdir" != "no"; then
+ BACKUP_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -L$socks_libdir"
+ fi
+ if test "$socks_incdir" != "no"; then
+ BACKUP_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -I$socks_incdir"
+ fi
+
+ SOCKS_LIBS=""
+ SOCKS_INCDIR=""
+
+ licq_socks_optlen=unknown
+
+ AC_CHECK_LIB(socks5, SOCKSinit, SOCKS_LIBS="-lsocks5")
+ if test -z "$SOCKS_LIBS"; then
+ AC_CHECK_LIB(socks, SOCKSinit, SOCKS_LIBS="-lsocks")
fi
- if test "$socks_incdir" = "no"; then
- AC_CHECK_HEADER(socks.h)
- SOCKS_INCDIR="-Wno-implicit"
- else
- AC_MSG_CHECKING(where to look for the SOCKS5 headers)
- SOCKS_INCDIR="-I$socks_incdir -Wno-implicit"
- AC_MSG_RESULT($socks_incdir)
+ if test -n "$SOCKS_LIBS"; then
+ SOCKS_LIBS="-lsocks5"
+ if test "$socks_libdir" != "no"; then
+ SOCKS_LIBDIR="-L$socks_libdir"
+ fi
+ AC_CHECK_HEADER(socks.h,
+ [if test "$socks_incdir" == "no"; then
+ SOCKS_INCDIR="-Wno-implicit"
+ else
+ SOCKS_INCDIR="-I$socks_incdir -Wno-implicit"
+ fi
+ WITH_SOCKS5="yes"
+
+ ])
+ if test -n "$SOCKS_INCDIR"; then
+ AC_DEFINE(USE_SOCKS5, 1, [use socks5 support])
+
+ AC_MSG_CHECKING(SOCKS getsockopt's optlen type)
+ AC_TRY_COMPILE(
+ [ #include <stdlib.h>
+ #include <socks.h>
+ ],
+ [ getsockopt(0,0,0,(void *)0,(socklen_t) 0) ],
+ licq_socks_optlen=socklen_t,
+ [AC_TRY_COMPILE(
+ [ #include <stdlib.h>
+ #include <socks.h>
+ ],
+ [ getsockopt(0,0,0,(void *)0,(int) 0)],
+ licq_socks_optlen=int,
+ licq_socks_optlen=unknown)
+ ]
+ )
+ AC_MSG_RESULT($licq_socks_optlen)
+ if test $licq_socks_optlen = "int"; then
+ AC_DEFINE(SOCKS5_OPTLEN, int, [getsockopt optlen parameter type])
+ else
+ if test $licq_socks_optlen = "socklen_t"; then
+ AC_DEFINE(SOCKS5_OPTLEN,socklen_t [getsockopt optlen parameter type])
+ fi
+ fi
+ fi
+
+ fi
+
+ dnl restore flags
+ if test "$socks_libdir" != "no"; then
+ LDFLAGS="$BACKUP_LDFLAGS"
+ fi
+ if test "$socks_incdir" != "no"; then
+ CPPFLAGS="$BACKUP_CPPFLAGS"
fi
- AC_DEFINE(USE_SOCKS5, 1, [use socks5 support])
fi
dnl Substitute these even if they're null, so as not to mess up makefiles
-
AC_SUBST(SOCKS_LIBS)
AC_SUBST(SOCKS_LIBDIR)
AC_SUBST(SOCKS_INCDIR)
Index: admin/acinclude.m4.in
===================================================================
RCS file: /cvsroot/licq/licq-common/admin/acinclude.m4.in,v
retrieving revision 1.16
diff -u -d -p -r1.16 acinclude.m4.in
--- admin/acinclude.m4.in 3 Dec 2002 06:29:59 -0000 1.16
+++ admin/acinclude.m4.in 19 Dec 2002 02:17:37 -0000
@@ -163,3 +163,11 @@ if test $ac_cv_c_socklen_t = no; then
fi
])
+
+dnl Check if the type socklen_t is defined anywhere
+AC_DEFUN(AC_C_SOCKLEN_T_AND_SOCKS,
+ [AC_CACHE_CHECK(for SOCKS socklen_t, ac_cv_c_socklen_t,
+
+ ]);
+
+])
Index: src/socket.cpp
===================================================================
RCS file: /cvsroot/licq/licq/src/socket.cpp,v
retrieving revision 1.25
diff -u -d -p -r1.25 socket.cpp
--- src/socket.cpp 17 Dec 2002 03:56:24 -0000 1.25
+++ src/socket.cpp 19 Dec 2002 02:17:39 -0000
@@ -40,6 +40,7 @@ SSL_CTX *gSSL_CTX;
#endif // OpenSSL
#ifdef USE_SOCKS5
+
#define SOCKS
#define INCLUDE_PROTOTYPES
extern "C" {
@@ -47,6 +48,14 @@ extern "C" {
}
#endif // SOCKS5
+#ifdef SOCKS5_OPTLEN
+ #ifdef socklen_t
+ #undef socklen_t
+ #endif
+
+ #define socklen_t SOCKS5_OPTLEN
+#endif
+
using namespace std;
char *ip_ntoa(unsigned long in, char *buf)
@@ -307,11 +316,8 @@ void INetSocket::ResetSocket()
bool INetSocket::SetLocalAddress(bool bIp)
{
// Setup the local structure
-#ifdef USE_SOCKS5
- int sizeofSockaddr = sizeof(struct sockaddr_in);
-#else
socklen_t sizeofSockaddr = sizeof(struct sockaddr_in);
-#endif
+
if (getsockname(m_nDescriptor, (struct sockaddr *)&m_sLocalAddr, &sizeofSockaddr) < 0)
{
m_nErrorType = SOCK_ERROR_errno;
@@ -695,11 +701,8 @@ SrvSocket::~SrvSocket()
*---------------------------------------------------------------------------*/
void TCPSocket::RecvConnection(TCPSocket &newSocket)
{
-#ifdef USE_SOCKS5
- int sizeofSockaddr = sizeof(struct sockaddr_in);
-#else
socklen_t sizeofSockaddr = sizeof(struct sockaddr_in);
-#endif
+
newSocket.m_nDescriptor = accept(m_nDescriptor, (struct sockaddr *)&newSocket.m_sRemoteAddr, &sizeofSockaddr);
newSocket.SetLocalAddress();
}