summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2016-12-12 08:45:23 +0200
committerSergey Poznyakoff <gray@gnu.org>2016-12-12 08:45:23 +0200
commit81750c9d313c09c0af1b5087bf2b0f584256d416 (patch)
tree92c03c7e7f886c432752d4e94a092c6bf0ba5001 /lib
parent57e0b97994f04b8d3f36ef3c45a99941b4f011bc (diff)
downloadmailutils-81750c9d313c09c0af1b5087bf2b0f584256d416.tar.gz
mailutils-81750c9d313c09c0af1b5087bf2b0f584256d416.tar.bz2
Add tests for sieve environment. Initialize environment in maidag and inc
* sieve/tests/environment.at: New testcase. * sieve/tests/Makefile.am: Add new file. * sieve/tests/testsuite.at: Include new file. * lib/muscript.h (mu_script_init): Change signature. * lib/muscript_priv.h (mu_script_fun) <script_init>: Likewise. * lib/guile.c (scheme_init): Update. * lib/python.c (python_init): Update. * lib/script.c (mu_script_init): Pass environment to the script_init method. * lib/sieve.c (sieve_init): Set sieve environment. * maidag/script.c (apply_script): Set environment. * mh/inc.c: Likewise.
Diffstat (limited to 'lib')
-rw-r--r--lib/guile.c2
-rw-r--r--lib/muscript.h3
-rw-r--r--lib/muscript_priv.h2
-rw-r--r--lib/python.c2
-rw-r--r--lib/script.c5
-rw-r--r--lib/sieve.c31
6 files changed, 38 insertions, 7 deletions
diff --git a/lib/guile.c b/lib/guile.c
index f49c9d5b6..920b8d578 100644
--- a/lib/guile.c
+++ b/lib/guile.c
@@ -25,7 +25,7 @@
static int initialized;
static int
-scheme_init (const char *prog, mu_script_descr_t *pdescr)
+scheme_init (const char *prog, const char **env, mu_script_descr_t *pdescr)
{
if (!initialized)
{
diff --git a/lib/muscript.h b/lib/muscript.h
index 75ab0af63..04ca1664a 100644
--- a/lib/muscript.h
+++ b/lib/muscript.h
@@ -27,7 +27,8 @@ typedef struct mu_script_descr *mu_script_descr_t;
mu_script_t mu_script_lang_handler (const char *lang);
mu_script_t mu_script_suffix_handler (const char *name);
-int mu_script_init (mu_script_t scr, const char *name, mu_script_descr_t *);
+int mu_script_init (mu_script_t scr, const char *name, const char **env,
+ mu_script_descr_t *);
int mu_script_done (mu_script_t, mu_script_descr_t);
int mu_script_process_msg (mu_script_t, mu_script_descr_t, mu_message_t msg);
void mu_script_log_enable (mu_script_t scr, mu_script_descr_t descr,
diff --git a/lib/muscript_priv.h b/lib/muscript_priv.h
index f97899fa1..c7bcfd92d 100644
--- a/lib/muscript_priv.h
+++ b/lib/muscript_priv.h
@@ -2,7 +2,7 @@ struct mu_script_fun
{
char *lang;
char *suf;
- int (*script_init) (const char *, mu_script_descr_t *);
+ int (*script_init) (const char *, const char **, mu_script_descr_t *);
int (*script_done) (mu_script_descr_t);
int (*script_process) (mu_script_descr_t, mu_message_t);
int (*script_log_enable) (mu_script_descr_t descr, const char *name,
diff --git a/lib/python.c b/lib/python.c
index 673955f0a..7bd32914f 100644
--- a/lib/python.c
+++ b/lib/python.c
@@ -23,7 +23,7 @@
#include <string.h>
static int
-python_init (const char *prog, mu_script_descr_t *pdescr)
+python_init (const char *prog, const char **env, mu_script_descr_t *pdescr)
{
*pdescr = (mu_script_descr_t) strdup (prog);
if (!*pdescr)
diff --git a/lib/script.c b/lib/script.c
index 2ac5378c2..1660947af 100644
--- a/lib/script.c
+++ b/lib/script.c
@@ -108,9 +108,10 @@ mu_script_suffix_handler (const char *name)
}
int
-mu_script_init (mu_script_t scr, const char *name, mu_script_descr_t *pdescr)
+mu_script_init (mu_script_t scr, const char *name, const char **env,
+ mu_script_descr_t *pdescr)
{
- return scr->script_init ? scr->script_init (name, pdescr) : 0;
+ return scr->script_init ? scr->script_init (name, env, pdescr) : 0;
}
int
diff --git a/lib/sieve.c b/lib/sieve.c
index cfdadb65a..7e9bf306b 100644
--- a/lib/sieve.c
+++ b/lib/sieve.c
@@ -75,8 +75,36 @@ _sieve_action_log (mu_sieve_machine_t mach,
mu_stream_unref (stream);
}
+static void
+sieve_setenv (mu_sieve_machine_t mach, const char **env)
+{
+ if (env)
+ {
+ char *buffer = NULL;
+ size_t buflen = 0;
+ size_t i;
+ char *p;
+
+ for (i = 0; env[i]; i++)
+ {
+ if (buflen < strlen (env[i]) + 1)
+ {
+ buflen = strlen (env[i]) + 1;
+ buffer = mu_realloc (buffer, buflen);
+ }
+ strcpy (buffer, env[i]);
+ p = strchr (buffer, '=');
+ if (!p)
+ continue;
+ *p++ = 0;
+ mu_sieve_set_environ (mach, buffer, p);
+ }
+ free (buffer);
+ }
+}
+
static int
-sieve_init (const char *prog, mu_script_descr_t *pdescr)
+sieve_init (const char *prog, const char **env, mu_script_descr_t *pdescr)
{
int rc;
mu_sieve_machine_t mach;
@@ -86,6 +114,7 @@ sieve_init (const char *prog, mu_script_descr_t *pdescr)
{
if (mu_script_sieve_log)
mu_sieve_set_logger (mach, _sieve_action_log);
+ sieve_setenv (mach, env);
rc = mu_sieve_compile (mach, prog);
}
*pdescr = (mu_script_descr_t) mach;

Return to:

Send suggestions and report system problems to the System administrator.