summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Elkins <me@sigpipe.org>2013-04-11 01:59:26 +0000
committerMichael Elkins <me@sigpipe.org>2013-04-11 01:59:26 +0000
commit286a0b78cbdbb16adbdc889ca52c8783901592c6 (patch)
tree0cba759d6b7b1fd0a44d02ed8e68cb7b3bd00267
parent001bc020604322d38414291400d6d978001c1f06 (diff)
Backed out changeset 1142ed8974fa
-rw-r--r--getdomain.c73
-rw-r--r--init.c34
2 files changed, 45 insertions, 62 deletions
diff --git a/getdomain.c b/getdomain.c
index 13c4fa25..71636279 100644
--- a/getdomain.c
+++ b/getdomain.c
@@ -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 9fcd53f2..0cc362b7 100644
--- 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);