Sigh. Turns out the first entry in the list isn't actually checked, so
authorKen Hornstein <kenh@pobox.com>
Wed, 15 Feb 2012 20:46:28 +0000 (15:46 -0500)
committerKen Hornstein <kenh@pobox.com>
Wed, 15 Feb 2012 20:46:28 +0000 (15:46 -0500)
we need to make sure that our Local-Mailbox entry starts second.

sbr/addrsbr.c

index ffdac3f..70af81a 100644 (file)
@@ -370,6 +370,9 @@ ismymbox (struct mailname *np)
      * list of alternate mailboxes.
      */
     if (am == NULL) {
+       mq.m_next = NULL;
+       mq.m_mbox = getusername ();
+
        if ((am = context_find ("local-mailbox"))) {
            struct mailname *mptr;
 
@@ -378,34 +381,20 @@ ismymbox (struct mailname *np)
                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.
             */
 
            while ((cp = getname(am)) != NULL)
                ;
-       } else {
-           mq.m_mbox = getusername ();
        }
 
-       mq.m_next = NULL;
-
        if ((am = context_find ("alternate-mailboxes")) == NULL)
            am = getusername();
        else {