dovecot-2.2-pigeonhole: Adjusted Sieve implementation and testsu...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Wed Feb 29 23:52:02 EET 2012
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/b88a6d76839b
changeset: 1605:b88a6d76839b
user: Stephan Bosch <stephan at rename-it.nl>
date: Wed Feb 29 22:51:56 2012 +0100
description:
Adjusted Sieve implementation and testsuite to Dovecot's new smtp_client_open() API.
diffstat:
src/lib-sieve-tool/mail-raw.c | 9 +-
src/lib-sieve/cmd-redirect.c | 42 ++----
src/lib-sieve/edit-mail.c | 2 +-
src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c | 151 +++++++++++++-----------
src/lib-sieve/plugins/notify/cmd-notify.c | 109 ++++++++++-------
src/lib-sieve/plugins/vacation/cmd-vacation.c | 63 +++++----
src/lib-sieve/rfc2822.c | 87 ++++----------
src/lib-sieve/rfc2822.h | 18 +-
src/lib-sieve/sieve-actions.c | 128 +++++++++++----------
src/lib-sieve/sieve-smtp.c | 4 +-
src/lib-sieve/sieve-smtp.h | 2 +-
src/lib-sieve/sieve-types.h | 2 +-
src/plugins/lda-sieve/lda-sieve-plugin.c | 5 +-
src/sieve-tools/sieve-test.c | 9 +-
src/testsuite/testsuite-smtp.c | 19 +-
src/testsuite/testsuite-smtp.h | 2 +-
16 files changed, 335 insertions(+), 317 deletions(-)
diffs (truncated from 1097 to 300 lines):
diff -r 7b8cc0897a79 -r b88a6d76839b src/lib-sieve-tool/mail-raw.c
--- a/src/lib-sieve-tool/mail-raw.c Wed Feb 29 20:07:24 2012 +0100
+++ b/src/lib-sieve-tool/mail-raw.c Wed Feb 29 22:51:56 2012 +0100
@@ -189,8 +189,13 @@
}
if ( ret < 0 ) {
- i_fatal("Can't open delivery mail as raw: %s",
- mailbox_get_last_error(mailr->box, NULL));
+ if ( mailfile == NULL ) {
+ i_fatal("Can't open delivery mail as raw: %s",
+ mailbox_get_last_error(mailr->box, NULL));
+ } else {
+ i_fatal("Can't open delivery mail as raw (file=%s): %s",
+ mailfile, mailbox_get_last_error(mailr->box, NULL));
+ }
}
mailr->trans = mailbox_transaction_begin(mailr->box, 0);
diff -r 7b8cc0897a79 -r b88a6d76839b src/lib-sieve/cmd-redirect.c
--- a/src/lib-sieve/cmd-redirect.c Wed Feb 29 20:07:24 2012 +0100
+++ b/src/lib-sieve/cmd-redirect.c Wed Feb 29 22:51:56 2012 +0100
@@ -5,8 +5,8 @@
#include "ioloop.h"
#include "str-sanitize.h"
#include "istream.h"
-#include "istream-crlf.h"
#include "istream-header-filter.h"
+#include "ostream.h"
#include "rfc2822.h"
@@ -318,12 +318,9 @@
const struct sieve_script_env *senv = aenv->scriptenv;
const char *sender = sieve_message_get_sender(msgctx);
const char *recipient = sieve_message_get_final_recipient(msgctx);
- struct istream *input, *crlf_input;
+ struct istream *input;
+ struct ostream *output;
void *smtp_handle;
- FILE *f;
- const unsigned char *data;
- size_t size;
- int ret;
/* Just to be sure */
if ( !sieve_smtp_available(senv) ) {
@@ -336,30 +333,25 @@
return FALSE;
/* Open SMTP transport */
- smtp_handle = sieve_smtp_open(senv, ctx->to_address, sender, &f);
+ smtp_handle = sieve_smtp_open(senv, ctx->to_address, sender, &output);
/* Remove unwanted headers */
input = i_stream_create_header_filter
- (input, HEADER_FILTER_EXCLUDE, hide_headers,
- N_ELEMENTS(hide_headers), null_header_filter_callback, NULL);
-
- /* Make sure the message contains CRLF consistently */
- crlf_input = i_stream_create_crlf(input);
+ (input, HEADER_FILTER_EXCLUDE | HEADER_FILTER_NO_CR, hide_headers,
+ N_ELEMENTS(hide_headers), null_header_filter_callback, NULL);
- /* Prepend sieve headers (should not affect signatures) */
- rfc2822_header_field_write(f, "X-Sieve", SIEVE_IMPLEMENTATION);
- if ( recipient != NULL )
- rfc2822_header_field_write(f, "X-Sieve-Redirected-From", recipient);
+ T_BEGIN {
+ string_t *hdr = t_str_new(256);
+
+ /* Prepend sieve headers (should not affect signatures) */
+ rfc2822_header_write(hdr, "X-Sieve", SIEVE_IMPLEMENTATION);
+ if ( recipient != NULL )
+ rfc2822_header_write(hdr, "X-Sieve-Redirected-From", recipient);
+ o_stream_send(output, str_data(hdr), str_len(hdr));
+ } T_END;
- /* Pipe the message to the outgoing SMTP transport */
- while ((ret = i_stream_read_data(crlf_input, &data, &size, 0)) > 0) {
- if (fwrite(data, size, 1, f) == 0)
- break;
- i_stream_skip(crlf_input, size);
- }
-
- i_stream_unref(&crlf_input);
- i_stream_unref(&input);
+ o_stream_send_istream(output, input);
+ i_stream_unref(&input);
/* Close SMTP transport */
if ( !sieve_smtp_close(senv, smtp_handle) ) {
diff -r 7b8cc0897a79 -r b88a6d76839b src/lib-sieve/edit-mail.c
--- a/src/lib-sieve/edit-mail.c Wed Feb 29 20:07:24 2012 +0100
+++ b/src/lib-sieve/edit-mail.c Wed Feb 29 22:51:56 2012 +0100
@@ -762,7 +762,7 @@
message_header_encode(value, enc_value);
- lines = rfc2822_header_field_append
+ lines = rfc2822_header_append
(data, field_name, str_c(enc_value), edmail->crlf, &field->body_offset);
/* Copy to new field */
diff -r 7b8cc0897a79 -r b88a6d76839b src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c
--- a/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c Wed Feb 29 20:07:24 2012 +0100
+++ b/src/lib-sieve/plugins/enotify/mailto/ntfy-mailto.c Wed Feb 29 22:51:56 2012 +0100
@@ -23,6 +23,7 @@
#include "str.h"
#include "ioloop.h"
#include "str-sanitize.h"
+#include "ostream.h"
#include "message-date.h"
#include "mail-storage.h"
@@ -386,9 +387,11 @@
const char *body = mtctx->uri->body;
string_t *to, *cc;
const struct uri_mailto_recipient *recipients;
+ const struct uri_mailto_header_field *headers;
void *smtp_handle;
- unsigned int count, i;
- FILE *f;
+ struct ostream *output;
+ string_t *msg;
+ unsigned int count, i, hcount, h;
const char *outmsgid;
/* Get recipients */
@@ -461,74 +464,81 @@
}
}
+ msg = t_str_new(512);
+ outmsgid = sieve_message_get_new_id(senv);
+
+ rfc2822_header_write(msg, "X-Sieve", SIEVE_IMPLEMENTATION);
+ rfc2822_header_write(msg, "Message-ID", outmsgid);
+ rfc2822_header_write(msg, "Date", message_date_create(ioloop_time));
+ rfc2822_header_utf8_printf(msg, "Subject", "%s", subject);
+
+ rfc2822_header_utf8_printf(msg, "From", "%s", from);
+
+ if ( to != NULL )
+ rfc2822_header_utf8_printf(msg, "To", "%s", str_c(to));
+
+ if ( cc != NULL )
+ rfc2822_header_utf8_printf(msg, "Cc", "%s", str_c(cc));
+
+ rfc2822_header_printf(msg, "Auto-Submitted",
+ "auto-notified; owner-email=\"%s\"", recipient);
+ rfc2822_header_write(msg, "Precedence", "bulk");
+
+ /* Set importance */
+ switch ( nact->importance ) {
+ case 1:
+ rfc2822_header_write(msg, "X-Priority", "1 (Highest)");
+ rfc2822_header_write(msg, "Importance", "High");
+ break;
+ case 3:
+ rfc2822_header_write(msg, "X-Priority", "5 (Lowest)");
+ rfc2822_header_write(msg, "Importance", "Low");
+ break;
+ case 2:
+ default:
+ rfc2822_header_write(msg, "X-Priority", "3 (Normal)");
+ rfc2822_header_write(msg, "Importance", "Normal");
+ break;
+ }
+
+ /* Add custom headers */
+
+ headers = array_get(&mtctx->uri->headers, &hcount);
+ for ( h = 0; h < hcount; h++ ) {
+ const char *name = rfc2822_header_field_name_sanitize(headers[h].name);
+
+ rfc2822_header_write(msg, name, headers[h].body);
+ }
+
+ /* Generate message body */
+
+ rfc2822_header_write(msg, "MIME-Version", "1.0");
+ if ( body != NULL ) {
+ if (_contains_8bit(body)) {
+ rfc2822_header_write
+ (msg, "Content-Type", "text/plain; charset=utf-8");
+ rfc2822_header_write(msg, "Content-Transfer-Encoding", "8bit");
+ } else {
+ rfc2822_header_write
+ (msg, "Content-Type", "text/plain; charset=us-ascii");
+ rfc2822_header_write(msg, "Content-Transfer-Encoding", "7bit");
+ }
+ str_printfa(msg, "\r\n%s\r\n", body);
+
+ } else {
+ rfc2822_header_write
+ (msg, "Content-Type", "text/plain; charset=US-ASCII");
+ rfc2822_header_write(msg, "Content-Transfer-Encoding", "7bit");
+
+ str_append(msg, "\r\nNotification of new message.\r\n");
+ }
+
/* Send message to all recipients */
for ( i = 0; i < count; i++ ) {
- const struct uri_mailto_header_field *headers;
- unsigned int h, hcount;
+ smtp_handle = sieve_smtp_open
+ (senv, recipients[i].normalized, from_smtp, &output);
- smtp_handle = sieve_smtp_open
- (senv, recipients[i].normalized, from_smtp, &f);
- outmsgid = sieve_message_get_new_id(senv);
-
- rfc2822_header_field_write(f, "X-Sieve", SIEVE_IMPLEMENTATION);
- rfc2822_header_field_write(f, "Message-ID", outmsgid);
- rfc2822_header_field_write(f, "Date", message_date_create(ioloop_time));
- rfc2822_header_field_utf8_printf(f, "Subject", "%s", subject);
-
- rfc2822_header_field_utf8_printf(f, "From", "%s", from);
-
- if ( to != NULL )
- rfc2822_header_field_utf8_printf(f, "To", "%s", str_c(to));
-
- if ( cc != NULL )
- rfc2822_header_field_utf8_printf(f, "Cc", "%s", str_c(cc));
-
- rfc2822_header_field_printf(f, "Auto-Submitted",
- "auto-notified; owner-email=\"%s\"", recipient);
- rfc2822_header_field_write(f, "Precedence", "bulk");
-
- /* Set importance */
- switch ( nact->importance ) {
- case 1:
- rfc2822_header_field_write(f, "X-Priority", "1 (Highest)");
- rfc2822_header_field_write(f, "Importance", "High");
- break;
- case 3:
- rfc2822_header_field_write(f, "X-Priority", "5 (Lowest)");
- rfc2822_header_field_write(f, "Importance", "Low");
- break;
- case 2:
- default:
- rfc2822_header_field_write(f, "X-Priority", "3 (Normal)");
- rfc2822_header_field_write(f, "Importance", "Normal");
- break;
- }
-
- /* Add custom headers */
-
- headers = array_get(&mtctx->uri->headers, &hcount);
- for ( h = 0; h < hcount; h++ ) {
- const char *name = rfc2822_header_field_name_sanitize(headers[h].name);
-
- rfc2822_header_field_write(f, name, headers[h].body);
- }
-
- /* Generate message body */
- if ( body != NULL ) {
- if (_contains_8bit(body)) {
- rfc2822_header_field_write(f, "MIME-Version", "1.0");
- rfc2822_header_field_write
- (f, "Content-Type", "text/plain; charset=UTF-8");
- rfc2822_header_field_write(f, "Content-Transfer-Encoding", "8bit");
- }
-
- fprintf(f, "\r\n");
- fprintf(f, "%s\r\n", body);
-
- } else {
- fprintf(f, "\r\n");
- fprintf(f, "Notification of new message.\r\n");
- }
+ o_stream_send(output, str_data(msg), str_len(msg));
if ( sieve_smtp_close(senv, smtp_handle) ) {
sieve_enotify_global_info(nenv,
@@ -552,6 +562,7 @@
const char *const *headers;
const char *sender = sieve_message_get_sender(nenv->msgctx);
const char *recipient = sieve_message_get_final_recipient(nenv->msgctx);
+ bool result;
/* Is the recipient unset?
*/
@@ -578,7 +589,11 @@
}
}
- return ntfy_mailto_send(nenv, nact, recipient);
+ T_BEGIN {
+ result = ntfy_mailto_send(nenv, nact, recipient);
+ } T_END;
+
+ return result;
}
diff -r 7b8cc0897a79 -r b88a6d76839b src/lib-sieve/plugins/notify/cmd-notify.c
--- a/src/lib-sieve/plugins/notify/cmd-notify.c Wed Feb 29 20:07:24 2012 +0100
+++ b/src/lib-sieve/plugins/notify/cmd-notify.c Wed Feb 29 22:51:56 2012 +0100
More information about the dovecot-cvs
mailing list