summaryrefslogtreecommitdiff
path: root/libntp/numtohost.c
diff options
context:
space:
mode:
Diffstat (limited to 'libntp/numtohost.c')
-rw-r--r--libntp/numtohost.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/libntp/numtohost.c b/libntp/numtohost.c
new file mode 100644
index 0000000..6b250d6
--- /dev/null
+++ b/libntp/numtohost.c
@@ -0,0 +1,43 @@
+/*
+ * numtohost - convert network number to host name.
+ */
+#include <config.h>
+
+#include <sys/types.h>
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h> /* ntohl */
+#endif
+
+#include "ntp_fp.h"
+#include "ntp_stdlib.h"
+#include "lib_strbuf.h"
+
+#define LOOPBACKNET 0x7f000000
+#define LOOPBACKHOST 0x7f000001
+#define LOOPBACKNETMASK 0xff000000
+
+char *
+numtohost(
+ u_int32 netnum
+ )
+{
+ char *bp;
+ struct hostent *hp;
+
+ /*
+ * This is really gross, but saves lots of hanging looking for
+ * hostnames for the radio clocks. Don't bother looking up
+ * addresses on the loopback network except for the loopback
+ * host itself.
+ */
+ if ((((ntohl(netnum) & LOOPBACKNETMASK) == LOOPBACKNET)
+ && (ntohl(netnum) != LOOPBACKHOST))
+ || ((hp = gethostbyaddr((char *)&netnum, sizeof netnum, AF_INET))
+ == 0))
+ return numtoa(netnum);
+
+ LIB_GETBUF(bp);
+ strlcpy(bp, hp->h_name, LIB_BUFLENGTH);
+
+ return bp;
+}