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