* This module glues libSieve to the Citadel server in order to implement
* the Sieve mailbox filtering language (RFC 3028).
*
- * Copyright (c) 1987-2015 by the citadel.org team
+ * Copyright (c) 1987-2020 by the citadel.org team
*
* This program is open source software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3.
}
-
/*
* Callback function to indicate that a message should be rejected
*/
}
-
/*
* Callback function to indicate that a vacation message should be generated
*/
}
+#if 0
/*
* Callback function to parse addresses per local system convention
* It is disabled because we don't support subaddresses.
*/
-#if 0
int ctdl_getsubaddress(sieve2_context_t *s, void *my)
{
struct ctdl_sieve *cs = (struct ctdl_sieve *)my;
}
+#if 0
/*
* Callback function to fetch message body
* (Uncomment the code if we implement this extension)
*
+ */
int ctdl_getbody(sieve2_context_t *s, void *my)
{
return SIEVE2_ERROR_UNSUPPORTED;
}
- *
- */
+#endif
/*
return SIEVE2_ERROR_GETSCRIPT;
}
+
/*
* Callback function to retrieve message headers
*/
}
-
/*
* Add a room to the list of those rooms which potentially require sieve processing
*/
}
-
/*
* Perform sieve processing for one message (called by sieve_do_room() for each message)
*/
size_t headers_len = 0;
int len = 0;
- if (u == NULL)
- {
- syslog(LOG_EMERG, "Can't process message <%ld> without userdata!", msgnum);
+ if (u == NULL) {
+ syslog(LOG_ERR, "Can't process message <%ld> without userdata!", msgnum);
return;
}
if (!CM_IsEmpty(msg, erFc822Addr)) {
safestrncpy(my.sender, msg->cm_fields[erFc822Addr], sizeof my.sender);
}
- else if ( (!CM_IsEmpty(msg, eAuthor)) && (!CM_IsEmpty(msg, eNodeName)) ) {
- snprintf(my.sender, sizeof my.sender, "%s@%s", msg->cm_fields[eAuthor], msg->cm_fields[eNodeName]);
- }
else if (!CM_IsEmpty(msg, eAuthor)) {
safestrncpy(my.sender, msg->cm_fields[eAuthor], sizeof my.sender);
}
}
else if (!CM_IsEmpty(msg, eRecipient)) {
safestrncpy(my.envelope_to, msg->cm_fields[eRecipient], sizeof my.envelope_to);
- if (!CM_IsEmpty(msg, eDestination)) {
- strcat(my.envelope_to, "@");
- strcat(my.envelope_to, msg->cm_fields[eDestination]);
- }
stripallbut(my.envelope_to, '<', '>');
}
else {
syslog(LOG_DEBUG, "Calling sieve2_execute()");
res = sieve2_execute(sieve2_context, &my);
if (res != SIEVE2_OK) {
- syslog(LOG_CRIT, "sieve2_execute() returned %d: %s", res, sieve2_errstr(res));
+ syslog(LOG_ERR, "sieve2_execute() returned %d: %s", res, sieve2_errstr(res));
}
free(my.rfc822headers);
syslog(LOG_DEBUG, "Rules found. Performing Sieve processing for <%s>", roomname);
if (CtdlGetRoom(&CC->room, roomname) != 0) {
- syslog(LOG_CRIT, "ERROR: cannot load <%s>", roomname);
+ syslog(LOG_ERR, "ERROR: cannot load <%s>", roomname);
return;
}
res = sieve2_alloc(&sieve2_context);
if (res != SIEVE2_OK) {
- syslog(LOG_CRIT, "sieve2_alloc() returned %d: %s", res, sieve2_errstr(res));
+ syslog(LOG_ERR, "sieve2_alloc() returned %d: %s", res, sieve2_errstr(res));
return;
}
res = sieve2_callbacks(sieve2_context, ctdl_sieve_callbacks);
if (res != SIEVE2_OK) {
- syslog(LOG_CRIT, "sieve2_callbacks() returned %d: %s", res, sieve2_errstr(res));
+ syslog(LOG_ERR, "sieve2_callbacks() returned %d: %s", res, sieve2_errstr(res));
goto BAIL;
}
my.u = &u;
res = sieve2_validate(sieve2_context, &my);
if (res != SIEVE2_OK) {
- syslog(LOG_CRIT, "sieve2_validate() returned %d: %s", res, sieve2_errstr(res));
+ syslog(LOG_ERR, "sieve2_validate() returned %d: %s", res, sieve2_errstr(res));
goto BAIL;
}
BAIL:
res = sieve2_free(&sieve2_context);
if (res != SIEVE2_OK) {
- syslog(LOG_CRIT, "sieve2_free() returned %d: %s", res, sieve2_errstr(res));
+ syslog(LOG_ERR, "sieve2_free() returned %d: %s", res, sieve2_errstr(res));
}
/* Rewrite the config if we have to */
extract_token(script_name, argbuf, 1, '|', sizeof script_name);
if (!IsEmptyStr(script_name)) {
cprintf("%d Transmit script now\n", SEND_LISTING);
- script_content = CtdlReadMessageBody(HKEY("000"), CtdlGetConfigLong("c_maxmsglen"), NULL, 0, 0);
+ script_content = CtdlReadMessageBody(HKEY("000"), CtdlGetConfigLong("c_maxmsglen"), NULL, 0);
msiv_putscript(&u, script_name, script_content);
changes_made = 1;
}
*/
res = sieve2_alloc(&sieve2_context);
if (res != SIEVE2_OK) {
- syslog(LOG_CRIT, "sieve2_alloc() returned %d: %s", res, sieve2_errstr(res));
+ syslog(LOG_ERR, "sieve2_alloc() returned %d: %s", res, sieve2_errstr(res));
return;
}
res = sieve2_callbacks(sieve2_context, ctdl_sieve_callbacks);
if (res != SIEVE2_OK) {
- syslog(LOG_CRIT, "sieve2_callbacks() returned %d: %s", res, sieve2_errstr(res));
+ syslog(LOG_ERR, "sieve2_callbacks() returned %d: %s", res, sieve2_errstr(res));
goto BAIL;
}
BAIL: res = sieve2_free(&sieve2_context);
if (res != SIEVE2_OK) {
- syslog(LOG_CRIT, "sieve2_free() returned %d: %s", res, sieve2_errstr(res));
+ syslog(LOG_ERR, "sieve2_free() returned %d: %s", res, sieve2_errstr(res));
}
}
+
void cleanup_sieve(void)
{
struct RoomProcList *ptr, *ptr2;
end_critical_section(S_SIEVELIST);
}
+
int serv_sieve_room(struct ctdlroom *room)
{
if (!strcasecmp(&room->QRname[11], MAILROOM)) {
return 0;
}
+
CTDL_MODULE_INIT(sieve)
{
if (!threading)
/* return our module name for the log */
return "sieve";
}
-