]> granicus.if.org Git - neomutt/commitdiff
Backed out changeset 1142ed8974fa
authorMichael Elkins <me@sigpipe.org>
Thu, 11 Apr 2013 01:59:26 +0000 (01:59 +0000)
committerMichael Elkins <me@sigpipe.org>
Thu, 11 Apr 2013 01:59:26 +0000 (01:59 +0000)
getdomain.c
init.c

index 13c4fa25746152c5671151fde7a576dff1b3482f..71636279cf7b86b532aa06fd50aa404b1ae7a792 100644 (file)
@@ -6,10 +6,6 @@
 #include <ctype.h>
 #include <string.h>
 
-/* for getaddrinfo() */
-#include <sys/types.h>
-#include <netdb.h>
-
 #include "mutt.h"
 
 #ifndef STDC_HEADERS
@@ -33,63 +29,40 @@ static void strip_trailing_dot (char *q)
 
 int getdnsdomainname (char *s, size_t l)
 {
-#ifdef DOMAIN
-  /* specified at compile time */
-  snprintf(s, l, "%s.%s", Hostname, DOMAIN);
-#else
   FILE *f;
   char tmp[1024];
   char *p = NULL;
   char *q;
-  struct addrinfo hints;
-  struct addrinfo *res;
 
-  /* Try a DNS lookup on the hostname to find the canonical name. */
-  memset(&hints, 0, sizeof(hints));
-  hints.ai_flags = AI_CANONNAME;
-  if (getaddrinfo(Hostname, NULL, &hints, &res) == 0)
-  {
-    snprintf(s, l, "%s", res->ai_canonname);
-    freeaddrinfo(res);
-  }
-  else
-  {
-    /* Otherwise inspect /etc/resolve.conf for a hint. */
+  if ((f = fopen ("/etc/resolv.conf", "r")) == NULL) return (-1);
 
-    if ((f = fopen ("/etc/resolv.conf", "r")) == NULL) return (-1);
+  tmp[sizeof (tmp) - 1] = 0;
 
-    tmp[sizeof (tmp) - 1] = 0;
+  l--; /* save room for the terminal \0 */
 
-    l--; /* save room for the terminal \0 */
-
-    while (fgets (tmp, sizeof (tmp) - 1, f) != NULL)
+  while (fgets (tmp, sizeof (tmp) - 1, f) != NULL)
+  {
+    p = tmp;
+    while (ISSPACE (*p)) p++;
+    if (mutt_strncmp ("domain", p, 6) == 0 || mutt_strncmp ("search", p, 6) == 0)
     {
-      p = tmp;
-      while (ISSPACE (*p)) p++;
-      if (mutt_strncmp ("domain", p, 6) == 0 || mutt_strncmp ("search", p, 6) == 0)
-      {
-       p += 6;
-
-       for (q = strtok (p, " \t\n"); q; q = strtok (NULL, " \t\n"))
-         if (strcmp (q, "."))
-           break;
-
-       if (q)
-       {
-         strip_trailing_dot (q);
-         snprintf (s, l, "%s.%s", Hostname, q);
-         safe_fclose (&f);
-         return 0;
-       }
+      p += 6;
+      
+      for (q = strtok (p, " \t\n"); q; q = strtok (NULL, " \t\n"))
+       if (strcmp (q, "."))
+         break;
 
+      if (q)
+      {
+       strip_trailing_dot (q);
+       strfcpy (s, q, l);
+       safe_fclose (&f);
+       return 0;
       }
+      
     }
-
-    safe_fclose (&f);
-
-    /* fall back to using just the bare hostname */
-    snprintf(s, l, "%s", Hostname);
   }
-#endif
-  return 0;
+
+  safe_fclose (&f);
+  return (-1);
 }
diff --git a/init.c b/init.c
index 9fcd53f280c71572888bba8a085a244524392829..0cc362b75d37cca0eb5eed1ca0de04e48e07cb50 100644 (file)
--- a/init.c
+++ b/init.c
@@ -2887,6 +2887,7 @@ static void mutt_srandom (void)
 void mutt_init (int skip_sys_rc, LIST *commands)
 {
   struct passwd *pw;
+  struct utsname utsname;
   char *p, buffer[STRING];
   int i, default_rc = 0, need_pause = 0;
   BUFFER err;
@@ -2952,21 +2953,30 @@ void mutt_init (int skip_sys_rc, LIST *commands)
 #endif
 
   /* And about the host... */
+  uname (&utsname);
+  /* some systems report the FQDN instead of just the hostname */
+  if ((p = strchr (utsname.nodename, '.')))
   {
-    size_t namelen = sysconf(_SC_HOST_NAME_MAX);
-    char *name = safe_malloc(namelen + 1);
-    if (gethostname(name, namelen) == -1)
-    {
-      fputs (_("unable to determine hostname"), stderr);
-      exit (1);
-    }
-    Hostname = safe_strdup(name);
-    FREE (&name);
+    Hostname = mutt_substrdup (utsname.nodename, p);
+    p++;
+    strfcpy (buffer, p, sizeof (buffer)); /* save the domain for below */
   }
+  else
+    Hostname = safe_strdup (utsname.nodename);
 
-  /* determine the DNS domain name */
-  getdnsdomainname (buffer, sizeof (buffer));
-  Fqdn = safe_strdup(buffer);
+#ifndef DOMAIN
+#define DOMAIN buffer
+  if (!p && getdnsdomainname (buffer, sizeof (buffer)) == -1)
+    Fqdn = safe_strdup ("@");
+  else
+#endif /* DOMAIN */
+    if (*DOMAIN != '@')
+  {
+    Fqdn = safe_malloc (mutt_strlen (DOMAIN) + mutt_strlen (Hostname) + 2);
+    sprintf (Fqdn, "%s.%s", NONULL(Hostname), DOMAIN); /* __SPRINTF_CHECKED__ */
+  }
+  else
+    Fqdn = safe_strdup(NONULL(Hostname));
 
   if ((p = getenv ("MAIL")))
     Spoolfile = safe_strdup (p);