/*
- * $Id$
- *
* This module glues libSieve to the Citadel server in order to implement
* the Sieve mailbox filtering language (RFC 3028).
*
#include "citserver.h"
#include "support.h"
#include "config.h"
-#include "policy.h"
#include "database.h"
#include "msgbase.h"
#include "internet_addressing.h"
}
sprintf(vacamsg_text,
- "Content-type: text/plain\n"
+ "Content-type: text/plain charset=utf-8\n"
"\n"
"%s\n"
"\n"
* 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;
- CC->redirect_alloc = SIZ;
+ CC->redirect_buffer = NewStrBufPlain(NULL, SIZ);
CtdlOutputPreLoadedMsg(msg, MT_RFC822, HEADERS_ONLY, 0, 1, 0);
- my.rfc822headers = CC->redirect_buffer;
- headers_len = CC->redirect_len;
- CC->redirect_buffer = NULL;
- CC->redirect_len = 0;
- CC->redirect_alloc = 0;
+ headers_len = StrLength(CC->redirect_buffer);
+ my.rfc822headers = SmashStrBuf(&CC->redirect_buffer);
/*
* libSieve clobbers the stack if it encounters badly formed
}
+void cleanup_sieve(void)
+{
+ struct RoomProcList *ptr, *ptr2;
+
+ if (msiv_extensions != NULL)
+ free(msiv_extensions);
+ msiv_extensions = NULL;
+
+ begin_critical_section(S_SIEVELIST);
+ ptr=sieve_list;
+ while (ptr != NULL) {
+ ptr2 = ptr->next;
+ free(ptr);
+ ptr = ptr2;
+ }
+ sieve_list = NULL;
+ end_critical_section(S_SIEVELIST);
+}
+
int serv_sieve_room(struct ctdlroom *room)
{
if (!strcasecmp(&room->QRname[11], MAILROOM)) {
CtdlRegisterProtoHook(cmd_msiv, "MSIV", "Manage Sieve scripts");
CtdlRegisterRoomHook(serv_sieve_room);
CtdlRegisterSessionHook(perform_sieve_processing, EVT_HOUSE);
+ CtdlRegisterCleanupHook(cleanup_sieve);
}
/* return our Subversion id for the Log */
- return "$Id$";
+ return "sieve";
}