diff --git a/src/lib-sieve/plugins/include/ext-include-common.c b/src/lib-sieve/plugins/include/ext-include-common.c index bb02e59c40ecc6a31720882ebee0ff4af7d4ffb7..cee2790eab7a9e1d226d78422c09c646a9f499db 100644 --- a/src/lib-sieve/plugins/include/ext-include-common.c +++ b/src/lib-sieve/plugins/include/ext-include-common.c @@ -60,25 +60,22 @@ const char *ext_include_get_script_directory if (sieve_dir == NULL) sieve_dir = getenv("HOME"); - if (sieve_dir == NULL) { - sieve_sys_error("include: sieve_dir and home not set " - "(wanted script %s)", str_sanitize(script_name, 80)); - return NULL; - } break; case EXT_INCLUDE_LOCATION_GLOBAL: sieve_dir = getenv("SIEVE_GLOBAL_DIR"); - - if (sieve_dir == NULL) { - sieve_sys_warning("include: sieve_global_dir not set " - "(wanted script %s)", str_sanitize(script_name, 80)); - return NULL; - } break; default: return NULL; } + if (sieve_dir == NULL) { + sieve_sys_error("include: sieve_dir and home not set " + "(wanted script %s)", str_sanitize(script_name, 80)); + return NULL; + } + + printf("SIEVE DIR: %s\n", sieve_dir); + return sieve_dir; } diff --git a/src/testsuite/testsuite-common.c b/src/testsuite/testsuite-common.c index 39a5f65ef4b7d519571046f665d337261cb775ed..297ebf6e5c5df7fb4b608cf2506a8dbc22be295e 100644 --- a/src/testsuite/testsuite-common.c +++ b/src/testsuite/testsuite-common.c @@ -4,6 +4,7 @@ #include "ostream.h" #include "hash.h" #include "mail-storage.h" +#include "env-util.h" #include "mail-raw.h" #include "namespaces.h" @@ -301,6 +302,8 @@ static void _testsuite_script_verror msg.location = p_strdup(pool, location); msg.message = p_strdup_vprintf(pool, fmt, args); + +// printf("error: %s: %s.\n", location, t_strdup_vprintf(fmt, args)); array_append(&_testsuite_script_errors, &msg, 1); } @@ -370,9 +373,21 @@ static void testsuite_script_init(void) bool testsuite_script_compile(const char *script_path) { struct sieve_binary *sbin; + const char *sieve_dir; testsuite_script_clear_messages(); + /* Initialize environment */ + sieve_dir = strrchr(script_path, '/'); + if ( sieve_dir == NULL ) + sieve_dir= "./"; + else + sieve_dir = t_strdup_until(script_path, sieve_dir+1); + + /* Currently needed for include (FIXME) */ + env_put(t_strconcat("SIEVE_DIR=", sieve_dir, "included", NULL)); + env_put(t_strconcat("SIEVE_GLOBAL_DIR=", sieve_dir, "included-global", NULL)); + if ( (sbin = sieve_compile(script_path, test_script_ehandler)) == NULL ) return FALSE; diff --git a/src/testsuite/testsuite.c b/src/testsuite/testsuite.c index 99f9fd9a669fd5fadfc46d14e44df885063bba9c..e21786f1e60568e2bb37554c3727e807bf8e12d2 100644 --- a/src/testsuite/testsuite.c +++ b/src/testsuite/testsuite.c @@ -61,7 +61,6 @@ static void testsuite_bin_init(void) testsuite_init(); } - static void testsuite_bin_deinit(void) { testsuite_deinit(); @@ -216,11 +215,13 @@ int main(int argc, char **argv) /* Initialize environment */ sieve_dir = strrchr(scriptfile, '/'); if ( sieve_dir == NULL ) - sieve_dir="./"; + sieve_dir= "./"; else - sieve_dir = t_strdup_until(scriptfile, sieve_dir); + sieve_dir = t_strdup_until(scriptfile, sieve_dir+1); - env_put(t_strconcat("SIEVE_DIR=", sieve_dir, NULL)); + /* Currently needed for include (FIXME) */ + env_put(t_strconcat("SIEVE_DIR=", sieve_dir, "included", NULL)); + env_put(t_strconcat("SIEVE_GLOBAL_DIR=", sieve_dir, "included-global", NULL)); /* Compile sieve script */ sbin = _compile_sieve_script(scriptfile); diff --git a/tests/extensions/include/errors.svtest b/tests/extensions/include/errors.svtest index c58a5f49b33b1bd5e06e88f5a226619924092c05..dc0c9814b97e802caa0358105ea420b9b452e486 100644 --- a/tests/extensions/include/errors.svtest +++ b/tests/extensions/include/errors.svtest @@ -17,6 +17,36 @@ test "Generic" { } } +test "Circular - direct" { + if test_compile "errors/circular-1.sieve" { + test_fail "compile should have failed"; + } + + if not test_error :count "eq" :comparator "i;ascii-numeric" "3" { + test_fail "wrong number of errors reported"; + } +} + +test "Circular - one intermittent" { + if test_compile "errors/circular-2.sieve" { + test_fail "compile should have failed"; + } + + if not test_error :count "eq" :comparator "i;ascii-numeric" "4" { + test_fail "wrong number of errors reported"; + } +} + +test "Circular - two intermittent" { + if test_compile "errors/circular-3.sieve" { + test_fail "compile should have failed"; + } + + if not test_error :count "eq" :comparator "i;ascii-numeric" "5" { + test_fail "wrong number of errors reported"; + } +} + /* * Using import/export without variables required */ diff --git a/tests/extensions/include/errors/circular-1.sieve b/tests/extensions/include/errors/circular-1.sieve new file mode 100644 index 0000000000000000000000000000000000000000..9526ff7479e9e5ed24e33f552eebaeb97cefb39e --- /dev/null +++ b/tests/extensions/include/errors/circular-1.sieve @@ -0,0 +1,5 @@ +require "include"; + +discard; + +include "circular-one.sieve"; diff --git a/tests/extensions/include/errors/circular-2.sieve b/tests/extensions/include/errors/circular-2.sieve new file mode 100644 index 0000000000000000000000000000000000000000..59fca94c1ec2ef7e3e64ff3d5249f1f7917209d2 --- /dev/null +++ b/tests/extensions/include/errors/circular-2.sieve @@ -0,0 +1,5 @@ +require "include"; + +discard; + +include "circular-two.sieve"; diff --git a/tests/extensions/include/errors/circular-3.sieve b/tests/extensions/include/errors/circular-3.sieve new file mode 100644 index 0000000000000000000000000000000000000000..1ad95b6b68f6889b57dca67a686152eae6b89426 --- /dev/null +++ b/tests/extensions/include/errors/circular-3.sieve @@ -0,0 +1,5 @@ +require "include"; + +discard; + +include "circular-three"; diff --git a/tests/extensions/include/errors/included/circular-one.sieve b/tests/extensions/include/errors/included/circular-one.sieve new file mode 100644 index 0000000000000000000000000000000000000000..91978fede1495fa68ee92aa4c63f080329712caf --- /dev/null +++ b/tests/extensions/include/errors/included/circular-one.sieve @@ -0,0 +1,5 @@ +require "include"; + +keep; + +include "circular-one.sieve"; diff --git a/tests/extensions/include/errors/included/circular-three-2.sieve b/tests/extensions/include/errors/included/circular-three-2.sieve new file mode 100644 index 0000000000000000000000000000000000000000..323751053fcd3002a84d1451b894ffc9de2b4f07 --- /dev/null +++ b/tests/extensions/include/errors/included/circular-three-2.sieve @@ -0,0 +1,3 @@ +require "include"; + +include "circular-three-3.sieve"; diff --git a/tests/extensions/include/errors/included/circular-three-3.sieve b/tests/extensions/include/errors/included/circular-three-3.sieve new file mode 100644 index 0000000000000000000000000000000000000000..4c062cdb338a0411f5cad1ac59be0792b604cf7a --- /dev/null +++ b/tests/extensions/include/errors/included/circular-three-3.sieve @@ -0,0 +1,3 @@ +require "include"; + +include "circular-three.sieve"; diff --git a/tests/extensions/include/errors/included/circular-three.sieve b/tests/extensions/include/errors/included/circular-three.sieve new file mode 100644 index 0000000000000000000000000000000000000000..14c3c7f7b94ea2ec56538882a3de2b2487dc388e --- /dev/null +++ b/tests/extensions/include/errors/included/circular-three.sieve @@ -0,0 +1,7 @@ +require "include"; + +keep; + +include "circular-three-2.sieve"; + + diff --git a/tests/extensions/include/errors/included/circular-two-2.sieve b/tests/extensions/include/errors/included/circular-two-2.sieve new file mode 100644 index 0000000000000000000000000000000000000000..d529214d4c0624698231af6597360034ee2ace55 --- /dev/null +++ b/tests/extensions/include/errors/included/circular-two-2.sieve @@ -0,0 +1,3 @@ +require "include"; + +include "circular-two.sieve"; diff --git a/tests/extensions/include/errors/included/circular-two.sieve b/tests/extensions/include/errors/included/circular-two.sieve new file mode 100644 index 0000000000000000000000000000000000000000..340ff9e08df0d553a369be9298934f7de93bc1f6 --- /dev/null +++ b/tests/extensions/include/errors/included/circular-two.sieve @@ -0,0 +1,7 @@ +require "include"; + +keep; + +include "circular-two-2.sieve"; + + diff --git a/tests/extensions/include/variables-included1.sieve b/tests/extensions/include/included/variables-included1.sieve similarity index 100% rename from tests/extensions/include/variables-included1.sieve rename to tests/extensions/include/included/variables-included1.sieve diff --git a/tests/extensions/include/variables-included2.sieve b/tests/extensions/include/included/variables-included2.sieve similarity index 100% rename from tests/extensions/include/variables-included2.sieve rename to tests/extensions/include/included/variables-included2.sieve diff --git a/tests/extensions/include/variables-included3.sieve b/tests/extensions/include/included/variables-included3.sieve similarity index 100% rename from tests/extensions/include/variables-included3.sieve rename to tests/extensions/include/included/variables-included3.sieve