From 72c27633c5ab6a7e5a2441b17d212ed745323f8a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20Marchal?= Date: Mon, 8 Mar 2010 11:34:56 +0000 Subject: [PATCH] Can resolve IPv6 addresses --- CMakeLists.txt | 3 ++- configure.in | 1 + include/config.h.in | 1 + include/info.h | 2 +- ip2name.c | 27 ++++++++++++++++++++++++++- report.c | 6 +++++- 6 files changed, 36 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bcd378e..08b633d 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ PROJECT(sarg C) SET(sarg_VERSION 2) SET(sarg_REVISION "3rc1") SET(sarg_BUILD "") -SET(sarg_BUILDDATE "Mar-02-2010") +SET(sarg_BUILDDATE "Mar-08-2010") INCLUDE(AddFileDependencies) INCLUDE(CheckIncludeFile) @@ -117,6 +117,7 @@ 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) # Find gd CHECK_INCLUDE_FILE(gd.h HAVE_GD_H) diff --git a/configure.in b/configure.in index c7f032d..a8b86ad 100644 --- a/configure.in +++ b/configure.in @@ -124,6 +124,7 @@ AC_CHECK_FUNCS(bzero) AC_CHECK_FUNCS(backtrace) AC_CHECK_FUNCS(symlink) AC_CHECK_FUNCS(lstat) +AC_CHECK_FUNCS(getnameinfo) dnl check for the rlim_t size AC_CHECK_SIZEOF(rlim_t,1,[#if HAVE_SYS_RESOURCE_H diff --git a/include/config.h.in b/include/config.h.in index 5fde710..1c9f739 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -54,6 +54,7 @@ #cmakedefine HAVE_BACKTRACE #cmakedefine HAVE_SYMLINK #cmakedefine HAVE_LSTAT +#cmakedefine HAVE_GETNAMEINFO #define RLIM_STRING "@RLIM_STRING@" #define ICONV_CONST @ICONV_CONST@ diff --git a/include/info.h b/include/info.h index 914a5ab..f52b116 100755 --- a/include/info.h +++ b/include/info.h @@ -1,3 +1,3 @@ -#define VERSION PACKAGE_VERSION" Mar-02-2010" +#define VERSION PACKAGE_VERSION" Mar-08-2010" #define PGM PACKAGE_NAME #define URL "http://sarg.sourceforge.net" diff --git a/ip2name.c b/ip2name.c index 6cd0372..d7938aa 100644 --- a/ip2name.c +++ b/ip2name.c @@ -29,6 +29,31 @@ void ip2name(char *ip,int ip_len) { +#ifdef HAVE_GETNAMEINFO + struct sockaddr_storage sa; + char host[NI_MAXHOST]; + int n1,n2,n3,n4,next=0; + int error; + + memset(&sa,0,sizeof(sa)); + if (sscanf(ip,"%d.%d.%d.%d%n",&n1,&n2,&n3,&n4,&next)==4 && ip[next]=='\0') { + struct sockaddr_in *s4=(struct sockaddr_in *)&sa; + if (inet_pton(AF_INET,ip,&s4->sin_addr)!=1) return; + sa.ss_family=AF_INET; + } else { + struct sockaddr_in6 *s6=(struct sockaddr_in6 *)&sa; + if (inet_pton(AF_INET6,ip,&s6->sin6_addr)!=1) return; + sa.ss_family=AF_INET6; + } + error=getnameinfo((struct sockaddr *)&sa,sizeof(sa),host,sizeof(host),NULL,0,0); + if (error==0) + { + strncpy(ip,host,ip_len-1); + ip[ip_len-1]='\0'; + } else { + debuga(_("IP to name resolution (getnameinfo) on IP address %s failed with error %d - %s\n"),ip,error,gai_strerror(error)); + } +#else u_long addr; struct hostent *hp; char **p; @@ -47,7 +72,7 @@ void ip2name(char *ip,int ip_len) strncpy(ip,hp->h_name,ip_len-1); ip[ip_len-1]=0; } - +#endif return; } diff --git a/report.c b/report.c index d55ce3a..443597c 100644 --- a/report.c +++ b/report.c @@ -136,7 +136,11 @@ void gerarel(void) continue; } strcpy(u2,uinfo->id); - if(Ip2Name && uinfo->id_is_ip) ip2name(u2,sizeof(u2)); + if(Ip2Name && uinfo->id_is_ip) { + strcpy(ipantes,u2); + ip2name(u2,sizeof(u2)); + strcpy(nameantes,u2); + } user_find(uinfo->label,MAX_USER_LEN, u2); strcpy(wdirname,dirname); -- 2.47.2