From b4bbc93fa0503cdf3c469f3eceec5d7e9c2e900e Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Mon, 26 Nov 2007 21:50:16 +0100 Subject: [PATCH] Added inbox location to mail environment and made keep command use it to generate its store action. --- src/lib-sieve/cmd-keep.c | 7 +++++-- src/lib-sieve/sieve.c | 5 +++-- src/lib-sieve/sieve.h | 6 +++++- src/sieve-bin/sieve-exec.c | 1 + src/sieve-bin/sieve-test.c | 9 +++++++-- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/lib-sieve/cmd-keep.c b/src/lib-sieve/cmd-keep.c index bb4d0397d..64e2ca7b5 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 b3207056b..7affe5fe7 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 6f70a0dd4..ffb807881 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 0682e4fbf..1088480bc 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 7d8a00ca5..fd623c3fc 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(); -- GitLab