/*
* addrsbr.c -- parse addresses 822-style
*
- * $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>
char *dp;
#endif /* not DUMB */
- if (err && err[0]) {
+ if (err[0]) {
if (eresult)
strcpy (eresult, err);
else
}
if (wanthost == AD_NHST)
- mp->m_type = !strcasecmp (LocalName (), mp->m_host)
+ mp->m_type = !mh_strcasecmp (LocalName (), mp->m_host)
? LOCALHOST : NETHOST;
#ifdef DUMB
else
- mp->m_type = strcasecmp (LocalName(), mp->m_host) ? NETHOST : LOCALHOST;
+ mp->m_type = mh_strcasecmp (LocalName(), mp->m_host) ? NETHOST : LOCALHOST;
#else /* not DUMB */
else
if (pp = OfficialName (mp->m_host)) {
got_real_host: ;
free (mp->m_host);
mp->m_host = getcpy (pp);
- mp->m_type = strcasecmp (LocalName(), mp->m_host) ? NETHOST : LOCALHOST;
+ mp->m_type = mh_strcasecmp (LocalName(), mp->m_host) ? NETHOST : LOCALHOST;
}
else {
if (dp = strchr(mp->m_host, '.')) {
goto local_test;
case UUCPHOST:
- if (strcasecmp (np->m_host, SystemName()))
+ if (mh_strcasecmp (np->m_host, SystemName()))
break; /* fall */
case LOCALHOST:
local_test: ;
- if (!strcasecmp (np->m_mbox, mq.m_mbox))
+ if (!mh_strcasecmp (np->m_mbox, mq.m_mbox))
return 1;
break;
continue;
switch (mp->m_type & W_MBOX) {
case W_NIL:
- if (strcasecmp (cp, pp))
+ if (mh_strcasecmp (cp, pp))
continue;
break;
case W_MBEG:
- if (strcasecmp (cp + len - i, pp))
+ if (mh_strcasecmp (cp + len - i, pp))
continue;
break;
case W_MEND:
continue;
switch (mp->m_type & W_HOST) {
case W_NIL:
- if (strcasecmp (cp, pp))
+ if (mh_strcasecmp (cp, pp))
continue;
break;
case W_HBEG:
- if (strcasecmp (cp + len - i, pp))
+ if (mh_strcasecmp (cp + len - i, pp))
continue;
break;
case W_HEND:
return 0;
}
+
+
+/*
+ * Moved from hosts.c -- find out the official name of a host
+ */
+
+/*
+ * In the SendMail world, we really don't know what the valid
+ * hosts are. We could poke around in the sendmail.cf file, but
+ * that still isn't a guarantee. As a result, we'll say that
+ * everything is a valid host, and let SendMail worry about it.
+ */
+
+#include <h/mts.h>
+#include <netdb.h>
+
+
+char *
+OfficialName (char *name)
+{
+ unsigned char *p;
+ char *q, site[BUFSIZ];
+ struct addrinfo hints, *res;
+
+ static char buffer[BUFSIZ];
+
+ for (p = name, q = site; *p && (q - site < sizeof(site) - 1); p++, q++)
+ *q = isupper (*p) ? tolower (*p) : *p;
+ *q = '\0';
+ q = site;
+
+ if (!mh_strcasecmp (LocalName(), site))
+ return LocalName();
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_CANONNAME;
+ hints.ai_family = PF_UNSPEC;
+
+ if (getaddrinfo(q, NULL, &hints, &res) == 0) {
+ strncpy (buffer, res->ai_canonname, sizeof(buffer));
+ buffer[sizeof(buffer) - 1] = '\0';
+ freeaddrinfo(res);
+ return buffer;
+ }
+
+ strncpy (buffer, site, sizeof(buffer));
+ return buffer;
+}