From e9b33b571b59f88cc1892a9fe32ea34d574bae00 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20Marchal?= Date: Tue, 1 Jun 2010 09:14:06 +0000 Subject: [PATCH] Fix IP resolution on windows. Increase buffer size for excluded codes. --- CMakeLists.txt | 42 +++++++++++++++++++++++++++++------------- include/config.h.in | 2 ++ ip2name.c | 10 +++++++++- util.c | 5 +++-- 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f2a9769..fb0a815 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,11 +120,33 @@ IF(!HAVE_GETOPT_H) MESSAGE(SEND_ERROR "getopt.h is required to compile sarg") ENDIF(!HAVE_GETOPT_H) +# Windows need lib wsock32 and ws2_32 +IF(CMAKE_SYSTEM_NAME STREQUAL "Windows") + CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H) + CHECK_INCLUDE_FILE(winsock.h HAVE_WINSOCK_H) + CHECK_INCLUDE_FILE(ws2tcpip.h HAVE_WS2TCPIP_H) + + FIND_LIBRARY(WSOCK_LIB NAMES wsock32 DOC "The winsock library") + IF(WSOCK_LIB) + TARGET_LINK_LIBRARIES(sarg wsock32) + LIST(APPEND CMAKE_REQUIRED_LIBRARIES wsock32) + ENDIF(WSOCK_LIB) + + FIND_LIBRARY(WSOCK2_LIB NAMES ws2_32 DOC "The winsock 2 library") + IF(WSOCK2_LIB) + TARGET_LINK_LIBRARIES(sarg ws2_32) + LIST(APPEND CMAKE_REQUIRED_LIBRARIES ws2_32) + ENDIF(WSOCK2_LIB) + + ADD_DEFINITIONS(-DWINDOWS) +ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows") + CHECK_FUNCTION_EXISTS(bzero HAVE_BZERO) CHECK_FUNCTION_EXISTS(backtrace HAVE_BACKTRACE) CHECK_FUNCTION_EXISTS(symlink HAVE_SYMLINK) CHECK_FUNCTION_EXISTS(lstat HAVE_LSTAT) CHECK_FUNCTION_EXISTS(getnameinfo HAVE_GETNAMEINFO) +CHECK_FUNCTION_EXISTS(inet_aton HAVE_INET_ATON) # Find gd CHECK_INCLUDE_FILE(gd.h HAVE_GD_H) @@ -255,19 +277,6 @@ IF(HAVE_RLIM_T) # MESSAGE("Cannot detect the size of your system's rlim_t type") ENDIF(HAVE_RLIM_T) -# Windows need lib wsock32 -IF(CMAKE_SYSTEM_NAME STREQUAL "Windows") - CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H) - CHECK_INCLUDE_FILE(winsock.h HAVE_WINSOCK_H) - FIND_LIBRARY(WSOCK_LIB NAMES wsock32 DOC "The winsock library") - #check_library_exists(wsock32 "." HAVE_WSOCK) - IF(WSOCK_LIB) - #set_target_properties(sarg PROPERTIES LINK_FLAGS "${LINK_FLAGS} -lwsock32") - TARGET_LINK_LIBRARIES(sarg wsock32) - ENDIF(WSOCK_LIB) - ADD_DEFINITIONS(-DWINDOWS) -ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows") - CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP) IF(NOT HAVE_MKSTEMP) # MingW provide mkstemps in libiberty but doesn't declare it in any header file @@ -310,6 +319,13 @@ IF(ENABLE_EXTRA_PROTECT) ENDIF(HAVE_WERROR_FORMAT_SECURITY) ENDIF(ENABLE_EXTRA_PROTECT) +# Compile sarg for debugging +OPTION(ENABLE_DEBUG "Compile sarg with debugging symbols" OFF) +IF(ENABLE_DEBUG) + GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS) + SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -g") +ENDIF(ENABLE_DEBUG) + # Save the configuration for the project CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/config.h.in" "${CMAKE_BINARY_DIR}/config.h" @ONLY) diff --git a/include/config.h.in b/include/config.h.in index 833b360..9a67a6b 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -47,6 +47,7 @@ #cmakedefine HAVE_LIBGEN_H #cmakedefine HAVE_STDBOOL_H #cmakedefine HAVE_GETOPT_H +#cmakedefine HAVE_WS2TCPIP_H #cmakedefine IBERTY_LIB @@ -57,6 +58,7 @@ #cmakedefine HAVE_SYMLINK #cmakedefine HAVE_LSTAT #cmakedefine HAVE_GETNAMEINFO +#cmakedefine HAVE_INET_ATON #define RLIM_STRING "@RLIM_STRING@" #define ICONV_CONST @ICONV_CONST@ diff --git a/ip2name.c b/ip2name.c index ffeaa63..d202198 100644 --- a/ip2name.c +++ b/ip2name.c @@ -26,6 +26,9 @@ #include "include/conf.h" #include "include/defs.h" +#ifdef HAVE_WS2TCPIP_H +#include //define getnameinfo on windows +#endif void ip2name(char *ip,int ip_len) { @@ -58,10 +61,15 @@ void ip2name(char *ip,int ip_len) struct hostent *hp; char **p; +#ifdef HAVE_INET_ATON if (inet_aton(ip,&addr) == 0) return; +#else + addr.s_addr=inet_addr(ip); + if (addr.s_addr==-1) return; +#endif - hp = gethostbyaddr(&addr, sizeof (addr), AF_INET); + hp = gethostbyaddr((void *)&addr, sizeof (addr), AF_INET); if (hp == NULL) return; diff --git a/util.c b/util.c index 8d2fcb4..6999631 100644 --- a/util.c +++ b/util.c @@ -1389,6 +1389,7 @@ void load_excludecodes(const char *ExcludeCodes) exit(EXIT_FAILURE); } + MemSize+=1; if((excludecode=(char *) malloc(MemSize))==NULL) { debuga(_("malloc error (%ld)\n"),MemSize); exit(EXIT_FAILURE); @@ -1398,9 +1399,9 @@ void load_excludecodes(const char *ExcludeCodes) Stored=0; while(fgets(data,sizeof(data),fp_in)!=NULL) { if (data[0]=='#') continue; - for (i=strlen(data)-1 ; i>=0 && (unsigned char)data[i]<=' ' ; i--) data[i]=0; + for (i=strlen(data)-1 ; i>=0 && (unsigned char)data[i]<=' ' ; i--) data[i]='\0'; if (i<0) continue; - if (Stored+i+1>=MemSize) { + if (Stored+i+2>=MemSize) { debuga(_("Too many codes to exclude in file %s\n"),ExcludeCodes); break; } -- 2.47.2