dovecot-2.2-pigeonhole: lib-sieve: mime extension: Improved trac...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Sun Nov 29 19:01:14 UTC 2015
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/737323455d25
changeset: 2152:737323455d25
user: Stephan Bosch <stephan at rename-it.nl>
date: Sun Nov 29 20:00:37 2015 +0100
description:
lib-sieve: mime extension: Improved trace output.
diffstat:
src/lib-sieve/plugins/mime/cmd-foreverypart.c | 12 +++-
src/lib-sieve/plugins/mime/tag-mime.c | 73 +++++++++++++++++++++++---
src/lib-sieve/sieve-message.c | 9 ++-
3 files changed, 79 insertions(+), 15 deletions(-)
diffs (205 lines):
diff -r b803686a0731 -r 737323455d25 src/lib-sieve/plugins/mime/cmd-foreverypart.c
--- a/src/lib-sieve/plugins/mime/cmd-foreverypart.c Sun Nov 29 18:33:40 2015 +0100
+++ b/src/lib-sieve/plugins/mime/cmd-foreverypart.c Sun Nov 29 20:00:37 2015 +0100
@@ -291,7 +291,8 @@
* Perform operation
*/
- sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS, "foreverypart loop begin");
+ sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS,
+ "foreverypart loop begin");
sieve_runtime_trace_descend(renv);
sfploop = ext_foreverypart_runtime_loop_get_current(renv);
@@ -347,7 +348,7 @@
*/
sieve_runtime_trace(renv,
- SIEVE_TRLVL_ACTIONS, "foreverypart loop end");
+ SIEVE_TRLVL_COMMANDS, "foreverypart loop end");
sieve_runtime_trace_descend(renv);
loop = sieve_interpreter_loop_get
@@ -361,9 +362,14 @@
sieve_interpreter_loop_get_context(loop);
i_assert(fploop->part != NULL);
fploop->part = sieve_message_part_iter_next(&fploop->part_iter);
- if ( fploop->part == NULL )
+ if ( fploop->part == NULL ) {
+ sieve_runtime_trace(renv,
+ SIEVE_TRLVL_COMMANDS, "no more message parts");
return sieve_interpreter_loop_break(renv->interp, loop);
+ }
+ sieve_runtime_trace(renv,
+ SIEVE_TRLVL_COMMANDS, "switched to next message part");
return sieve_interpreter_loop_next(renv->interp, loop, loop_begin);
}
diff -r b803686a0731 -r 737323455d25 src/lib-sieve/plugins/mime/tag-mime.c
--- a/src/lib-sieve/plugins/mime/tag-mime.c Sun Nov 29 18:33:40 2015 +0100
+++ b/src/lib-sieve/plugins/mime/tag-mime.c Sun Nov 29 20:00:37 2015 +0100
@@ -357,16 +357,20 @@
static string_t *
content_type_param_next(struct content_header_stringlist *strlist)
-{
+{
+ const struct sieve_runtime_env *renv = strlist->strlist.runenv;
const char *const *values = strlist->param_values;
+ bool trace = strlist->strlist.trace;
i_assert( strlist->params != NULL );
+ /* Iterate over all parsed parameter values */
for ( ; *values != NULL; values += 2 ) {
const char *const *params = strlist->params;
const char *name = values[0], *value = values[1];
size_t nlen = strlen(name);
+ /* Iterate over all interesting parameter names */
for ( ; *params != NULL; params++ ) {
size_t plen = strlen(*params);
@@ -376,15 +380,29 @@
if ( plen == nlen ) {
if ( strcasecmp(name, *params) == 0 ) {
+ /* Return raw value */
+ if ( trace ) {
+ sieve_runtime_trace(renv, 0,
+ "found mime parameter `%s' in mime header",
+ *params);
+ }
+
strlist->param_values = values + 2;
return t_str_new_const(value, strlen(value));
}
} else {
+ if ( trace ) {
+ sieve_runtime_trace(renv, 0,
+ "found encoded parameter `%s' in mime header",
+ *params);
+ }
+
if ( strncasecmp(name, *params, plen) == 0 ) {
string_t *result = NULL;
strlist->param_values = values + 2;
+ /* Decode value first */
// FIXME: transcode charset
value = strchr(value, '\'');
if (value != NULL)
@@ -409,6 +427,8 @@
content_header_parse(struct content_header_stringlist *strlist,
const char *hdr_name, string_t *str)
{
+ const struct sieve_runtime_env *renv = strlist->strlist.runenv;
+ bool trace = strlist->strlist.trace;
struct rfc822_parser_context parser;
const char *type, *p;
bool is_ctype = FALSE;
@@ -419,8 +439,13 @@
if ( strcasecmp(hdr_name, "content-type") == 0 )
is_ctype = TRUE;
- else if ( strcasecmp(hdr_name, "content-disposition") != 0 )
+ else if ( strcasecmp(hdr_name, "content-disposition") != 0 ) {
+ if ( trace ) {
+ sieve_runtime_trace(renv, 0,
+ "non-mime header yields empty string");
+ }
return t_str_new(0);
+ }
/* Initialize parsing */
rfc822_parser_init(&parser, str_data(str), str_len(str), NULL);
@@ -450,6 +475,7 @@
if ( strlist->option == EXT_MIME_OPTION_PARAM ) {
string_t *param_val;
+ /* MIME parameter */
i_assert( strlist->params != NULL );
// FIXME: not very nice when multiple parameters in the same header
@@ -461,17 +487,44 @@
if ( param_val != NULL )
content = param_val;
} else {
+ /* Get :type/:subtype:/:contenttype value */
type = str_c(content);
- if ( (p=strchr(type, '/')) == NULL ) {
- i_assert( !is_ctype );
- if ( strlist->option == EXT_MIME_OPTION_SUBTYPE )
+ p = strchr(type, '/');
+ switch ( strlist->option ) {
+ case EXT_MIME_OPTION_TYPE:
+ if ( trace ) {
+ sieve_runtime_trace(renv, 0,
+ "extracted MIME type");
+ }
+ if ( p != NULL ) {
+ i_assert( is_ctype );
+ str_truncate(content, (p - type));
+ }
+ break;
+ case EXT_MIME_OPTION_SUBTYPE:
+ if ( p == NULL ) {
+ i_assert( !is_ctype );
+ if ( trace ) {
+ sieve_runtime_trace(renv, 0,
+ "no MIME sub-type for content-disposition");
+ }
str_truncate(content, 0);
- } else {
+ break;
+ }
+
i_assert( is_ctype );
- if ( strlist->option == EXT_MIME_OPTION_TYPE )
- str_truncate(content, (p - type));
- else if ( strlist->option == EXT_MIME_OPTION_SUBTYPE )
- str_delete(content, 0, (p - type) + 1);
+ if ( trace ) {
+ sieve_runtime_trace(renv, 0,
+ "extracted MIME sub-type");
+ }
+ str_delete(content, 0, (p - type) + 1);
+ break;
+ case EXT_MIME_OPTION_CONTENTTYPE:
+ sieve_runtime_trace(renv, 0,
+ "extracted full MIME contenttype");
+ break;
+ default:
+ break;
}
}
diff -r b803686a0731 -r 737323455d25 src/lib-sieve/sieve-message.c
--- a/src/lib-sieve/sieve-message.c Sun Nov 29 18:33:40 2015 +0100
+++ b/src/lib-sieve/sieve-message.c Sun Nov 29 20:00:37 2015 +0100
@@ -1722,8 +1722,13 @@
(&mpart->headers, &hdrlist->headers_count);
hdrlist->headers_index = 0;
}
- if ( hdrlist->headers_count > 0 )
+ if ( hdrlist->headers_count > 0 ) {
+ if ( _hdrlist->strlist.trace ) {
+ sieve_runtime_trace(renv, 0,
+ "moving to next message part");
+ }
break;
+ }
}
/* Read next header name from source list */
@@ -1735,7 +1740,7 @@
if ( _hdrlist->strlist.trace ) {
sieve_runtime_trace(renv, 0,
- "extracting `%s' headers from message",
+ "extracting `%s' headers from message part",
str_sanitize(str_c(hdr_item), 80));
}
More information about the dovecot-cvs
mailing list