1145519Sdarrenr/* $FreeBSD$ */ 2145510Sdarrenr 3170268Sdarrenr/* 4255332Scy * Copyright (C) 2012 by Darren Reed. 5255332Scy * 6255332Scy * See the IPFILTER.LICENCE file for details on licencing. 7255332Scy * 8255332Scy * $Id$ 9255332Scy */ 10145510Sdarrenr 11145510Sdarrenr#include "ipf.h" 12145510Sdarrenr 13255332Scychar *hostname(family, ip) 14255332Scy int family; 15255332Scy void *ip; 16145510Sdarrenr{ 17145510Sdarrenr static char hostbuf[MAXHOSTNAMELEN+1]; 18145510Sdarrenr struct hostent *hp; 19145510Sdarrenr struct in_addr ipa; 20145510Sdarrenr struct netent *np; 21145510Sdarrenr 22170268Sdarrenr memset(&ipa, 0, sizeof(ipa)); /* XXX gcc */ 23170268Sdarrenr 24255332Scy if (family == AF_INET) { 25145510Sdarrenr ipa.s_addr = *(u_32_t *)ip; 26145510Sdarrenr if (ipa.s_addr == htonl(0xfedcba98)) 27145510Sdarrenr return "test.host.dots"; 28145510Sdarrenr } 29145510Sdarrenr 30145510Sdarrenr if ((opts & OPT_NORESOLVE) == 0) { 31255332Scy if (family == AF_INET) { 32145510Sdarrenr hp = gethostbyaddr(ip, 4, AF_INET); 33145510Sdarrenr if (hp != NULL && hp->h_name != NULL && 34145510Sdarrenr *hp->h_name != '\0') { 35145510Sdarrenr strncpy(hostbuf, hp->h_name, sizeof(hostbuf)); 36145510Sdarrenr hostbuf[sizeof(hostbuf) - 1] = '\0'; 37145510Sdarrenr return hostbuf; 38145510Sdarrenr } 39145510Sdarrenr 40145510Sdarrenr np = getnetbyaddr(ipa.s_addr, AF_INET); 41145510Sdarrenr if (np != NULL && np->n_name != NULL && 42145510Sdarrenr *np->n_name != '\0') { 43145510Sdarrenr strncpy(hostbuf, np->n_name, sizeof(hostbuf)); 44145510Sdarrenr hostbuf[sizeof(hostbuf) - 1] = '\0'; 45145510Sdarrenr return hostbuf; 46145510Sdarrenr } 47145510Sdarrenr } 48145510Sdarrenr } 49145510Sdarrenr 50255332Scy if (family == AF_INET) { 51145510Sdarrenr return inet_ntoa(ipa); 52145510Sdarrenr } 53145510Sdarrenr#ifdef USE_INET6 54145510Sdarrenr (void) inet_ntop(AF_INET6, ip, hostbuf, sizeof(hostbuf) - 1); 55145510Sdarrenr hostbuf[MAXHOSTNAMELEN] = '\0'; 56145510Sdarrenr return hostbuf; 57145510Sdarrenr#else 58145510Sdarrenr return "IPv6"; 59145510Sdarrenr#endif 60145510Sdarrenr} 61