X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Faddrsbr.c;h=9edb1392c75b1925b11c252c0c6e63bb07ada411;hb=40ae9d199d58c85469e3528fc53205143baf29d2;hp=8a468bbb141b72c3086e15801236fa55076ddb67;hpb=f931795fd8973c1edb40a26ecf87dbe27f7a6148;p=mmh diff --git a/sbr/addrsbr.c b/sbr/addrsbr.c index 8a468bb..9edb139 100644 --- a/sbr/addrsbr.c +++ b/sbr/addrsbr.c @@ -10,6 +10,7 @@ #include #include #include +#include /* High level parsing of addresses: @@ -79,12 +80,6 @@ static char adr[BUFSIZ]; extern boolean username_extension_masquerading; /* defined in mts.c */ -/* - * external prototypes - */ -char *getusername (void); - - char * getname (char *addrs) { @@ -364,6 +359,7 @@ ismymbox (struct mailname *np) struct mailname *mp; static char *am = NULL; static struct mailname mq; + static int localmailbox = 0; /* * If this is the first call, initialize @@ -372,6 +368,30 @@ ismymbox (struct mailname *np) if (am == NULL) { mq.m_next = NULL; mq.m_mbox = getusername (); + + if ((am = context_find ("local-mailbox"))) { + + localmailbox++; + + if ((cp = getname(am)) == NULL) { + admonish (NULL, "Unable to find address in local-mailbox"); + return 0; + } + + if ((mq.m_next = getm (cp, NULL, 0, AD_NAME, NULL)) == NULL) { + admonish (NULL, "invalid entry in local-mailbox: %s", cp); + return 0; + } + + /* + * 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) + ; + } + if ((am = context_find ("alternate-mailboxes")) == NULL) am = getusername(); else { @@ -417,25 +437,30 @@ ismymbox (struct mailname *np) if (np == NULL) /* XXX */ return 0; - switch (np->m_type) { - case NETHOST: - len = strlen (cp = LocalName (0)); - if (!uprf (np->m_host, cp) || np->m_host[len] != '.') - break; - goto local_test; + /* + * Don't perform this "local" test if we have a Local-Mailbox set + */ - case UUCPHOST: - if (mh_strcasecmp (np->m_host, SystemName())) - break; /* fall */ - case LOCALHOST: + if (! localmailbox) + switch (np->m_type) { + case NETHOST: + len = strlen (cp = LocalName (0)); + if (!uprf (np->m_host, cp) || np->m_host[len] != '.') + break; + goto local_test; + + case UUCPHOST: + if (mh_strcasecmp (np->m_host, SystemName())) + break; /* fall */ + case LOCALHOST: local_test: ; - if (!mh_strcasecmp (np->m_mbox, mq.m_mbox)) - return 1; - break; + if (!mh_strcasecmp (np->m_mbox, mq.m_mbox)) + return 1; + break; - default: - break; - } + default: + break; + } /* * Now scan through list of alternate @@ -444,8 +469,7 @@ local_test: ; for (mp = &mq; mp->m_next;) { mp = mp->m_next; if (!np->m_mbox) - continue; - if ((len = strlen (cp = np->m_mbox)) + continue; if ((len = strlen (cp = np->m_mbox)) < (i = strlen (pp = mp->m_mbox))) continue; switch (mp->m_type & W_MBOX) {