]> diplodocus.org Git - nmh/blobdiff - sbr/addrsbr.c
Report an error when the width used by putaddr is less than the label width.
[nmh] / sbr / addrsbr.c
index ffdac3ffea78a45725f5c143c29e30d556d7fa8f..7bf4673482d8f542aaebbdc2ea322d6ff3c16e54 100644 (file)
@@ -364,35 +364,30 @@ 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
      * list of alternate mailboxes.
      */
     if (am == NULL) {
+       mq.m_next = NULL;
+       mq.m_mbox = getusername ();
+
        if ((am = context_find ("local-mailbox"))) {
-           struct mailname *mptr;
+
+           localmailbox++;
 
            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) {
+           if ((mq.m_next = 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.
@@ -400,12 +395,8 @@ ismymbox (struct mailname *np)
 
            while ((cp = getname(am)) != NULL)
                ;
-       } else {
-           mq.m_mbox = getusername ();
        }
 
-       mq.m_next = NULL;
-
        if ((am = context_find ("alternate-mailboxes")) == NULL)
            am = getusername();
        else {
@@ -451,25 +442,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
@@ -478,8 +474,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) {