Remove $Id$ tags from most of webcit
[citadel.git] / webcit / locate_host.c
index 165081005e6bdd67e1b0ffa3f252316402852a29..8f1a769555867c39899f785f6d23c80dfa8689b5 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * Given a socket, supply the name of the host at the other end.
  *
  * Copyright (c) 1996-2010 by the citadel.org team
 
 #include "webcit.h"
 
-
-#ifdef CTDL_IPV6
-
+/*
+ * IPv4/IPv6 locate_host()
+ */
 void locate_host(StrBuf *tbuf, int client_socket)
 {
        struct sockaddr_in6 clientaddr;
        unsigned int addrlen = sizeof(clientaddr);
-       char str[256];
+       char clienthost[NI_MAXHOST];
 
        getpeername(client_socket, (struct sockaddr *)&clientaddr, &addrlen);
-       if(inet_ntop(AF_INET6, &clientaddr.sin6_addr, str, sizeof(str))) {
-               StrBufAppendBufPlain(tbuf, str, -1, 0);
-       }
-       else {
-               StrBufAppendBufPlain(tbuf, HKEY("<unknown>"), 0);
-       }
-}
-
-#else /* CTDL_IPV6 */
-
-void locate_host(StrBuf *tbuf, int client_socket)
-{
-       struct sockaddr_in cs;
-       struct hostent *ch;
-       socklen_t len;
-       char *i;
-       int a1, a2, a3, a4;
-
-       len = sizeof(cs);
-       if (getpeername(client_socket, (struct sockaddr *) &cs, &len) < 0) {
-               StrBufAppendBufPlain(tbuf, HKEY("<unknown>"), 0);
-               return;
-       }
-       if ((ch = gethostbyaddr((char *) &cs.sin_addr, sizeof(cs.sin_addr),
-                               AF_INET)) == NULL) {
-               i = (char *) &cs.sin_addr;
-               a1 = ((*i++) & 0xff);
-               a2 = ((*i++) & 0xff);
-               a3 = ((*i++) & 0xff);
-               a4 = ((*i++) & 0xff);
-               StrBufPrintf(tbuf, "%d.%d.%d.%d", a1, a2, a3, a4);
-               return;
-       }
-       StrBufAppendBufPlain(tbuf, ch->h_name, -1, 0);
+       getnameinfo((struct sockaddr *)&clientaddr, addrlen, clienthost, sizeof(clienthost), NULL, 0, 0);
+        StrBufAppendBufPlain(tbuf, clienthost, -1, 0);
 }
-
-#endif /* CTDL_IPV6 */