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