changeset: 6303:f99e91980f0f
user:      Michael Elkins <[email protected]>
date:      Thu Apr 11 01:59:26 2013 +0000
link:      http://dev.mutt.org/hg/mutt/rev/f99e91980f0f

Backed out changeset 1142ed8974fa

diffs (161 lines):

diff -r 1142ed8974fa -r f99e91980f0f getdomain.c
--- a/getdomain.c       Wed Apr 10 23:40:18 2013 +0000
+++ b/getdomain.c       Thu Apr 11 01:59:26 2013 +0000
@@ -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 @@
 
 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)
+  if ((f = fopen ("/etc/resolv.conf", "r")) == NULL) return (-1);
+
+  tmp[sizeof (tmp) - 1] = 0;
+
+  l--; /* save room for the terminal \0 */
+
+  while (fgets (tmp, sizeof (tmp) - 1, f) != NULL)
   {
-    snprintf(s, l, "%s", res->ai_canonname);
-    freeaddrinfo(res);
+    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);
+       strfcpy (s, q, l);
+       safe_fclose (&f);
+       return 0;
+      }
+      
+    }
   }
-  else
-  {
-    /* Otherwise inspect /etc/resolve.conf for a hint. */
 
-    if ((f = fopen ("/etc/resolv.conf", "r")) == NULL) return (-1);
-
-    tmp[sizeof (tmp) - 1] = 0;
-
-    l--; /* save room for the terminal \0 */
-
-    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 += 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;
-       }
-
-      }
-    }
-
-    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 -r 1142ed8974fa -r f99e91980f0f init.c
--- a/init.c    Wed Apr 10 23:40:18 2013 +0000
+++ b/init.c    Thu Apr 11 01:59:26 2013 +0000
@@ -2887,6 +2887,7 @@
 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 @@
 #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 */
   }
-
-  /* determine the DNS domain name */
-  getdnsdomainname (buffer, sizeof (buffer));
-  Fqdn = safe_strdup(buffer);
+  else
+    Hostname = safe_strdup (utsname.nodename);
+
+#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);

Reply via email to