dovecot-2.0-pigeonhole: Improved runtime trace debugging towards...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Tue Aug 3 19:58:47 EEST 2010
details: http://hg.rename-it.nl/dovecot-2.0-pigeonhole/rev/15e39ffe0ff1
changeset: 1357:15e39ffe0ff1
user: Stephan Bosch <stephan at rename-it.nl>
date: Tue Aug 03 18:58:36 2010 +0200
description:
Improved runtime trace debugging towards something more intuitively readable.
diffstat:
TODO | 8 +-
src/lib-sieve/cmd-discard.c | 3 +-
src/lib-sieve/cmd-redirect.c | 9 +-
src/lib-sieve/cmd-stop.c | 3 +-
src/lib-sieve/ext-envelope.c | 6 +
src/lib-sieve/ext-fileinto.c | 9 +-
src/lib-sieve/ext-reject.c | 16 ++-
src/lib-sieve/plugins/enotify/cmd-notify.c | 8 +-
src/lib-sieve/plugins/imap4flags/cmd-flag.c | 5 +-
src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c | 81 +++++++++++++-------
src/lib-sieve/plugins/mailbox/tst-mailboxexists.c | 41 +++++++++-
src/lib-sieve/plugins/regex/mcht-regex.c | 4 +-
src/lib-sieve/plugins/relational/mcht-count.c | 8 +-
src/lib-sieve/plugins/vacation/cmd-vacation.c | 9 +-
src/lib-sieve/plugins/variables/cmd-set.c | 7 +-
src/lib-sieve/sieve-address-parts.c | 26 ++++++
src/lib-sieve/sieve-address-parts.h | 2 +
src/lib-sieve/sieve-address.c | 19 ++++
src/lib-sieve/sieve-address.h | 12 ++-
src/lib-sieve/sieve-code.c | 4 +-
src/lib-sieve/sieve-common.h | 4 +-
src/lib-sieve/sieve-interpreter.c | 15 +++-
src/lib-sieve/sieve-match.c | 22 ++++-
src/lib-sieve/sieve-message.c | 8 ++
src/lib-sieve/sieve-runtime-trace.c | 14 ++-
src/lib-sieve/sieve-runtime-trace.h | 53 ++++++++++---
src/lib-sieve/sieve-runtime.h | 3 +-
src/lib-sieve/sieve-stringlist.h | 17 +++-
src/lib-sieve/tst-exists.c | 12 ++-
src/lib-sieve/tst-size.c | 18 ++++
src/testsuite/cmd-test-binary.c | 14 ++-
src/testsuite/cmd-test-config.c | 28 +++++-
src/testsuite/cmd-test-fail.c | 3 +-
src/testsuite/cmd-test-mailbox.c | 7 +-
src/testsuite/cmd-test-message.c | 52 +++++++++---
src/testsuite/cmd-test-result-print.c | 3 +
src/testsuite/cmd-test-result-reset.c | 3 +
src/testsuite/cmd-test-set.c | 10 +-
src/testsuite/cmd-test.c | 5 +-
src/testsuite/testsuite-script.c | 34 ++++++--
src/testsuite/testsuite-script.h | 9 +-
src/testsuite/tst-test-error.c | 4 +-
src/testsuite/tst-test-multiscript.c | 19 +---
src/testsuite/tst-test-result-execute.c | 9 ++-
src/testsuite/tst-test-result.c | 2 +-
src/testsuite/tst-test-script-compile.c | 15 +--
src/testsuite/tst-test-script-run.c | 11 ++-
47 files changed, 504 insertions(+), 170 deletions(-)
diffs (truncated from 1689 to 300 lines):
diff -r 1c66cb52772d -r 15e39ffe0ff1 TODO
--- a/TODO Tue Aug 03 18:30:14 2010 +0200
+++ b/TODO Tue Aug 03 18:58:36 2010 +0200
@@ -1,14 +1,12 @@
Current activities:
-* Improve debugging support in the sieve-test tool:
- - Improve trace debugging towards something more intuitively readable.
+* Cleanup the test suite
+ - Make uniform command implementations
+ - Cleanup test scripts
Next (in order of descending priority/precedence):
* Update man pages to match style of Dovecot man pages.
-* Cleanup the test suite
- - Make uniform command implementations
- - Cleanup test scripts
* Improve error handling and logging
- Detect permission errors when writing global script binaries and advise the
administrator on using sievec to precompile the scripts.
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/cmd-discard.c
--- a/src/lib-sieve/cmd-discard.c Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/cmd-discard.c Tue Aug 03 18:58:36 2010 +0200
@@ -110,7 +110,8 @@
/* Source line */
source_line = sieve_runtime_get_command_location(renv);
- sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS, "discard action; cancel implicit keep");
+ sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS,
+ "discard action; cancel implicit keep");
return ( sieve_result_add_action
(renv, NULL, &act_discard, NULL, source_line, NULL, 0) >= 0 );
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/cmd-redirect.c
--- a/src/lib-sieve/cmd-redirect.c Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/cmd-redirect.c Tue Aug 03 18:58:36 2010 +0200
@@ -219,9 +219,12 @@
/* FIXME: perform address normalization if the string is not a string literal
*/
- sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS,
- "redirect action; forward message to address `%s'",
- str_sanitize(str_c(redirect), 64));
+ if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_ACTIONS) ) {
+ sieve_runtime_trace(renv, 0, "redirect action");
+ sieve_runtime_trace_descend(renv);
+ sieve_runtime_trace(renv, 0, "forward message to address `%s'",
+ str_sanitize(str_c(redirect), 80));
+ }
/* Add redirect action to the result */
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/cmd-stop.c
--- a/src/lib-sieve/cmd-stop.c Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/cmd-stop.c Tue Aug 03 18:58:36 2010 +0200
@@ -77,7 +77,8 @@
static int opc_stop_execute
(const struct sieve_runtime_env *renv, sieve_size_t *address ATTR_UNUSED)
{
- sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS, "stop");
+ sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS,
+ "stop command; end all script execution");
sieve_interpreter_interrupt(renv->interp);
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/ext-envelope.c
--- a/src/lib-sieve/ext-envelope.c Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/ext-envelope.c Tue Aug 03 18:58:36 2010 +0200
@@ -328,6 +328,12 @@
if ( (ret=sieve_stringlist_next_item(addrlist->env_parts, &envp_item))
<= 0 )
return ret;
+
+ if ( _addrlist->strlist.trace ) {
+ sieve_runtime_trace(_addrlist->strlist.runenv, 0,
+ "getting `%s' part from message envelope",
+ str_sanitize(str_c(envp_item), 80));
+ }
if ( (epart=_envelope_part_find(str_c(envp_item))) != NULL ) {
addrlist->value_index = 0;
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/ext-fileinto.c
--- a/src/lib-sieve/ext-fileinto.c Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/ext-fileinto.c Tue Aug 03 18:58:36 2010 +0200
@@ -178,8 +178,13 @@
*/
mailbox = str_sanitize(str_c(folder), 64);
- sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS,
- "fileinto action; store message in mailbox `%s'", mailbox);
+
+ if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_ACTIONS) ) {
+ sieve_runtime_trace(renv, 0, "fileinto action");
+ sieve_runtime_trace_descend(renv);
+ sieve_runtime_trace(renv, 0, "store message in mailbox `%s'",
+ str_sanitize(mailbox, 80));
+ }
/* Add action to result */
ret = sieve_act_store_add_to_result
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/ext-reject.c
--- a/src/lib-sieve/ext-reject.c Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/ext-reject.c Tue Aug 03 18:58:36 2010 +0200
@@ -290,12 +290,16 @@
* Perform operation
*/
- if ( sieve_operation_is(oprtn, ereject_operation) )
- sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS,
- "ereject action; reject message with reason `%s'", str_sanitize(str_c(reason), 64));
- else
- sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS,
- "reject action; reject message with reason `%s'", str_sanitize(str_c(reason), 64));
+ if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_ACTIONS) ) {
+ if ( sieve_operation_is(oprtn, ereject_operation) )
+ sieve_runtime_trace(renv, 0, "ereject action");
+ else
+ sieve_runtime_trace(renv, 0, "reject action");
+
+ sieve_runtime_trace_descend(renv);
+ sieve_runtime_trace(renv, 0, "reject message with reason `%s'",
+ str_sanitize(str_c(reason), 64));
+ }
/* Add reject action to the result */
pool = sieve_result_pool(renv->result);
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/plugins/enotify/cmd-notify.c
--- a/src/lib-sieve/plugins/enotify/cmd-notify.c Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/plugins/enotify/cmd-notify.c Tue Aug 03 18:58:36 2010 +0200
@@ -2,6 +2,7 @@
*/
#include "lib.h"
+#include "str-sanitize.h"
#include "sieve-common.h"
#include "sieve-error.h"
@@ -465,7 +466,12 @@
/* Trace */
- sieve_runtime_trace(renv, SIEVE_TRLVL_ACTIONS, "notify action");
+ if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_ACTIONS) ) {
+ sieve_runtime_trace(renv, 0, "notify action");
+ sieve_runtime_trace_descend(renv);
+ sieve_runtime_trace(renv, 0, "notify with uri `%s'",
+ str_sanitize(str_c(method_uri), 80));
+ }
/* Check operands */
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/plugins/imap4flags/cmd-flag.c
--- a/src/lib-sieve/plugins/imap4flags/cmd-flag.c Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/plugins/imap4flags/cmd-flag.c Tue Aug 03 18:58:36 2010 +0200
@@ -177,12 +177,10 @@
{
const struct sieve_operation *op = renv->oprtn;
struct sieve_operand operand;
- string_t *flag_item;
struct sieve_stringlist *flag_list;
struct sieve_variable_storage *storage;
unsigned int var_index;
ext_imapflag_flag_operation_t flag_op;
- int ret;
/*
* Read operands
@@ -241,7 +239,8 @@
i_unreached();
}
+ sieve_runtime_trace_descend(renv);
+
/* Perform requested operation */
-
return flag_op(renv, storage, var_index, flag_list);
}
diff -r 1c66cb52772d -r 15e39ffe0ff1 src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c
--- a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c Tue Aug 03 18:30:14 2010 +0200
+++ b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c Tue Aug 03 18:58:36 2010 +0200
@@ -463,84 +463,109 @@
str_truncate(flags_list, 0);
}
+static string_t *ext_imap4flags_get_flag_variable
+(const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage,
+ unsigned int var_index)
+{
+ string_t *flags;
+
+ if ( storage != NULL ) {
+ if ( sieve_runtime_trace_active(renv, SIEVE_TRLVL_COMMANDS) ) {
+ const char *var_name, *var_id;
+
+ (void)sieve_variable_get_identifier(storage, var_index, &var_name);
+ var_id = sieve_variable_get_varid(storage, var_index);
+
+ sieve_runtime_trace(renv, 0, "update variable `%s' [%s]",
+ var_name, var_id);
+ }
+
+ if ( !sieve_variable_get_modifiable(storage, var_index, &flags) )
+ return NULL;
+ } else {
+ flags = _get_flags_string(renv->oprtn->ext, renv->result);
+ }
+
+ return flags;
+}
+
int ext_imap4flags_set_flags
(const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage,
unsigned int var_index, struct sieve_stringlist *flags)
{
- string_t *cur_flags;
-
- if ( storage != NULL ) {
- if ( !sieve_variable_get_modifiable(storage, var_index, &cur_flags) )
- return SIEVE_EXEC_BIN_CORRUPT;
- } else {
- cur_flags = _get_flags_string(renv->oprtn->ext, renv->result);
- }
-
+ string_t *cur_flags = ext_imap4flags_get_flag_variable
+ (renv, storage, var_index);
+
if ( cur_flags != NULL ) {
string_t *flags_item;
int ret;
flags_list_clear_flags(cur_flags);
while ( (ret=sieve_stringlist_next_item(flags, &flags_item)) > 0 ) {
+ sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS,
+ "set flags `%s'", str_c(flags_item));
+
flags_list_add_flags(cur_flags, flags_item);
}
if ( ret < 0 ) return SIEVE_EXEC_BIN_CORRUPT;
+
+ return SIEVE_EXEC_OK;
}
- return SIEVE_EXEC_OK;
+ return SIEVE_EXEC_BIN_CORRUPT;
}
int ext_imap4flags_add_flags
(const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage,
unsigned int var_index, struct sieve_stringlist *flags)
{
- string_t *cur_flags;
-
- if ( storage != NULL ) {
- if ( !sieve_variable_get_modifiable(storage, var_index, &cur_flags) )
- return SIEVE_EXEC_BIN_CORRUPT;
- } else
- cur_flags = _get_flags_string(renv->oprtn->ext, renv->result);
-
+ string_t *cur_flags = ext_imap4flags_get_flag_variable
+ (renv, storage, var_index);
+
if ( cur_flags != NULL ) {
string_t *flags_item;
int ret;
while ( (ret=sieve_stringlist_next_item(flags, &flags_item)) > 0 ) {
+ sieve_runtime_trace(renv, SIEVE_TRLVL_COMMANDS,
+ "add flags `%s'", str_c(flags_item));
+
flags_list_add_flags(cur_flags, flags_item);
}
if ( ret < 0 ) return SIEVE_EXEC_BIN_CORRUPT;
+
+ return SIEVE_EXEC_OK;
}
- return SIEVE_EXEC_OK;
+ return SIEVE_EXEC_BIN_CORRUPT;
}
int ext_imap4flags_remove_flags
(const struct sieve_runtime_env *renv, struct sieve_variable_storage *storage,
unsigned int var_index, struct sieve_stringlist *flags)
{
- string_t *cur_flags;
-
- if ( storage != NULL ) {
- if ( !sieve_variable_get_modifiable(storage, var_index, &cur_flags) )
- return SIEVE_EXEC_BIN_CORRUPT;
- } else
- cur_flags = _get_flags_string(renv->oprtn->ext, renv->result);
-
+ string_t *cur_flags = ext_imap4flags_get_flag_variable
+ (renv, storage, var_index);
+
if ( cur_flags != NULL ) {
string_t *flags_item;
More information about the dovecot-cvs
mailing list