Skip to content

Commit

Permalink
doveadm sieve plugin: sync: Fixed handling of unknown attribute times…
Browse files Browse the repository at this point in the history
…tamps.
  • Loading branch information
stephanbosch committed Aug 30, 2016
1 parent 6f71a1f commit 8bb051e
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions src/plugins/doveadm-sieve/doveadm-sieve-sync.c
Expand Up @@ -140,6 +140,8 @@ sieve_attribute_set_active(struct mail_storage *storage,
{
const char *scriptname;
struct sieve_script *script;
time_t last_change =
(value->last_change == 0 ? ioloop_time : value->last_change);
int ret;

if (mailbox_attribute_value_to_string(storage, value, &scriptname) < 0)
Expand All @@ -156,7 +158,7 @@ sieve_attribute_set_active(struct mail_storage *storage,
}

/* deactivate current script */
if (sieve_storage_deactivate(svstorage, value->last_change) < 0) {
if (sieve_storage_deactivate(svstorage, last_change) < 0) {
mail_storage_set_critical(storage,
"Failed to deactivate Sieve: %s",
sieve_storage_get_last_error(svstorage, NULL));
Expand All @@ -170,15 +172,15 @@ sieve_attribute_set_active(struct mail_storage *storage,
/* activate specified script */
script = sieve_storage_open_script(svstorage, scriptname, NULL);
ret = script == NULL ? -1 :
sieve_script_activate(script, value->last_change);
sieve_script_activate(script, last_change);
if (ret < 0) {
mail_storage_set_critical(storage,
"Failed to activate Sieve script '%s': %s", scriptname,
sieve_storage_get_last_error(svstorage, NULL));
}
if (script != NULL)
sieve_script_unref(&script);
sieve_storage_set_modified(svstorage, value->last_change);
sieve_storage_set_modified(svstorage, last_change);
return ret;
}

Expand Down Expand Up @@ -209,28 +211,31 @@ sieve_attribute_set_active_script(struct mail_storage *storage,
const struct mail_attribute_value *value)
{
struct istream *input;
time_t last_change =
(value->last_change == 0 ? ioloop_time : value->last_change);

if (value->value != NULL) {
input = i_stream_create_from_data(value->value, strlen(value->value));
} else if (value->value_stream != NULL) {
input = value->value_stream;
i_stream_ref(input);
} else {
return sieve_attribute_unset_active_script(storage, svstorage, value->last_change);
return sieve_attribute_unset_active_script
(storage, svstorage, last_change);
}
/* skip over the 'S' type */
i_stream_skip(input, 1);

if (sieve_storage_save_as_active
(svstorage, input, value->last_change) < 0) {
(svstorage, input, last_change) < 0) {
mail_storage_set_critical(storage,
"Failed to save active sieve script: %s",
sieve_storage_get_last_error(svstorage, NULL));
i_stream_unref(&input);
return -1;
}

sieve_storage_set_modified(svstorage, value->last_change);
sieve_storage_set_modified(svstorage, last_change);
i_stream_unref(&input);
return 0;
}
Expand Down Expand Up @@ -317,7 +322,8 @@ sieve_attribute_set_sieve(struct mail_storage *storage,
return -1;
}

sieve_storage_save_set_mtime(save_ctx, value->last_change);
if (value->last_change != 0)
sieve_storage_save_set_mtime(save_ctx, value->last_change);

ret = 0;
while (i_stream_read(input) > 0) {
Expand Down

0 comments on commit 8bb051e

Please sign in to comment.