dovecot-2.2-pigeonhole: lib-sieve: Added version to script stora...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Sat Aug 23 22:27:50 UTC 2014


details:   http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/3ceab9d20a00
changeset: 1911:3ceab9d20a00
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Sun Aug 24 00:27:40 2014 +0200
description:
lib-sieve: Added version to script storage class.
Updated binary version.

diffstat:

 src/lib-sieve/sieve-binary.h                    |   2 +-
 src/lib-sieve/sieve-script.c                    |  19 +++++++++++++++++++
 src/lib-sieve/sieve-storage-private.h           |   2 ++
 src/lib-sieve/storage/dict/sieve-dict-storage.c |   1 +
 src/lib-sieve/storage/file/sieve-file-storage.c |   1 +
 src/lib-sieve/storage/ldap/sieve-ldap-storage.c |   1 +
 6 files changed, 25 insertions(+), 1 deletions(-)

diffs (100 lines):

diff -r 62abeb85c8a5 -r 3ceab9d20a00 src/lib-sieve/sieve-binary.h
--- a/src/lib-sieve/sieve-binary.h	Sat Aug 23 22:52:30 2014 +0200
+++ b/src/lib-sieve/sieve-binary.h	Sun Aug 24 00:27:40 2014 +0200
@@ -13,7 +13,7 @@
  */
 
 #define SIEVE_BINARY_VERSION_MAJOR     1
-#define SIEVE_BINARY_VERSION_MINOR     1
+#define SIEVE_BINARY_VERSION_MINOR     2
 
 /*
  * Binary object
diff -r 62abeb85c8a5 -r 3ceab9d20a00 src/lib-sieve/sieve-script.c
--- a/src/lib-sieve/sieve-script.c	Sat Aug 23 22:52:30 2014 +0200
+++ b/src/lib-sieve/sieve-script.c	Sun Aug 24 00:27:40 2014 +0200
@@ -338,6 +338,7 @@
 {
 	struct sieve_binary *sbin = sieve_binary_block_get_binary(sblock);
 	string_t *storage_class, *location;
+	unsigned int version;
 
 	if ( sieve_binary_block_get_size(sblock) - *offset == 0 )
 		return 0;
@@ -353,6 +354,23 @@
 	if ( strcmp(str_c(storage_class), script->driver_name) != 0 )
 		return 0;
 
+	/* version */
+	if ( !sieve_binary_read_unsigned(sblock, offset, &version) ) {
+		sieve_script_sys_error(script,
+			"Binary %s has invalid metadata for script %s: "
+			"Invalid version",
+			sieve_binary_path(sbin), sieve_script_location(script));
+		return -1;
+	}
+	if ( script->storage->version != version ) {
+		sieve_script_sys_debug(script,
+			"Binary %s was compiled with different version "
+			"of the `%s' script storage class (compiled v%d, expected v%d;"
+			"automatically fixed when re-compiled)", sieve_binary_path(sbin),
+			script->driver_name, version, script->storage->version);
+		return 0;
+	}
+
 	/* location */
 	if ( !sieve_binary_read_string(sblock, offset, &location) ) {
 		sieve_script_sys_error(script,
@@ -376,6 +394,7 @@
 (struct sieve_script *script, struct sieve_binary_block *sblock)
 {
 	sieve_binary_emit_cstring(sblock, script->driver_name);
+	sieve_binary_emit_unsigned(sblock, script->storage->version);
 	sieve_binary_emit_cstring(sblock,
 		( script->location == NULL ? "" : script->location ));
 
diff -r 62abeb85c8a5 -r 3ceab9d20a00 src/lib-sieve/sieve-storage-private.h
--- a/src/lib-sieve/sieve-storage-private.h	Sat Aug 23 22:52:30 2014 +0200
+++ b/src/lib-sieve/sieve-storage-private.h	Sun Aug 24 00:27:40 2014 +0200
@@ -93,6 +93,8 @@
 	struct sieve_instance *svinst;
 
 	const char *driver_name;
+	unsigned int version;
+
 	const struct sieve_storage *storage_class;
 	struct sieve_storage_vfuncs v;
 
diff -r 62abeb85c8a5 -r 3ceab9d20a00 src/lib-sieve/storage/dict/sieve-dict-storage.c
--- a/src/lib-sieve/storage/dict/sieve-dict-storage.c	Sat Aug 23 22:52:30 2014 +0200
+++ b/src/lib-sieve/storage/dict/sieve-dict-storage.c	Sun Aug 24 00:27:40 2014 +0200
@@ -166,6 +166,7 @@
 
 const struct sieve_storage sieve_dict_storage = {
 	.driver_name = SIEVE_DICT_STORAGE_DRIVER_NAME,
+	.version = 0,
 	.v = {
 		.alloc = sieve_dict_storage_alloc,
 		.destroy = sieve_dict_storage_destroy,
diff -r 62abeb85c8a5 -r 3ceab9d20a00 src/lib-sieve/storage/file/sieve-file-storage.c
--- a/src/lib-sieve/storage/file/sieve-file-storage.c	Sat Aug 23 22:52:30 2014 +0200
+++ b/src/lib-sieve/storage/file/sieve-file-storage.c	Sun Aug 24 00:27:40 2014 +0200
@@ -640,6 +640,7 @@
 
 const struct sieve_storage sieve_file_storage = {
 	.driver_name = SIEVE_FILE_STORAGE_DRIVER_NAME,
+	.version = 0,
 	.allows_synchronization = TRUE,
 	.v = {
 		.alloc = sieve_file_storage_alloc,
diff -r 62abeb85c8a5 -r 3ceab9d20a00 src/lib-sieve/storage/ldap/sieve-ldap-storage.c
--- a/src/lib-sieve/storage/ldap/sieve-ldap-storage.c	Sat Aug 23 22:52:30 2014 +0200
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-storage.c	Sun Aug 24 00:27:40 2014 +0200
@@ -158,6 +158,7 @@
 const struct sieve_storage sieve_ldap_storage_plugin = {
 #endif
 	.driver_name = SIEVE_LDAP_STORAGE_DRIVER_NAME,
+	.version = 0,
 	.v = {
 		.alloc = sieve_ldap_storage_alloc,
 		.init = sieve_ldap_storage_init,


More information about the dovecot-cvs mailing list