dovecot-2.2-pigeonhole: Merged concurrent changes.

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Sat Aug 29 10:53:34 UTC 2015


details:   http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/72e423848263
changeset: 2091:72e423848263
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Sat Aug 29 12:53:29 2015 +0200
description:
Merged concurrent changes.

diffstat:

 Makefile.am                                                                   |    2 +
 configure.ac                                                                  |    1 +
 src/lib-sieve/Makefile.am                                                     |    1 +
 src/lib-sieve/plugins/environment/ext-environment-common.c                    |  180 +++++---
 src/lib-sieve/plugins/environment/ext-environment-common.h                    |    7 +-
 src/lib-sieve/plugins/environment/ext-environment.c                           |   16 +-
 src/lib-sieve/plugins/environment/sieve-ext-environment.h                     |   33 +-
 src/lib-sieve/plugins/environment/tst-environment.c                           |    2 +-
 src/lib-sieve/plugins/variables/ext-variables-common.c                        |   13 +-
 src/lib-sieve/plugins/variables/ext-variables-dump.c                          |    6 +-
 src/lib-sieve/plugins/variables/ext-variables-namespaces.c                    |    1 +
 src/lib-sieve/plugins/variables/ext-variables-operands.c                      |    3 +
 src/lib-sieve/plugins/vnd.dovecot/Makefile.am                                 |    2 +-
 src/lib-sieve/plugins/vnd.dovecot/environment/Makefile.am                     |   16 +
 src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment-common.h    |   40 +
 src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment-items.c     |   66 +++
 src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment-variables.c |  207 ++++++++++
 src/lib-sieve/plugins/vnd.dovecot/environment/ext-vnd-environment.c           |  102 ++++
 src/lib-sieve/sieve-code.c                                                    |   15 +-
 src/lib-sieve/sieve-extensions.c                                              |    3 +-
 src/sieve-tools/sieve-filter.c                                                |   21 +-
 tests/extensions/vnd.dovecot/environment/basic.svtest                         |   19 +
 tests/extensions/vnd.dovecot/environment/variables.svtest                     |   19 +
 23 files changed, 681 insertions(+), 94 deletions(-)

diffs (truncated from 1100 to 300 lines):

diff -r a5743e2bfef6 -r 72e423848263 Makefile.am
--- a/Makefile.am	Thu Aug 06 22:23:29 2015 +0200
+++ b/Makefile.am	Sat Aug 29 12:53:29 2015 +0200
@@ -162,6 +162,8 @@
 	tests/extensions/metadata/execute.svtest \
 	tests/extensions/metadata/errors.svtest \
 	tests/extensions/vnd.dovecot/debug/execute.svtest \
+	tests/extensions/vnd.dovecot/environment/basic.svtest \
+	tests/extensions/vnd.dovecot/environment/variables.svtest \
 	tests/deprecated/notify/basic.svtest \
 	tests/deprecated/notify/mailto.svtest \
 	tests/deprecated/notify/errors.svtest \
diff -r a5743e2bfef6 -r 72e423848263 configure.ac
--- a/configure.ac	Thu Aug 06 22:23:29 2015 +0200
+++ b/configure.ac	Sat Aug 29 12:53:29 2015 +0200
@@ -211,6 +211,7 @@
 src/lib-sieve/plugins/index/Makefile
 src/lib-sieve/plugins/vnd.dovecot/Makefile
 src/lib-sieve/plugins/vnd.dovecot/debug/Makefile
+src/lib-sieve/plugins/vnd.dovecot/environment/Makefile
 src/lib-sieve-tool/Makefile
 src/lib-managesieve/Makefile
 src/plugins/Makefile
diff -r a5743e2bfef6 -r 72e423848263 src/lib-sieve/Makefile.am
--- a/src/lib-sieve/Makefile.am	Thu Aug 06 22:23:29 2015 +0200
+++ b/src/lib-sieve/Makefile.am	Sat Aug 29 12:53:29 2015 +0200
@@ -78,6 +78,7 @@
 	$(extdir)/index/libsieve_ext_index.la \
 	$(extdir)/metadata/libsieve_ext_metadata.la \
 	$(extdir)/vnd.dovecot/debug/libsieve_ext_debug.la \
+	$(extdir)/vnd.dovecot/environment/libsieve_ext_vnd_environment.la \
 	$(unfinished_plugins)
 
 libdovecot_sieve_la_DEPENDENCIES = \
diff -r a5743e2bfef6 -r 72e423848263 src/lib-sieve/plugins/environment/ext-environment-common.c
--- a/src/lib-sieve/plugins/environment/ext-environment-common.c	Thu Aug 06 22:23:29 2015 +0200
+++ b/src/lib-sieve/plugins/environment/ext-environment-common.c	Sat Aug 29 12:53:29 2015 +0200
@@ -6,14 +6,10 @@
 
 #include "sieve-common.h"
 #include "sieve-extensions.h"
+#include "sieve-interpreter.h"
 
 #include "ext-environment-common.h"
 
-struct ext_environment_context {
-	HASH_TABLE(const char *,
-		   const struct sieve_environment_item *) environment_items;
-};
-
 /*
  * Core environment items
  */
@@ -30,71 +26,121 @@
 static unsigned int core_env_items_count = N_ELEMENTS(core_env_items);
 
 /*
+ * Validator context
+ */
+
+struct ext_environment_interpreter_context {
+	HASH_TABLE(const char *,
+		   const struct sieve_environment_item *) environment_items;
+
+	unsigned int active:1;
+};
+
+static void ext_environment_interpreter_extension_free
+	(const struct sieve_extension *ext, struct sieve_interpreter *interp,
+		void *context);
+
+struct sieve_interpreter_extension environment_interpreter_extension = {
+	.ext_def = &environment_extension,
+	.free = ext_environment_interpreter_extension_free,
+};
+
+static struct ext_environment_interpreter_context *
+ext_environment_interpreter_context_create
+(const struct sieve_extension *this_ext, struct sieve_interpreter *interp)
+{
+	pool_t pool = sieve_interpreter_pool(interp);
+	struct ext_environment_interpreter_context *ctx;
+
+	ctx = p_new(pool, struct ext_environment_interpreter_context, 1);
+
+	hash_table_create
+		(&ctx->environment_items, default_pool, 0, str_hash, strcmp);
+
+	sieve_interpreter_extension_register
+		(interp, this_ext, &environment_interpreter_extension, (void *)ctx);
+	return ctx;
+}
+
+static void ext_environment_interpreter_extension_free
+(const struct sieve_extension *ext ATTR_UNUSED,
+	struct sieve_interpreter *interp ATTR_UNUSED, 	void *context)
+{
+	struct ext_environment_interpreter_context *ctx =
+		(struct ext_environment_interpreter_context *)context;
+
+	hash_table_destroy(&ctx->environment_items);
+}
+
+static struct ext_environment_interpreter_context *
+ext_environment_interpreter_context_get
+(const struct sieve_extension *this_ext, struct sieve_interpreter *interp)
+{
+	struct ext_environment_interpreter_context *ctx =
+		(struct ext_environment_interpreter_context *)
+		sieve_interpreter_extension_get_context(interp, this_ext);
+
+	if ( ctx == NULL )
+		ctx = ext_environment_interpreter_context_create(this_ext, interp);
+
+	return ctx;
+}
+
+void ext_environment_interpreter_init
+(const struct sieve_extension *this_ext, struct sieve_interpreter *interp)
+{
+	struct ext_environment_interpreter_context *ctx;
+	unsigned int i;
+
+	/* Create our context */
+	ctx = ext_environment_interpreter_context_get(this_ext, interp);
+
+	for ( i = 0; i < core_env_items_count; i++ ) {
+		const struct sieve_environment_item *item = core_env_items[i];
+		hash_table_insert(ctx->environment_items, item->name, item);
+	}
+
+	ctx->active = TRUE;
+}
+
+bool sieve_ext_environment_is_active
+(const struct sieve_extension *env_ext, struct sieve_interpreter *interp)
+{
+	struct ext_environment_interpreter_context *ctx =
+		ext_environment_interpreter_context_get(env_ext, interp);
+
+	return ( ctx != NULL && ctx->active );
+}
+
+/*
  * Registration
  */
 
-static void ext_environment_item_register
-(struct ext_environment_context *ectx,
+void sieve_environment_item_register
+(const struct sieve_extension *env_ext, struct sieve_interpreter *interp,
 	const struct sieve_environment_item *item)
 {
-	hash_table_insert(ectx->environment_items, item->name, item);
+	struct ext_environment_interpreter_context *ctx;
+
+	i_assert( sieve_extension_is(env_ext, environment_extension) );
+	ctx = ext_environment_interpreter_context_get(env_ext, interp);
+	hash_table_insert(ctx->environment_items, item->name, item);
 }
 
-void sieve_ext_environment_item_register
-(const struct sieve_extension *ext, const struct sieve_environment_item *item)
-{
-	struct ext_environment_context *ectx =
-		(struct ext_environment_context *) ext->context;
-
-	ext_environment_item_register(ectx, item);
-}
-
-/*
- * Initialization
- */
-
-bool ext_environment_init
-(const struct sieve_extension *ext ATTR_UNUSED, void **context)
-{
-	struct ext_environment_context *ectx =
-		i_new(struct ext_environment_context, 1);
-
-	unsigned int i;
-
-	hash_table_create
-		(&ectx->environment_items, default_pool, 0, str_hash, strcmp);
-
-	for ( i = 0; i < core_env_items_count; i++ ) {
-		ext_environment_item_register(ectx, core_env_items[i]);
-	}
-
-	*context = (void *) ectx;
-
-	return TRUE;
-}
-
-void ext_environment_deinit(const struct sieve_extension *ext)
-{
-	struct ext_environment_context *ectx =
-		(struct ext_environment_context *) ext->context;
-
-	hash_table_destroy(&ectx->environment_items);
-	i_free(ectx);
-}
-
-
 /*
  * Retrieval
  */
 
 const char *ext_environment_item_get_value
-(const struct sieve_extension *ext, const char *name,
-	const struct sieve_script_env *senv)
+(const struct sieve_extension *env_ext,
+	const struct sieve_runtime_env *renv, const char *name)
 {
-	struct ext_environment_context *ectx =
-		(struct ext_environment_context *) ext->context;
+	struct ext_environment_interpreter_context *ctx =
+		ext_environment_interpreter_context_get(env_ext, renv->interp);
 	const struct sieve_environment_item *item =
-		hash_table_lookup(ectx->environment_items, name);
+		hash_table_lookup(ctx->environment_items, name);
+
+	i_assert( sieve_extension_is(env_ext, environment_extension) );
 
 	if ( item == NULL )
 		return NULL;
@@ -103,7 +149,7 @@
 		return item->value;
 
 	if ( item->get_value != NULL )
-		return item->get_value(ext->svinst, senv);
+		return item->get_value(renv);
 
 	return NULL;
 }
@@ -119,10 +165,9 @@
  */
 
 static const char *envit_domain_get_value
-(struct sieve_instance *svinst,
-	const struct sieve_script_env *senv ATTR_UNUSED)
+(const struct sieve_runtime_env *renv)
 {
-	return svinst->domainname;
+	return renv->svinst->domainname;
 }
 
 const struct sieve_environment_item domain_env_item = {
@@ -137,10 +182,9 @@
  */
 
 static const char *envit_host_get_value
-(struct sieve_instance *svinst,
-	const struct sieve_script_env *senv ATTR_UNUSED)
+(const struct sieve_runtime_env *renv)
 {
-	return svinst->hostname;
+	return renv->svinst->hostname;
 }
 
 const struct sieve_environment_item host_env_item = {
@@ -160,10 +204,9 @@
  */
 
 static const char *envit_location_get_value
-(struct sieve_instance *svinst,
-	const struct sieve_script_env *senv ATTR_UNUSED)
+(const struct sieve_runtime_env *renv)
 {
-	switch ( svinst->env_location ) {
+	switch ( renv->svinst->env_location ) {
 	case SIEVE_ENV_LOCATION_MDA:
 		return "MDA";
 	case SIEVE_ENV_LOCATION_MTA:
@@ -190,10 +233,9 @@
  */
 
 static const char *envit_phase_get_value
-(struct sieve_instance *svinst,
-	const struct sieve_script_env *senv ATTR_UNUSED)
+(const struct sieve_runtime_env *renv)
 {
-	switch ( svinst->delivery_phase ) {
+	switch ( renv->svinst->delivery_phase ) {
 	case SIEVE_DELIVERY_PHASE_PRE:
 		return "pre";
 	case SIEVE_DELIVERY_PHASE_DURING:
diff -r a5743e2bfef6 -r 72e423848263 src/lib-sieve/plugins/environment/ext-environment-common.h
--- a/src/lib-sieve/plugins/environment/ext-environment-common.h	Thu Aug 06 22:23:29 2015 +0200
+++ b/src/lib-sieve/plugins/environment/ext-environment-common.h	Sat Aug 29 12:53:29 2015 +0200
@@ -47,11 +47,10 @@
 void ext_environment_deinit(const struct sieve_extension *ext);
 
 /*
- * Environment item retrieval
+ * Validator context
  */
 
-const char *ext_environment_item_get_value
-	(const struct sieve_extension *ext, const char *name,


More information about the dovecot-cvs mailing list