From b59f6ec67a5fb68a1448ea5fba40a792c58f435b Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Wed, 25 Dec 2013 21:40:19 +0100 Subject: [PATCH] lib-sieve: Added method to script object for obtaining the directory where the script binary is stored. --- src/lib-sieve/sieve-script-dict.c | 1 + src/lib-sieve/sieve-script-file.c | 9 +++++++++ src/lib-sieve/sieve-script-private.h | 2 ++ src/lib-sieve/sieve-script.c | 14 ++++++++++++++ src/lib-sieve/sieve-script.h | 3 +++ 5 files changed, 29 insertions(+) diff --git a/src/lib-sieve/sieve-script-dict.c b/src/lib-sieve/sieve-script-dict.c index 14358662d..939328b60 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 eee6f5082..71c132669 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 753d64a6b..edc343716 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 19869483b..720b16c5e 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 74c02b823..eb2dc73f1 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 */ -- GitLab