diff --git a/src/lib-sieve/cmd-keep.c b/src/lib-sieve/cmd-keep.c index bb4d0397dbbe179186fa7c9eac5bfda6cc5873c2..64e2ca7b5335dca586d3f5f5a4f9d9b4070f6f61 100644 --- a/src/lib-sieve/cmd-keep.c +++ b/src/lib-sieve/cmd-keep.c @@ -66,8 +66,11 @@ static bool opc_keep_execute { printf(">> KEEP\n"); - sieve_act_store_add_to_result(renv, "INBOX"); - + if ( renv->mailenv != NULL && renv->mailenv->inbox != NULL ) + sieve_act_store_add_to_result(renv, renv->mailenv->inbox); + else + sieve_act_store_add_to_result(renv, "INBOX"); + return TRUE; } diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c index b3207056b719716975aeb414623b8b626dd251e4..7affe5fe7e376270f77883dac955df670d2317c2 100644 --- a/src/lib-sieve/sieve.c +++ b/src/lib-sieve/sieve.c @@ -151,14 +151,15 @@ void sieve_dump(struct sieve_binary *binary) } bool sieve_test - (struct sieve_binary *binary, const struct sieve_message_data *msgdata) + (struct sieve_binary *binary, const struct sieve_message_data *msgdata, + const struct sieve_mail_environment *menv) { struct sieve_result *sres = sieve_result_create(); struct sieve_interpreter *interp = sieve_interpreter_create(binary); bool result = TRUE; printf("Code Execute:\n\n"); - result = sieve_interpreter_run(interp, msgdata, NULL, &sres); + result = sieve_interpreter_run(interp, msgdata, menv, &sres); if ( result ) { printf("Script executed successfully.\n\n"); diff --git a/src/lib-sieve/sieve.h b/src/lib-sieve/sieve.h index 6f70a0dd488e5e4baa48c06ed419906ff4b77e98..ffb80788163517e1f80b8d3b47b2a93e25e3292a 100644 --- a/src/lib-sieve/sieve.h +++ b/src/lib-sieve/sieve.h @@ -15,6 +15,8 @@ struct sieve_message_data { }; struct sieve_mail_environment { + const char *inbox; + /* Interface for sending mail (callbacks if you like) */ int (*send_rejection) (const struct sieve_message_data *msgdata, const char *recipient, @@ -29,7 +31,9 @@ void sieve_deinit(void); struct sieve_binary *sieve_compile(int fd, bool verbose); void sieve_dump(struct sieve_binary *binary); bool sieve_test - (struct sieve_binary *binary, const struct sieve_message_data *msgdata); + (struct sieve_binary *binary, const struct sieve_message_data *msgdata, + const struct sieve_mail_environment *menv); + bool sieve_execute (struct sieve_binary *binary, const struct sieve_message_data *msgdata, const struct sieve_mail_environment *menv); diff --git a/src/sieve-bin/sieve-exec.c b/src/sieve-bin/sieve-exec.c index 0682e4fbfc6cdc4cf1c9c1a43226ab7d0595d4ec..1088480bc4c2fb0538589f2e97adc22a8e4ca7f7 100644 --- a/src/sieve-bin/sieve-exec.c +++ b/src/sieve-bin/sieve-exec.c @@ -97,6 +97,7 @@ int main(int argc, char **argv) (void)mail_get_first_header(mailr->mail, "Message-ID", &msgdata.id); memset(&mailenv, 0, sizeof(mailenv)); + mailenv.inbox = "INBOX"; mailenv.send_forward = sieve_send_forward; mailenv.send_rejection = sieve_send_rejection; diff --git a/src/sieve-bin/sieve-test.c b/src/sieve-bin/sieve-test.c index 7d8a00ca578ef4ea84a868ce492b82a2409e7859..fd623c3fcbed52fc81469391b788dd98c171e058 100644 --- a/src/sieve-bin/sieve-test.c +++ b/src/sieve-bin/sieve-test.c @@ -18,7 +18,7 @@ int main(int argc, char **argv) struct mail_raw *mailr; struct sieve_binary *sbin; struct sieve_message_data msgdata; - + struct sieve_mail_environment mailenv; bin_init(); if ( argc < 2 ) { @@ -76,9 +76,14 @@ int main(int argc, char **argv) msgdata.to_address = "sirius+sieve@rename-it.nl"; msgdata.auth_user = "stephan"; (void)mail_get_first_header(mailr->mail, "Message-ID", &msgdata.id); + + memset(&mailenv, 0, sizeof(mailenv)); + mailenv.inbox = "INBOX"; + mailenv.send_forward = NULL; + mailenv.send_rejection = NULL; /* Run the test */ - (void) sieve_test(sbin, &msgdata); + (void) sieve_test(sbin, &msgdata, &mailenv); sieve_deinit();