Added locate_host.c
authorArt Cancro <ajc@citadel.org>
Wed, 17 Feb 1999 18:35:35 +0000 (18:35 +0000)
committerArt Cancro <ajc@citadel.org>
Wed, 17 Feb 1999 18:35:35 +0000 (18:35 +0000)
webcit/locate_host.c [new file with mode: 0644]

diff --git a/webcit/locate_host.c b/webcit/locate_host.c
new file mode 100644 (file)
index 0000000..9a19f9b
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * locate the originating host
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <limits.h>
+#include <netdb.h>
+#include <string.h>
+
+void locate_host(char *tbuf, int client_socket)
+{
+       struct sockaddr_in      cs;     
+       struct hostent      *   ch;        
+       int                     len;     
+       char *i;
+       int a1,a2,a3,a4;
+       
+    len = sizeof(cs);   
+    if (getpeername(client_socket, (struct sockaddr *)&cs,&len) < 0) {
+       strcpy(tbuf, "<unknown>");
+       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);
+               sprintf(tbuf,"%d.%d.%d.%d",a1,a2,a3,a4);
+               return;
+               }
+
+       strncpy(tbuf,ch->h_name, 24);
+       tbuf[24] = 0;
+       }