David van Moolenbroek 00b67f09dd Import NetBSD named(8)
Also known as ISC bind.  This import adds utilities such as host(1),
dig(1), and nslookup(1), as well as many other tools and libraries.

Change-Id: I035ca46e64f1965d57019e773f4ff0ef035e4aa3
2017-03-21 22:00:06 +00:00

101 lines
1.8 KiB
C

/* $NetBSD: query-loc.c,v 1.4 2014/12/10 04:37:56 christos Exp $ */
#include "loc.h"
/* Id: query-loc.c,v 1.1 2008/02/15 01:47:15 marka Exp */
/* Global variables */
char *progname;
short debug;
int
main (argc, argv)
int argc;
char *argv[];
{
extern char *optarg;
extern int optind;
short verbose = FALSE;
char *host;
char ch;
char *loc = NULL;
struct in_addr addr;
struct hostent *hp;
progname = argv[0];
while ((ch = getopt (argc, argv, "vd:")) != EOF)
{
switch (ch)
{
case 'v':
verbose = TRUE;
break;
case 'd':
debug = atoi (optarg);
if (debug <= 0)
{
(void) fprintf (stderr,
"%s: illegal debug value.\n", progname);
exit (2);
}
break;
default:
usage ();
}
}
argc -= optind;
argv += optind;
if (argc != 1)
{
usage ();
}
if (verbose || debug)
{
printf ("\nThis is %s, version %s.\n\n", progname, VERSION);
}
host = argv[0];
(void) res_init ();
if ((addr.s_addr = inet_addr (host)) == INADDR_NONE)
{
if (debug >= 1)
printf ("%s is a name\n", host);
loc = getlocbyname (host, FALSE);
}
else
{
if (debug >= 1)
printf ("%s is an IP address ", host);
hp = (struct hostent *) gethostbyaddr
((char *) &addr, sizeof (addr), AF_INET);
if (hp)
{
if (debug >= 1)
printf ("and %s is its official name\n",
hp->h_name);
loc = getlocbyname (hp->h_name, FALSE);
}
else
{
if (debug >= 1)
printf ("which has no name\n");
loc = getlocbyaddr (addr, NULL);
}
}
if (loc == NULL)
{
printf ("No LOCation found for %s\n", host);
exit (1);
}
else
{
if (verbose || debug)
printf ("LOCation for %s is ", host);
printf ("%s\n", loc);
exit (0);
}
}