}
if (dfhost == NULL) {
- dfhost = LocalName ();
+ dfhost = LocalName (0);
dftype = LOCALHOST;
}
}
if (wanthost == AD_NHST)
- mp->m_type = !mh_strcasecmp (LocalName (), mp->m_host)
+ mp->m_type = !mh_strcasecmp (LocalName (0), mp->m_host)
? LOCALHOST : NETHOST;
else
- mp->m_type = mh_strcasecmp (LocalName(), mp->m_host) ? NETHOST : LOCALHOST;
+ mp->m_type = mh_strcasecmp (LocalName(0), mp->m_host) ? NETHOST : LOCALHOST;
got_host: ;
if (route)
return username;
- domain = LocalName();
+ domain = LocalName(0);
snprintf_return = snprintf (addr, sizeof(addr), "%s@%s", username, domain);
* list of alternate mailboxes.
*/
if (am == NULL) {
+ if ((am = context_find ("local-mailbox"))) {
+ struct mailname *mptr;
+
+ if ((cp = getname(am)) == NULL) {
+ admonish (NULL, "Unable to find address in local-mailbox");
+ return 0;
+ }
+
+ if ((mptr = getm (cp, NULL, 0, AD_NAME, NULL)) == NULL) {
+ admonish (NULL, "invalid entry in local-mailbox: %s", cp);
+ return 0;
+ }
+
+ /*
+ * Yes, we're not freeing the whole entry, because all of those
+ * elements contain allocated pointers that we need; maybe
+ * later ...
+ */
+
+ mq = *mptr;
+
+ free(mptr);
+
+ /*
+ * Sigh, it turns out that the address parser gets messed up
+ * if you don't call getname() until it returns NULL.
+ */
+
+ while ((cp = getname(am)) != NULL)
+ ;
+ } else {
+ mq.m_mbox = getusername ();
+ }
+
mq.m_next = NULL;
- mq.m_mbox = getusername ();
+
if ((am = context_find ("alternate-mailboxes")) == NULL)
am = getusername();
else {
switch (np->m_type) {
case NETHOST:
- len = strlen (cp = LocalName ());
+ len = strlen (cp = LocalName (0));
if (!uprf (np->m_host, cp) || np->m_host[len] != '.')
break;
goto local_test;