- if (mp->m_nohost)
- return 1;
- if (np->m_host == NULL)
- continue;
- if ((len = strlen (cp = np->m_host))
- < (i = strlen (pp = mp->m_host)))
- continue;
- switch (mp->m_type & W_HOST) {
- case W_NIL:
- if (strcasecmp (cp, pp))
- continue;
- break;
- case W_HBEG:
- if (strcasecmp (cp + len - i, pp))
- continue;
- break;
- case W_HEND:
- if (!uprf (cp, pp))
- continue;
- break;
- case W_HBEG | W_HEND:
- if (stringdex (pp, cp) < 0)
- continue;
- break;
+ /*
+ ** Now scan through list of alternate
+ ** mailboxes, and check for a match.
+ */
+ for (mp = &mq; mp->m_next;) {
+ mp = mp->m_next;
+ if (!np->m_mbox)
+ continue;
+ if ((len = strlen(cp = np->m_mbox))
+ < (i = strlen(pp = mp->m_mbox)))
+ continue;
+ switch (mp->m_type & W_MBOX) {
+ case W_NIL:
+ if (mh_strcasecmp(cp, pp))
+ continue;
+ break;
+ case W_MBEG:
+ if (mh_strcasecmp(cp + len - i, pp))
+ continue;
+ break;
+ case W_MEND:
+ if (!uprf(cp, pp))
+ continue;
+ break;
+ case W_MBEG | W_MEND:
+ if (stringdex(pp, cp) < 0)
+ continue;
+ break;
+ }
+
+ if (mp->m_nohost)
+ return 1;
+ if (np->m_host == NULL)
+ continue;
+ if ((len = strlen(cp = np->m_host))
+ < (i = strlen(pp = mp->m_host)))
+ continue;
+ switch (mp->m_type & W_HOST) {
+ case W_NIL:
+ if (mh_strcasecmp(cp, pp))
+ continue;
+ break;
+ case W_HBEG:
+ if (mh_strcasecmp (cp + len - i, pp))
+ continue;
+ break;
+ case W_HEND:
+ if (!uprf(cp, pp))
+ continue;
+ break;
+ case W_HBEG | W_HEND:
+ if (stringdex(pp, cp) < 0)
+ continue;
+ break;
+ }
+ return 1;
+ }
+
+ return 0;
+}
+
+/*
+ * Insert mailname after element and returns the
+ * number of parsed addresses. element is set to
+ * the last parsed addresse.
+ */
+size_t
+getmboxes(char *line, struct mailname **element)
+{
+ struct mailname *mp, *next;
+ char *cp;
+ size_t i = 0;
+
+ next = (*element)->m_next;
+
+ while ((cp = getname(line))) {
+ mp = getm(cp, NULL, 0, AD_HOST, NULL);
+ (*element)->m_next = mp;
+ *element = mp;
+ i++;