-----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();
 }

Reply via email to