]> git.ipfire.org Git - thirdparty/sarg.git/commitdiff
Fix IP resolution on windows.
authorFrédéric Marchal <fmarchal@users.sourceforge.net>
Tue, 1 Jun 2010 09:14:06 +0000 (09:14 +0000)
committerFrédéric Marchal <fmarchal@users.sourceforge.net>
Tue, 1 Jun 2010 09:14:06 +0000 (09:14 +0000)
Increase buffer size for excluded codes.

CMakeLists.txt
include/config.h.in
ip2name.c
util.c

index f2a9769e49731613875f5c715e62920b798c531e..fb0a815eab0e76a9cbebd518528c44461f0a552e 100755 (executable)
@@ -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)
 
index 833b36076f55ec2306ab18da903706ff704d19a9..9a67a6b4647702fe4726bfefcef9bf8aedf77546 100644 (file)
@@ -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@
index ffeaa63cc13b0a076417f5c50cfc230e45de21f9..d2021989963c295ce92688a9b448d28e83f806d9 100644 (file)
--- a/ip2name.c
+++ b/ip2name.c
@@ -26,6 +26,9 @@
 
 #include "include/conf.h"
 #include "include/defs.h"
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h> //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 8d2fcb412874d89722aeb0fd82ce52d1ada058a7..69996313d1d71d5dbf163bed74cd382a9fe2f0c8 100644 (file)
--- 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;
       }