diff --git a/src/lib-sieve/sieve-script-dict.c b/src/lib-sieve/sieve-script-dict.c index 14358662d53e21157792aba5a3f6988adefb65ce..939328b609102c90f411c926b61e46631506265c 100644 --- a/src/lib-sieve/sieve-script-dict.c +++ b/src/lib-sieve/sieve-script-dict.c @@ -289,6 +289,7 @@ const struct sieve_script sieve_dict_script = { sieve_dict_script_binary_write_metadata, sieve_dict_script_binary_load, sieve_dict_script_binary_save, + NULL, NULL, sieve_dict_script_equals diff --git a/src/lib-sieve/sieve-script-file.c b/src/lib-sieve/sieve-script-file.c index eee6f5082199b79b7551439ed0ad9873e815976b..71c13266991500ff8a714e948cb0eebac54fb7da 100644 --- a/src/lib-sieve/sieve-script-file.c +++ b/src/lib-sieve/sieve-script-file.c @@ -354,6 +354,14 @@ static int sieve_file_script_binary_save script->st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO), error_r); } +static const char *sieve_file_script_binary_get_directory +(struct sieve_script *_script) +{ + struct sieve_file_script *script = (struct sieve_file_script *)_script; + + return script-> dirpath; +} + const struct sieve_script sieve_file_script = { .driver_name = SIEVE_FILE_SCRIPT_DRIVER_NAME, .v = { @@ -368,6 +376,7 @@ const struct sieve_script sieve_file_script = { NULL, sieve_file_script_binary_load, sieve_file_script_binary_save, + sieve_file_script_binary_get_directory, sieve_file_script_get_size, diff --git a/src/lib-sieve/sieve-script-private.h b/src/lib-sieve/sieve-script-private.h index 753d64a6b8031e4336468364fbb6fa464eb0749a..edc343716b38445e5bc245ce7c23c634b8053b6e 100644 --- a/src/lib-sieve/sieve-script-private.h +++ b/src/lib-sieve/sieve-script-private.h @@ -32,6 +32,8 @@ struct sieve_script_vfuncs { int (*binary_save) (struct sieve_script *script, struct sieve_binary *sbin, bool update, enum sieve_error *error_r); + const char *(*binary_get_directory) + (struct sieve_script *script); int (*get_size) (const struct sieve_script *script, uoff_t *size_r); diff --git a/src/lib-sieve/sieve-script.c b/src/lib-sieve/sieve-script.c index 19869483b330614b6aaadb7ac333d219aa6e3220..720b16c5e4fe389e5eb5139a1005af31e1465da6 100644 --- a/src/lib-sieve/sieve-script.c +++ b/src/lib-sieve/sieve-script.c @@ -542,6 +542,20 @@ int sieve_script_binary_save return script->v.binary_save(script, sbin, update, error_r); } +const char *sieve_script_binary_get_directory +(struct sieve_script *script) +{ + if ( script->bin_dir != NULL && + sieve_script_setup_bindir(script, 0700) >= 0 ) { + return script->bin_dir; + } + + if ( script->v.binary_get_directory == NULL ) + return NULL; + + return script->v.binary_get_directory(script); +} + int sieve_script_setup_bindir (struct sieve_script *script, mode_t mode) { diff --git a/src/lib-sieve/sieve-script.h b/src/lib-sieve/sieve-script.h index 74c02b823b4d9110d3a59c6d6b8675e5674d607c..eb2dc73f14ba645716fe0556eff2999e41ee546d 100644 --- a/src/lib-sieve/sieve-script.h +++ b/src/lib-sieve/sieve-script.h @@ -68,6 +68,9 @@ int sieve_script_binary_save (struct sieve_script *script, struct sieve_binary *sbin, bool update, enum sieve_error *error_r); +const char *sieve_script_binary_get_directory + (struct sieve_script *script); + /* * Stream management */