geomyidae

A small C-based gopherd. (gopher://bitreich.org/1/scm/geomyidae)
git clone git://r-36.net/geomyidae
Log | Files | Refs | README | LICENSE

commit a0495a999191b84a00f2586b7089c99947d0de93
parent cb73df5b7e3746edcb70fd57b462161efec5385a
Author: Christoph Lohmann <20h@r-36.net>
Date:   Sun, 27 Feb 2011 12:32:54 +0100

Adding reverse lookup to log entries. Thanks to James Penketh
<tamber@furryhelix.co.uk>!

Diffstat:
ind.c | 25+++++++++++++++++++++++++
ind.h | 1+
main.c | 13++++++-------
3 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/ind.c b/ind.c @@ -10,6 +10,10 @@ #include <fcntl.h> #include <stdio.h> #include <stdlib.h> +#include <netdb.h> +#include <sys/socket.h> +#include <arpa/inet.h> + #include "ind.h" #include "handlr.h" @@ -285,3 +289,24 @@ smprintf(char *fmt, ...) return ret; } +char * +reverselookup(char *host) +{ + struct in_addr hoststr; + struct hostent *client; + char *rethost; + + rethost = NULL; + + if(inet_pton(AF_INET, host, &hoststr)) { + client = gethostbyaddr(&hoststr, sizeof(hoststr), AF_INET); + if(client != NULL) + rethost = strdup(client->h_name); + } + + if(rethost == NULL) + rethost = strdup(host); + + return rethost; +} + diff --git a/ind.h b/ind.h @@ -43,6 +43,7 @@ void tprintf(int fd, char *fmt, ...); int initlogging(char *logf); void stoplogging(int fd); char *smprintf(char *fmt, ...); +char *reverselookup(char *host); #endif diff --git a/main.c b/main.c @@ -19,6 +19,7 @@ #include <time.h> #include <pwd.h> #include <grp.h> + #include "ind.h" #include "handlr.h" #include "arg.h" @@ -102,17 +103,19 @@ logentry(char *host, char *port, char *qry, char *status) { time_t tim; struct tm *ptr; - char timstr[128]; + char timstr[128], *ahost; if(glfd >= 0) { tim = time(0); ptr = localtime(&tim); + ahost = reverselookup(host); strftime(timstr, sizeof(timstr), "%a %b %d %H:%M:%S %Z %Y", ptr); tprintf(glfd, "[%s|%s:%s] %s (%s)\n", - timstr, host, port, qry, status); + timstr, ahost, port, qry, status); + free(ahost); } return; @@ -364,11 +367,7 @@ main(int argc, char *argv[]) return 1; } - if(dofork) { - signal(SIGINT, SIG_IGN); - signal(SIGQUIT, SIG_IGN); - } - signal(SIGCHLD, hndlsigchld); + initsignals(); cltlen = sizeof(clt); while(running) {