]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/sieve/serv_sieve.c
/* If the last item in a list of recipients was truncated to a partial address,
[citadel.git] / citadel / modules / sieve / serv_sieve.c
index e8156501b35b6d436727485cf2ea0e2ca3de72ef..473a8dcf9cc7e8860f54f48b548cb3db46473298 100644 (file)
@@ -508,9 +508,9 @@ void sieve_do_msg(long msgnum, void *userdata) {
        size_t headers_len = 0;
        int len = 0;
 
-       if (userdata == NULL)
+       if (u == NULL)
        {
-               CtdlLogPrintf(CTDL_EMERG, "Cant process Message <%ld>without Userdata!\n", msgnum);
+               CtdlLogPrintf(CTDL_EMERG, "Can't process message <%ld> without userdata!\n", msgnum);
                return;
        }
 
@@ -523,6 +523,7 @@ void sieve_do_msg(long msgnum, void *userdata) {
 
        /*
         * Grab the message headers so we can feed them to libSieve.
+        * Use HEADERS_ONLY rather than HEADERS_FAST in order to include second-level headers.
         */
        CC->redirect_buffer = malloc(SIZ);
        CC->redirect_len = 0;
@@ -534,6 +535,12 @@ void sieve_do_msg(long msgnum, void *userdata) {
        CC->redirect_len = 0;
        CC->redirect_alloc = 0;
 
+       if (u == NULL)
+       {
+               CtdlLogPrintf(CTDL_EMERG, "userdata got clobbz0red!  aaaaaaaaghhh!!!!\n");
+               abort();
+       }
+
        /*
         * libSieve clobbers the stack if it encounters badly formed
         * headers.  Sanitize our headers by stripping nonprintable
@@ -626,14 +633,35 @@ void sieve_do_msg(long msgnum, void *userdata) {
 
        CtdlFreeMessage(msg);
 
+       if (u == NULL)
+       {
+               CtdlLogPrintf(CTDL_EMERG, "userdata got clobbz0red!  aaaaaaaaghhh!!!!\n");
+               abort();
+       }
+
+
+       CtdlLogPrintf(CTDL_DEBUG, "HEADERS-------\n\e[31m%s\e[0m\n", my.rfc822headers);
+
        sieve2_setvalue_string(sieve2_context, "allheaders", my.rfc822headers);
        
+       if (u == NULL)
+       {
+               CtdlLogPrintf(CTDL_EMERG, "userdata got clobbz0red!  aaaaaaaaghhh!!!!\n");
+               abort();
+       }
+
        CtdlLogPrintf(CTDL_DEBUG, "Calling sieve2_execute()\n");
        res = sieve2_execute(sieve2_context, &my);
        if (res != SIEVE2_OK) {
                CtdlLogPrintf(CTDL_CRIT, "sieve2_execute() returned %d: %s\n", res, sieve2_errstr(res));
        }
 
+       if (u == NULL)
+       {
+               CtdlLogPrintf(CTDL_EMERG, "userdata got clobbz0red!  aaaaaaaaghhh!!!!\n");
+               abort();
+       }
+
        free(my.rfc822headers);
        my.rfc822headers = NULL;
 
@@ -646,6 +674,12 @@ void sieve_do_msg(long msgnum, void *userdata) {
                CtdlDeleteMessages(CC->room.QRname, &msgnum, 1, "");
        }
 
+       if (u == NULL)
+       {
+               CtdlLogPrintf(CTDL_EMERG, "userdata got clobbz0red!  aaaaaaaaghhh!!!!\n");
+               abort();
+       }
+
        CtdlLogPrintf(CTDL_DEBUG, "Completed sieve processing on msg <%ld>\n", msgnum);
        u->lastproc = msgnum;