]> git.ipfire.org Git - thirdparty/sarg.git/commitdiff
Can resolve IPv6 addresses
authorFrédéric Marchal <fmarchal@users.sourceforge.net>
Mon, 8 Mar 2010 11:34:56 +0000 (11:34 +0000)
committerFrédéric Marchal <fmarchal@users.sourceforge.net>
Mon, 8 Mar 2010 11:34:56 +0000 (11:34 +0000)
CMakeLists.txt
configure.in
include/config.h.in
include/info.h
ip2name.c
report.c

index bcd378ead78da5f2a08d3d8c583c14a6273ded3b..08b633d506a037b60e682e25c172f78a6eb25dc8 100755 (executable)
@@ -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)
index c7f032da017ef60c5b26c1e9be2a22f31cc43acc..a8b86adc281b825129f22c62f6931db3f75372af 100644 (file)
@@ -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
index 5fde7107e541dcd6b666b9ddb2f826ea01113047..1c9f7393167b8fe87b620f21ec669832795d3e8d 100644 (file)
@@ -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@
index 914a5ab394ab927b3288174fdc4af0e926e37ced..f52b116451255a9c1c8a26fc9b1d00cdee99e410 100755 (executable)
@@ -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"
index 6cd03725f661b2e32ca7235d678396026caa1d99..d7938aa6eb2f293ae8ed27f0af7694db66bc14fa 100644 (file)
--- a/ip2name.c
+++ b/ip2name.c
 
 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;
 }
 
index d55ce3a245be55b7394619fd0cef351c1d330ce5..443597c0897ef11be18f0847913c6f2a0b77efb0 100644 (file)
--- 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);