query-loc.c   [plain text]


#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);
    }
}