/* host2ip.c - return IP address given a host name Copyright 1998-1999 by Columbia University; all rights reserved */ #include #include /* struct sockaddr */ #include /* gethostbyname() */ #include /* sockaddr_in */ #include /* inet_addr() */ #include /* YP */ #include /* isspace() */ static char rcsid[] = "$Id: host2ip.c,v 1.5 1998/12/17 17:10:02 ly62 Exp $"; /* * Return IP address given host name 'host'. Returns s_addr = INADDR_ANY * if not valid. */ struct in_addr host2ip(char *host) { struct in_addr in; register struct hostent *hep; /* Strip leading white space. */ if (host) { while (*host && isspace((int)*host)) host++; } /* Check whether this is a dotted decimal. */ in.s_addr = INADDR_ANY; if (!host) { } else if ((in.s_addr = inet_addr(host)) != -1) { } /* Attempt to resolve host name via DNS. */ else if ((hep = gethostbyname(host))) { in = *(struct in_addr *)(hep->h_addr_list[0]); } /* As a last resort, try YP. */ else { static char *domain = 0; /* YP domain */ char *value; /* key value */ int value_len; /* length of returned value */ in.s_addr = INADDR_ANY; if (!domain) yp_get_default_domain(&domain); if (yp_match(domain, "hosts.byname", host, strlen(host), &value, &value_len) == 0) { in.s_addr = inet_addr(value); } } return in; } /* host2ip */