1 /*
2  * numtohost - convert network number to host name.
3  */
4 #include <config.h>
5 
6 #include <sys/types.h>
7 #ifdef HAVE_NETINET_IN_H
8 #include <netinet/in.h>		/* ntohl */
9 #endif
10 
11 #include "ntp_fp.h"
12 #include "ntp_stdlib.h"
13 #include "lib_strbuf.h"
14 
15 #define	LOOPBACKNET	0x7f000000
16 #define	LOOPBACKHOST	0x7f000001
17 #define	LOOPBACKNETMASK	0xff000000
18 
19 char *
numtohost(u_int32 netnum)20 numtohost(
21 	u_int32 netnum
22 	)
23 {
24 	char *bp;
25 	struct hostent *hp;
26 
27 	/*
28 	 * This is really gross, but saves lots of hanging looking for
29 	 * hostnames for the radio clocks.  Don't bother looking up
30 	 * addresses on the loopback network except for the loopback
31 	 * host itself.
32 	 */
33 	if ((((ntohl(netnum) & LOOPBACKNETMASK) == LOOPBACKNET)
34 	     && (ntohl(netnum) != LOOPBACKHOST))
35 	    || ((hp = gethostbyaddr((char *)&netnum, sizeof netnum, AF_INET))
36 		== 0))
37 	    return numtoa(netnum);
38 
39 	LIB_GETBUF(bp);
40 	strlcpy(bp, hp->h_name, LIB_BUFLENGTH);
41 
42 	return bp;
43 }
44