154359Sroberto/*
254359Sroberto * numtohost - convert network number to host name.
354359Sroberto */
4285612Sdelphij#include <config.h>
554359Sroberto
6285612Sdelphij#include <sys/types.h>
7285612Sdelphij#ifdef HAVE_NETINET_IN_H
8285612Sdelphij#include <netinet/in.h>		/* ntohl */
9285612Sdelphij#endif
10285612Sdelphij
1154359Sroberto#include "ntp_fp.h"
1254359Sroberto#include "ntp_stdlib.h"
1354359Sroberto#include "lib_strbuf.h"
1454359Sroberto
1554359Sroberto#define	LOOPBACKNET	0x7f000000
1654359Sroberto#define	LOOPBACKHOST	0x7f000001
1754359Sroberto#define	LOOPBACKNETMASK	0xff000000
1854359Sroberto
1954359Srobertochar *
2054359Srobertonumtohost(
2154359Sroberto	u_int32 netnum
2254359Sroberto	)
2354359Sroberto{
2454359Sroberto	char *bp;
2554359Sroberto	struct hostent *hp;
2654359Sroberto
2754359Sroberto	/*
2854359Sroberto	 * This is really gross, but saves lots of hanging looking for
2954359Sroberto	 * hostnames for the radio clocks.  Don't bother looking up
3054359Sroberto	 * addresses on the loopback network except for the loopback
3154359Sroberto	 * host itself.
3254359Sroberto	 */
3354359Sroberto	if ((((ntohl(netnum) & LOOPBACKNETMASK) == LOOPBACKNET)
3454359Sroberto	     && (ntohl(netnum) != LOOPBACKHOST))
3554359Sroberto	    || ((hp = gethostbyaddr((char *)&netnum, sizeof netnum, AF_INET))
3654359Sroberto		== 0))
3754359Sroberto	    return numtoa(netnum);
3854359Sroberto
3954359Sroberto	LIB_GETBUF(bp);
40285612Sdelphij	strlcpy(bp, hp->h_name, LIB_BUFLENGTH);
41285612Sdelphij
4254359Sroberto	return bp;
4354359Sroberto}
44