dovecot-2.2-pigeonhole: lib-sieve: Added skeletons for mboxmetad...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Sun Nov 3 03:03:22 EET 2013


details:   http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/58e6a73e5bc6
changeset: 1813:58e6a73e5bc6
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Sun Nov 03 02:02:56 2013 +0100
description:
lib-sieve: Added skeletons for mboxmetadata and servermetadata extensions.
This is still an unfinished feature.

diffstat:

 configure.ac                                         |    1 +
 src/lib-sieve/Makefile.am                            |    3 +-
 src/lib-sieve/plugins/Makefile.am                    |    2 +-
 src/lib-sieve/plugins/metadata/Makefile.am           |   24 +
 src/lib-sieve/plugins/metadata/ext-metadata-common.h |   39 ++
 src/lib-sieve/plugins/metadata/ext-metadata.c        |   83 +++++
 src/lib-sieve/plugins/metadata/tst-metadata.c        |  286 +++++++++++++++++++
 src/lib-sieve/plugins/metadata/tst-metadataexists.c  |  246 ++++++++++++++++
 src/lib-sieve/sieve-extensions.c                     |    4 +-
 9 files changed, 685 insertions(+), 3 deletions(-)

diffs (truncated from 753 to 300 lines):

diff -r ab3638d7aa4a -r 58e6a73e5bc6 configure.ac
--- a/configure.ac	Fri Oct 11 07:57:21 2013 +0200
+++ b/configure.ac	Sun Nov 03 02:02:56 2013 +0100
@@ -120,6 +120,7 @@
 src/lib-sieve/plugins/spamvirustest/Makefile
 src/lib-sieve/plugins/ihave/Makefile
 src/lib-sieve/plugins/editheader/Makefile
+src/lib-sieve/plugins/metadata/Makefile
 src/lib-sieve/plugins/vnd.dovecot/Makefile
 src/lib-sieve/plugins/vnd.dovecot/debug/Makefile
 src/lib-sieve/plugins/vnd.dovecot/duplicate/Makefile
diff -r ab3638d7aa4a -r 58e6a73e5bc6 src/lib-sieve/Makefile.am
--- a/src/lib-sieve/Makefile.am	Fri Oct 11 07:57:21 2013 +0200
+++ b/src/lib-sieve/Makefile.am	Sun Nov 03 02:02:56 2013 +0100
@@ -42,7 +42,8 @@
 	cmp-i-ascii-casemap.c
 
 if BUILD_UNFINISHED
-unfinished_plugins =
+unfinished_plugins = \
+	$(extdir)/metadata/libsieve_ext_metadata.la
 endif
 
 # These are not actual plugins just yet...
diff -r ab3638d7aa4a -r 58e6a73e5bc6 src/lib-sieve/plugins/Makefile.am
--- a/src/lib-sieve/plugins/Makefile.am	Fri Oct 11 07:57:21 2013 +0200
+++ b/src/lib-sieve/plugins/Makefile.am	Sun Nov 03 02:02:56 2013 +0100
@@ -1,5 +1,5 @@
 if BUILD_UNFINISHED
-UNFINISHED =
+UNFINISHED = metadata
 endif
 
 SUBDIRS = \
diff -r ab3638d7aa4a -r 58e6a73e5bc6 src/lib-sieve/plugins/metadata/Makefile.am
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-sieve/plugins/metadata/Makefile.am	Sun Nov 03 02:02:56 2013 +0100
@@ -0,0 +1,24 @@
+
+noinst_LTLIBRARIES = libsieve_ext_metadata.la
+
+libsieve_ext_metadata_la_LDFLAGS = -module -avoid-version
+
+AM_CPPFLAGS = \
+	-I$(top_srcdir)/src/lib-sieve \
+	-I$(top_srcdir)/src/lib-sieve/plugins/variables \
+	$(LIBDOVECOT_INCLUDE)
+
+tests = \
+	tst-metadata.c \
+	tst-metadataexists.c
+
+extensions = \
+	ext-metadata.c
+
+libsieve_ext_metadata_la_SOURCES = \
+	$(tests) \
+	$(extensions)
+
+noinst_HEADERS = \
+	ext-metadata-common.h
+
diff -r ab3638d7aa4a -r 58e6a73e5bc6 src/lib-sieve/plugins/metadata/ext-metadata-common.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-sieve/plugins/metadata/ext-metadata-common.h	Sun Nov 03 02:02:56 2013 +0100
@@ -0,0 +1,39 @@
+/* Copyright (c) 2002-2013 Pigeonhole authors, see the included COPYING file
+ */
+
+#ifndef __EXT_METADATA_COMMON_H
+#define __EXT_METADATA_COMMON_H
+
+#include "sieve-common.h"
+
+/*
+ * Extension
+ */
+
+extern const struct sieve_extension_def mboxmetadata_extension;
+extern const struct sieve_extension_def servermetadata_extension;
+
+/*
+ * Commands
+ */
+
+extern const struct sieve_command_def metadata_test;
+extern const struct sieve_command_def servermetadata_test;
+extern const struct sieve_command_def metadataexists_test;
+extern const struct sieve_command_def servermetadataexists_test;
+
+/*
+ * Operations
+ */
+
+enum ext_metadata_opcode {
+	EXT_METADATA_OPERATION_METADATA,
+	EXT_METADATA_OPERATION_METADATAEXISTS
+};
+
+extern const struct sieve_operation_def metadata_operation;
+extern const struct sieve_operation_def servermetadata_operation;
+extern const struct sieve_operation_def metadataexists_operation;
+extern const struct sieve_operation_def servermetadataexists_operation;
+
+#endif /* __EXT_METADATA_COMMON_H */
diff -r ab3638d7aa4a -r 58e6a73e5bc6 src/lib-sieve/plugins/metadata/ext-metadata.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-sieve/plugins/metadata/ext-metadata.c	Sun Nov 03 02:02:56 2013 +0100
@@ -0,0 +1,83 @@
+/* Copyright (c) 2002-2013 Pigeonhole authors, see the included COPYING file
+ */
+
+#include "lib.h"
+
+#include "sieve-extensions.h"
+#include "sieve-commands.h"
+#include "sieve-binary.h"
+
+#include "sieve-validator.h"
+#include "sieve-interpreter.h"
+
+#include "ext-metadata-common.h"
+
+/*
+ * Extension mboxmetadata
+ * -----------------------------
+ *
+ * Authors: Stephan Bosch
+ * Specification: RFC 5490; Section 3
+ * Implementation: skeleton
+ * Status: development
+ *
+ */
+
+const struct sieve_operation_def *mboxmetadata_operations[] = {
+	&metadata_operation,
+	&metadataexists_operation,
+};
+
+static bool ext_mboxmetadata_validator_load
+	(const struct sieve_extension *ext, struct sieve_validator *valdtr);
+
+const struct sieve_extension_def mboxmetadata_extension = {
+	.name = "mboxmetadata",
+	.validator_load = ext_mboxmetadata_validator_load,
+	SIEVE_EXT_DEFINE_OPERATIONS(mboxmetadata_operations)
+};
+
+static bool ext_mboxmetadata_validator_load
+(const struct sieve_extension *ext, struct sieve_validator *valdtr)
+{
+	sieve_validator_register_command(valdtr, ext, &metadata_test);
+	sieve_validator_register_command(valdtr, ext, &metadataexists_test);
+
+	return TRUE;
+}
+
+/*
+ * Extension servermetadata
+ * -----------------------------
+ *
+ * Authors: Stephan Bosch
+ * Specification: RFC 5490; Section 4
+ * Implementation: skeleton
+ * Status: development
+ *
+ */
+
+const struct sieve_operation_def *servermetadata_operations[] = {
+	&servermetadata_operation,
+	&servermetadataexists_operation,
+};
+
+static bool ext_servermetadata_validator_load
+	(const struct sieve_extension *ext, struct sieve_validator *valdtr);
+
+const struct sieve_extension_def servermetadata_extension = {
+	.name = "servermetadata",
+	.validator_load = ext_servermetadata_validator_load,
+	SIEVE_EXT_DEFINE_OPERATIONS(servermetadata_operations)
+};
+
+static bool ext_servermetadata_validator_load
+(const struct sieve_extension *ext, struct sieve_validator *valdtr)
+{
+	sieve_validator_register_command(valdtr, ext, &servermetadata_test);
+	sieve_validator_register_command(valdtr, ext, &servermetadataexists_test);
+
+	return TRUE;
+}
+
+
diff -r ab3638d7aa4a -r 58e6a73e5bc6 src/lib-sieve/plugins/metadata/tst-metadata.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-sieve/plugins/metadata/tst-metadata.c	Sun Nov 03 02:02:56 2013 +0100
@@ -0,0 +1,286 @@
+/* Copyright (c) 2002-2013 Pigeonhole authors, see the included COPYING file
+ */
+
+#include "sieve-common.h"
+#include "sieve-commands.h"
+#include "sieve-stringlist.h"
+#include "sieve-code.h"
+#include "sieve-comparators.h"
+#include "sieve-match-types.h"
+#include "sieve-validator.h"
+#include "sieve-generator.h"
+#include "sieve-interpreter.h"
+#include "sieve-dump.h"
+#include "sieve-match.h"
+
+#include "ext-metadata-common.h"
+
+/*
+ * Test definitions
+ */
+
+/* Forward declarations */
+
+static bool tst_metadata_registered
+	(struct sieve_validator *valdtr, const struct sieve_extension *ext,
+		struct sieve_command_registration *cmd_reg);
+static bool tst_metadata_validate
+	(struct sieve_validator *valdtr, struct sieve_command *tst);
+static bool tst_metadata_generate
+	(const struct sieve_codegen_env *cgenv, struct sieve_command *cmd);
+
+/* Metadata test
+ *
+ * Syntax:
+ *   metadata [MATCH-TYPE] [COMPARATOR]
+ *            <mailbox: string>
+ *            <annotation-name: string> <key-list: string-list>
+ */
+
+const struct sieve_command_def metadata_test = {
+	"metadata",
+	SCT_TEST,
+	3, 0, FALSE, FALSE,
+	tst_metadata_registered,
+	NULL,
+	tst_metadata_validate,
+	NULL,
+	tst_metadata_generate,
+	NULL
+};
+
+/* Servermetadata test
+ *
+ * Syntax:
+ *   servermetadata [MATCH-TYPE] [COMPARATOR]
+ *            <annotation-name: string> <key-list: string-list>
+ */
+
+const struct sieve_command_def servermetadata_test = {
+	"servermetadata",
+	SCT_TEST,
+	2, 0, FALSE, FALSE,
+	tst_metadata_registered,
+	NULL,
+	tst_metadata_validate,
+	NULL,
+	tst_metadata_generate,
+	NULL
+};
+
+/*
+ * Opcode definitions
+ */
+
+static bool tst_metadata_operation_dump
+	(const struct sieve_dumptime_env *denv, sieve_size_t *address);
+static int tst_metadata_operation_execute
+	(const struct sieve_runtime_env *renv, sieve_size_t *address);
+
+/* Metadata operation */
+
+const struct sieve_operation_def metadata_operation = {
+	"METADATA",
+	&mboxmetadata_extension,
+	EXT_METADATA_OPERATION_METADATA,
+	tst_metadata_operation_dump,
+	tst_metadata_operation_execute
+};
+
+/* Servermetadata operation */
+
+const struct sieve_operation_def servermetadata_operation = {
+	"SERVERMETADATA",
+	&servermetadata_extension,
+	EXT_METADATA_OPERATION_METADATA,
+	tst_metadata_operation_dump,
+	tst_metadata_operation_execute
+};
+
+/*
+ * Test registration
+ */
+
+static bool tst_metadata_registered


More information about the dovecot-cvs mailing list