Hm, it turns out we need to make sure we call getname() until we get
authorKen Hornstein <kenh@pobox.com>
Wed, 15 Feb 2012 19:55:25 +0000 (14:55 -0500)
committerKen Hornstein <kenh@pobox.com>
Wed, 15 Feb 2012 19:55:25 +0000 (14:55 -0500)
a NULL, otherwise the next set of calls to it will be working from the
"old" search string.

sbr/addrsbr.c

index 633f6ef..ffdac3f 100644 (file)
@@ -373,8 +373,13 @@ ismymbox (struct mailname *np)
        if ((am = context_find ("local-mailbox"))) {
            struct mailname *mptr;
 
-           if ((mptr = getm (am, NULL, 0, AD_NAME, NULL)) == NULL) {
-               admonish (NULL, "invalid entry in local-mailbox: %s", am);
+           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;
            }
 
@@ -387,6 +392,14 @@ ismymbox (struct mailname *np)
            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 ();
        }