diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2016-12-12 08:45:23 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2016-12-12 08:45:23 +0200 |
commit | 81750c9d313c09c0af1b5087bf2b0f584256d416 (patch) | |
tree | 92c03c7e7f886c432752d4e94a092c6bf0ba5001 /lib | |
parent | 57e0b97994f04b8d3f36ef3c45a99941b4f011bc (diff) | |
download | mailutils-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.c | 2 | ||||
-rw-r--r-- | lib/muscript.h | 3 | ||||
-rw-r--r-- | lib/muscript_priv.h | 2 | ||||
-rw-r--r-- | lib/python.c | 2 | ||||
-rw-r--r-- | lib/script.c | 5 | ||||
-rw-r--r-- | lib/sieve.c | 31 |
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; |