Removed --with-smtpservers configure option and thelike
[mmh] / mts / smtp / hosts.c
index 607f4ec..ec73e86 100644 (file)
@@ -2,8 +2,6 @@
 /*
  * 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/mts.h>
 #include <netdb.h>
 
-static struct host {
-    char *h_name;
-    char **h_aliases;
-    struct host *h_next;
-} hosts;
-
-
-/*
- * static prototypes
- */
-static int init_hs(void);
-
 
 char *
 OfficialName (char *name)
 {
-    char *p, *q, site[BUFSIZ];
-    struct hostent *hp;
+    unsigned char *p;
+    char *q, site[BUFSIZ];
+    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++)
        *q = isupper (*p) ? tolower (*p) : *p;
@@ -51,91 +36,17 @@ OfficialName (char *name)
     if (!mh_strcasecmp (LocalName(), site))
        return LocalName();
 
-#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 ()) {
-       for (h = hosts.h_next; h; h = h->h_next)
-           if (!mh_strcasecmp (h->h_name, q)) {
-               return h->h_name;
-           } else {
-               for (r = h->h_aliases; *r; r++)
-                   if (!mh_strcasecmp (*r, q))
-                       return h->h_name;
-           }
-    }
 
     strncpy (buffer, site, sizeof(buffer));
     return buffer;
 }
-
-/*
- * Use hostable as an exception file for those hosts that aren't
- * on the Internet (listed in /etc/hosts).  These are usually
- * PhoneNet and UUCP sites.
- */
-
-#define        NALIASES 50
-
-static int
-init_hs (void)
-{
-    char  *cp, *dp, **q, **r;
-    char buffer[BUFSIZ], *aliases[NALIASES];
-    register struct host *h;
-    register FILE  *fp;
-
-    if ((fp = fopen (hostable, "r")) == NULL)
-       return 0;
-
-    h = &hosts;
-    while (fgets (buffer, sizeof(buffer), fp) != NULL) {
-       if ((cp = strchr(buffer, '#')))
-           *cp = 0;
-       if ((cp = strchr(buffer, '\n')))
-           *cp = 0;
-       for (cp = buffer; *cp; cp++)
-           if (isspace (*cp))
-               *cp = ' ';
-       for (cp = buffer; isspace (*cp); cp++)
-           continue;
-       if (*cp == 0)
-           continue;
-
-       q = aliases;
-       if ((cp = strchr(dp = cp, ' '))) {
-           *cp = 0;
-           for (cp++; *cp; cp++) {
-               while (isspace (*cp))
-                   cp++;
-               if (*cp == 0)
-                   break;
-               if ((cp = strchr(*q++ = cp, ' ')))
-                   *cp = 0;
-               else
-                   break;
-               if (q >= aliases + NALIASES)
-                   break;
-           }
-       }
-
-       *q = 0;
-
-       h->h_next = (struct host *) calloc (1, sizeof(*h));
-       h = h->h_next;
-       h->h_name = getcpy (dp);
-       r = h->h_aliases =
-               (char **) calloc ((size_t) (q - aliases + 1), sizeof(*q));
-       for (q = aliases; *q; q++)
-           *r++ = getcpy (*q);
-       *r = 0;
-    }
-
-    fclose (fp);
-    return 1;
-}