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