/* If the last item in a list of recipients was truncated to a partial address,
authorArt Cancro <ajc@citadel.org>
Wed, 5 Nov 2008 16:26:41 +0000 (16:26 +0000)
committerArt Cancro <ajc@citadel.org>
Wed, 5 Nov 2008 16:26:41 +0000 (16:26 +0000)
 * remove it completely in order to avoid choking libSieve

citadel/modules/sieve/serv_sieve.c
citadel/msgbase.c

index c86c1b0baafabd189f47bcbd1f6815020d9cb702..473a8dcf9cc7e8860f54f48b548cb3db46473298 100644 (file)
@@ -640,7 +640,7 @@ void sieve_do_msg(long msgnum, void *userdata) {
        }
 
 
-       CtdlLogPrintf(CTDL_DEBUG, "HEADERS-------\n%s\n", my.rfc822headers);
+       CtdlLogPrintf(CTDL_DEBUG, "HEADERS-------\n\e[31m%s\e[0m\n", my.rfc822headers);
 
        sieve2_setvalue_string(sieve2_context, "allheaders", my.rfc822headers);
        
index 819913f47a9e87203212d886ab1dff6edfcda623..ac0c33161cef9cc1063c2594dd9abe99c688a0b9 100644 (file)
@@ -1593,6 +1593,31 @@ char *qp_encode_email_addrs(char *source)
 }
 
 
+/* If the last item in a list of recipients was truncated to a partial address,
+ * remove it completely in order to avoid choking libSieve
+ */
+void sanitize_truncated_recipient(char *str)
+{
+       if (!str) return;
+       if (num_tokens(str, ',') < 2) return;
+
+       int len = strlen(str);
+       if (len < 900) return;
+       if (len > 998) str[998] = 0;
+
+       char *cptr = strrchr(str, ',');
+       if (!cptr) return;
+
+       char *lptr = strchr(cptr, '<');
+       char *rptr = strchr(cptr, '>');
+
+       if ( (lptr) && (rptr) && (rptr > lptr) ) return;
+
+       *cptr = 0;
+}
+
+
+
 /*
  * Get a message off disk.  (returns om_* values found in msgbase.h)
  */
@@ -1792,8 +1817,10 @@ int CtdlOutputPreLoadedMsg(
                                        safestrncpy(suser, mptr, sizeof suser);
                                }
                                else if (i == 'Y') {
-                                       if ((flags & QP_EADDR) != 0) 
+                                       if ((flags & QP_EADDR) != 0) {
                                                mptr = qp_encode_email_addrs(mptr);
+                                       }
+                                       sanitize_truncated_recipient(mptr);
                                        cprintf("CC: %s%s", mptr, nl);
                                }
                                else if (i == 'P') {
@@ -1824,13 +1851,16 @@ int CtdlOutputPreLoadedMsg(
                                {
                                        if (haschar(mptr, '@') == 0)
                                        {
+                                               sanitize_truncated_recipient(mptr);
                                                cprintf("To: %s@%s", mptr, config.c_fqdn);
                                                cprintf("%s", nl);
                                        }
                                        else
                                        {
-                                               if ((flags & QP_EADDR) != 0) 
+                                               if ((flags & QP_EADDR) != 0) {
                                                        mptr = qp_encode_email_addrs(mptr);
+                                               }
+                                               sanitize_truncated_recipient(mptr);
                                                cprintf("To: %s", mptr);
                                                cprintf("%s", nl);
                                        }