From e7905807730b7092d4557b0d5338b674ceeb24c1 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Sun, 28 Jun 2009 15:57:09 +0200 Subject: [PATCH] Added support for CRLF line breaks in strbuf error handler (ManageSieve fix). --- src/lib-sieve/sieve-error.c | 23 +++++++++++++++++++---- src/lib-sieve/sieve-error.h | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/lib-sieve/sieve-error.c b/src/lib-sieve/sieve-error.c index c2f1e628f..51bf7e5b7 100644 --- a/src/lib-sieve/sieve-error.c +++ b/src/lib-sieve/sieve-error.c @@ -382,6 +382,7 @@ struct sieve_strbuf_ehandler { struct sieve_error_handler handler; string_t *errors; + bool crlf; }; static void sieve_strbuf_verror @@ -395,7 +396,11 @@ static void sieve_strbuf_verror str_printfa(handler->errors, "%s: ", location); str_append(handler->errors, "error: "); str_vprintfa(handler->errors, fmt, args); - str_append(handler->errors, ".\n"); + + if ( !handler->crlf ) + str_append(handler->errors, ".\n"); + else + str_append(handler->errors, ".\r\n"); } static void sieve_strbuf_vwarning @@ -409,7 +414,11 @@ static void sieve_strbuf_vwarning str_printfa(handler->errors, "%s: ", location); str_printfa(handler->errors, "warning: "); str_vprintfa(handler->errors, fmt, args); - str_append(handler->errors, ".\n"); + + if ( !handler->crlf ) + str_append(handler->errors, ".\n"); + else + str_append(handler->errors, ".\r\n"); } static void sieve_strbuf_vinfo @@ -423,11 +432,15 @@ static void sieve_strbuf_vinfo str_printfa(handler->errors, "%s: ", location); str_printfa(handler->errors, "info: "); str_vprintfa(handler->errors, fmt, args); - str_append(handler->errors, ".\n"); + + if ( !handler->crlf ) + str_append(handler->errors, ".\n"); + else + str_append(handler->errors, ".\r\n"); } struct sieve_error_handler *sieve_strbuf_ehandler_create -(string_t *strbuf, unsigned int max_errors) +(string_t *strbuf, bool crlf, unsigned int max_errors) { pool_t pool; struct sieve_strbuf_ehandler *ehandler; @@ -442,6 +455,8 @@ struct sieve_error_handler *sieve_strbuf_ehandler_create ehandler->handler.vwarning = sieve_strbuf_vwarning; ehandler->handler.vinfo = sieve_strbuf_vinfo; + ehandler->crlf = crlf; + return &(ehandler->handler); } diff --git a/src/lib-sieve/sieve-error.h b/src/lib-sieve/sieve-error.h index 4ee103e01..9dda47517 100644 --- a/src/lib-sieve/sieve-error.h +++ b/src/lib-sieve/sieve-error.h @@ -163,7 +163,7 @@ struct sieve_error_handler *sieve_stderr_ehandler_create /* Write errors into a string buffer */ struct sieve_error_handler *sieve_strbuf_ehandler_create - (string_t *strbuf, unsigned int max_errors); + (string_t *strbuf, bool crlf, unsigned int max_errors); /* Write errors to a logfile */ struct sieve_error_handler *sieve_logfile_ehandler_create -- GitLab