dovecot-2.2-pigeonhole: lib-sieve: ldap storage: Implemented che...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Fri Jul 25 23:17:59 UTC 2014
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/1475892e8cff
changeset: 1895:1475892e8cff
user: Stephan Bosch <stephan at rename-it.nl>
date: Sat Jul 26 01:17:51 2014 +0200
description:
lib-sieve: ldap storage: Implemented checking config mtime for binary recompile.
diffstat:
src/lib-sieve/storage/ldap/sieve-ldap-script.c | 10 ++++++++++
src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c | 14 ++++++++++++++
src/lib-sieve/storage/ldap/sieve-ldap-storage.h | 2 ++
3 files changed, 26 insertions(+), 0 deletions(-)
diffs (84 lines):
diff -r e2dccd452e88 -r 1475892e8cff src/lib-sieve/storage/ldap/sieve-ldap-script.c
--- a/src/lib-sieve/storage/ldap/sieve-ldap-script.c Sat Jul 26 00:47:29 2014 +0200
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-script.c Sat Jul 26 01:17:51 2014 +0200
@@ -125,17 +125,26 @@
{
struct sieve_ldap_script *lscript =
(struct sieve_ldap_script *)script;
+ struct sieve_ldap_storage *lstorage =
+ (struct sieve_ldap_storage *)script->storage;
struct sieve_binary *sbin =
sieve_binary_block_get_binary(sblock);
string_t *dn, *modattr;
+ /* config file changed? */
+ if ( sieve_binary_mtime(sbin) <= lstorage->set_mtime )
+ return 0;
+
+ /* open script if not open already */
if ( lscript->dn == NULL &&
sieve_script_open(script, NULL) < 0 )
return 0;
+ /* if modattr not found recompile always */
if ( lscript->modattr == NULL || *lscript->modattr == '\0' )
return 0;
+ /* compare DN in binary and from search result */
if ( !sieve_binary_read_string(sblock, offset, &dn) ) {
sieve_script_sys_error(script,
"Binary `%s' has invalid metadata for script `%s': "
@@ -147,6 +156,7 @@
if ( strcmp(str_c(dn), lscript->dn) != 0 )
return 0;
+ /* compare modattr in binary and from search result */
if ( !sieve_binary_read_string(sblock, offset, &modattr) ) {
sieve_script_sys_error(script,
"Binary `%s' has invalid metadata for script `%s': "
diff -r e2dccd452e88 -r 1475892e8cff src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c Sat Jul 26 00:47:29 2014 +0200
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage-settings.c Sat Jul 26 01:17:51 2014 +0200
@@ -15,6 +15,10 @@
#include "sieve-ldap-db.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
#define DEF_STR(name) DEF_STRUCT_STR(name, sieve_ldap_storage_settings)
#define DEF_INT(name) DEF_STRUCT_INT(name, sieve_ldap_storage_settings)
#define DEF_BOOL(name) DEF_STRUCT_BOOL(name, sieve_ldap_storage_settings)
@@ -87,8 +91,18 @@
{
struct sieve_storage *storage = &lstorage->storage;
const char *str, *error;
+ struct stat st;
+
+ if ( stat(config_path, &st) < 0 ) {
+ sieve_storage_sys_error(storage,
+ "Failed to read LDAP storage config: "
+ "stat(%s) failed: %m", config_path);
+ return -1;
+ }
lstorage->set = default_settings;
+ lstorage->set_mtime = st.st_mtime;
+
if (!settings_read_nosection
(config_path, parse_setting, lstorage, &error)) {
sieve_storage_set_critical(storage,
diff -r e2dccd452e88 -r 1475892e8cff src/lib-sieve/storage/ldap/sieve-ldap-storage.h
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage.h Sat Jul 26 00:47:29 2014 +0200
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage.h Sat Jul 26 01:17:51 2014 +0200
@@ -64,7 +64,9 @@
struct sieve_ldap_storage {
struct sieve_storage storage;
+
struct sieve_ldap_storage_settings set;
+ time_t set_mtime;
const char *username; // FIXME: needed?
More information about the dovecot-cvs
mailing list