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