/*
* hosts.c -- find out the official name of a host
*
- * $Id$
- *
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* complete copyright information.
#include <h/mh.h>
#include <h/mts.h>
+#include <sys/socket.h>
#include <netdb.h>
static struct host {
{
unsigned char *p;
char *q, site[BUFSIZ];
- struct hostent *hp;
+ struct addrinfo hints, *res;
static char buffer[BUFSIZ];
char **r;
struct host *h;
- for (p = name, q = site; *p && (q - site < sizeof(site) - 1); p++, q++)
+ for (p = name, q = site; *p && (q - site < (int)sizeof(site) - 1); p++, q++)
*q = isupper (*p) ? tolower (*p) : *p;
*q = '\0';
q = site;
- if (!mh_strcasecmp (LocalName(), site))
- return LocalName();
+ if (!mh_strcasecmp (LocalName(1), site))
+ return LocalName(1);
-#ifdef HAVE_SETHOSTENT
- sethostent (1);
-#endif
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_CANONNAME;
+ hints.ai_family = PF_UNSPEC;
- if ((hp = gethostbyname (q))) {
- strncpy (buffer, hp->h_name, sizeof(buffer));
+ if (getaddrinfo(q, NULL, &hints, &res) == 0) {
+ strncpy (buffer, res->ai_canonname, sizeof(buffer));
+ buffer[sizeof(buffer) - 1] = '\0';
+ freeaddrinfo(res);
return buffer;
}
if (hosts.h_name || init_hs ()) {