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