From 14a0735103a6ac1cf69b3a00d00cb0e1a98898c6 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Sun, 25 Nov 2007 16:13:48 +0100
Subject: [PATCH] Added mail-file parameter to the sieve-test and sieve-exec
 binaries.

---
 README                            | 11 +++++-----
 src/lib-sieve/sieve-interpreter.c |  1 -
 src/sieve-bin/sieve-exec.c        | 32 ++++++++++++++++++++++-------
 src/sieve-bin/sieve-test.c        | 34 +++++++++++++++++++++++--------
 4 files changed, 57 insertions(+), 21 deletions(-)

diff --git a/README b/README
index 140e97677..2ce4454ba 100644
--- a/README
+++ b/README
@@ -15,13 +15,14 @@ sievec <sieve-file>
 Compiles the script and produces various dumps of intermittent compilation
 results. This already works pretty good for all supported features.
 
-sieve_test <sieve-file>
+sieve-test <sieve-file> [<mailfile>/-]
 
-Reads mail message from standard input and executes the sieve script to
-produce a verdict. Currently only prints an execution dump with the 
-instructions encountered during execution.
+Reads mail message from the specified mailfile (- = stdin) and executes the 
+sieve script to produce a verdict. This prints an execution dump with the 
+instructions encountered during execution and finally it prints a list of 
+actions that would have been performed on this message. 
 
-In the directory ./sieve various example scripts are bundled. 
+Various example scripts are bundled in the directory 'sieve'.
 
 Features
 --------
diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c
index b01d4a344..691fb7f4c 100644
--- a/src/lib-sieve/sieve-interpreter.c
+++ b/src/lib-sieve/sieve-interpreter.c
@@ -241,7 +241,6 @@ bool sieve_interpreter_run
 		*result = sieve_result_create();
 	else {
 		sieve_result_ref(*result);
-		printf("REF\n");
 	}
 	interp->runenv.msgdata = msgdata;
 	interp->runenv.result = *result;		
diff --git a/src/sieve-bin/sieve-exec.c b/src/sieve-bin/sieve-exec.c
index 20ef24afe..a4e8b9108 100644
--- a/src/sieve-bin/sieve-exec.c
+++ b/src/sieve-bin/sieve-exec.c
@@ -31,7 +31,7 @@ static int sieve_send_forward
 
 int main(int argc, char **argv) 
 {
-	int fd;
+	int sfd, mfd;
 	struct mail_raw *mailr;
 	struct sieve_binary *sbin;
 	struct sieve_message_data msgdata;
@@ -40,17 +40,34 @@ int main(int argc, char **argv)
 	bin_init();
 
 	if ( argc < 2 ) {
-		printf( "Usage: sieve_test <filename>\n");
+		printf( "Usage: sieve-exec <sieve-file> [<mailfile>/-]\n");
  		exit(1);
  	}
   
-  	/* Compile sieve script */
+  	/* Open sieve script */
   
-	if ( (fd = open(argv[1], O_RDONLY)) < 0 ) {
+	if ( (sfd = open(argv[1], O_RDONLY)) < 0 ) {
 		perror("open()");
 		exit(1);
 	}
 
+ 	/* Open mail file */
+ 
+	if ( argc > 2 )
+    {
+        if ( *(argv[2]) == '-' && *(argv[2]+1) == '\0' )
+            mfd = 0;
+        else {
+            if ( (mfd = open(argv[2], O_RDONLY)) < 0 ) {
+                perror("Failed to open mail file");
+                exit(1);
+            }
+        }
+    } else
+        mfd = 0;
+
+	/* Compile sieve script */
+	
 	printf("Parsing sieve script '%s'...\n", argv[1]);
 
 	if ( !sieve_init("") ) {
@@ -58,18 +75,18 @@ int main(int argc, char **argv)
 		exit(1);
 	}
 
-	if ( (sbin = sieve_compile(fd, FALSE)) == NULL ) {
+	if ( (sbin = sieve_compile(sfd, FALSE)) == NULL ) {
 		printf("Failed to compile sieve script\n");
 		exit(1);
 	}		 
 		
 	(void) sieve_dump(sbin);
 
- 	close(fd);
+ 	close(sfd);
 
 	mail_raw_init();
 
-	mailr = mail_raw_open(0);
+	mailr = mail_raw_open(mfd);
 
 	/* Collect necessary message data */
 	memset(&msgdata, 0, sizeof(msgdata));
@@ -89,6 +106,7 @@ int main(int argc, char **argv)
 	sieve_deinit();
 
 	mail_raw_close(mailr);
+	close(mfd);
 
 	mail_raw_deinit();
 	bin_deinit();  
diff --git a/src/sieve-bin/sieve-test.c b/src/sieve-bin/sieve-test.c
index e4c67ca51..1b35a543e 100644
--- a/src/sieve-bin/sieve-test.c
+++ b/src/sieve-bin/sieve-test.c
@@ -14,7 +14,7 @@
 
 int main(int argc, char **argv) 
 {
-	int fd;
+	int sfd, mfd;
 	struct mail_raw *mailr;
 	struct sieve_binary *sbin;
 	struct sieve_message_data msgdata;
@@ -22,17 +22,33 @@ int main(int argc, char **argv)
 	bin_init();
 
 	if ( argc < 2 ) {
-		printf( "Usage: sieve_test <filename>\n");
+		printf( "Usage: sieve-test <sieve-file> [<mailfile>/-]\n");
  		exit(1);
  	}
   
-  	/* Compile sieve script */
+  	/* Open sieve script */
   
-	if ( (fd = open(argv[1], O_RDONLY)) < 0 ) {
-		perror("open()");
+	if ( (sfd = open(argv[1], O_RDONLY)) < 0 ) {
+		perror("Failed to open sieve script");
 		exit(1);
 	}
 
+	/* Open mail file */
+	if ( argc > 2 ) 
+	{
+		if ( *(argv[2]) == '-' && *(argv[2]+1) == '\0' ) 
+			mfd = 0;
+		else {
+			if ( (mfd = open(argv[2], O_RDONLY)) < 0 ) {
+				perror("Failed to open mail file");
+				exit(1);
+			}
+		}
+	} else 
+		mfd = 0;
+	
+	/* Compile sieve script */
+
 	printf("Parsing sieve script '%s'...\n", argv[1]);
 
 	if ( !sieve_init("") ) {
@@ -40,18 +56,18 @@ int main(int argc, char **argv)
 		exit(1);
 	}
 
-	if ( (sbin = sieve_compile(fd, TRUE)) == NULL ) {
+	if ( (sbin = sieve_compile(sfd, TRUE)) == NULL ) {
 		printf("Failed to compile sieve script\n");
 		exit(1);
 	}		 
 		
 	(void) sieve_dump(sbin);
 
- 	close(fd);
+ 	close(sfd);
 
 	mail_raw_init();
 
-	mailr = mail_raw_open(0);
+	mailr = mail_raw_open(mfd);
 
 	/* Collect necessary message data */
 	memset(&msgdata, 0, sizeof(msgdata));
@@ -67,6 +83,8 @@ int main(int argc, char **argv)
 	sieve_deinit();
 
 	mail_raw_close(mailr);
+	if ( mfd > 0 ) 
+		close(mfd);
 
 	mail_raw_deinit();
 	bin_deinit();  
-- 
GitLab