From 742c8bf0de888868cb51f1a043fe59f8b9db1b38 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Sat, 1 Aug 2009 22:28:50 +0200 Subject: [PATCH] Mailbox extension: finished implementation. --- .../plugins/mailbox/cmd-mailboxexists.c | 43 +++++++++++++++---- src/lib-sieve/plugins/mailbox/ext-mailbox.c | 4 +- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/lib-sieve/plugins/mailbox/cmd-mailboxexists.c b/src/lib-sieve/plugins/mailbox/cmd-mailboxexists.c index 94dc893bc..f838f3067 100644 --- a/src/lib-sieve/plugins/mailbox/cmd-mailboxexists.c +++ b/src/lib-sieve/plugins/mailbox/cmd-mailboxexists.c @@ -1,6 +1,10 @@ /* Copyright (c) 2002-2009 Dovecot Sieve authors, see the included COPYING file */ +#include "lib.h" +#include "mail-storage.h" +#include "mail-namespace.h" + #include "sieve-common.h" #include "sieve-commands.h" #include "sieve-code.h" @@ -106,7 +110,7 @@ static int tst_mailboxexists_operation_execute const struct sieve_runtime_env *renv, sieve_size_t *address) { struct sieve_coded_stringlist *mailbox_names; - string_t *uri_item; + string_t *mailbox_item; bool result = TRUE, all_exist = TRUE; /* @@ -125,13 +129,36 @@ static int tst_mailboxexists_operation_execute sieve_runtime_trace(renv, "MAILBOXEXISTS command"); - uri_item = NULL; - while ( (result=sieve_coded_stringlist_next_item(mailbox_names, &uri_item)) - && uri_item != NULL ) { - - if ( TRUE ) { - all_exist = FALSE; - break; + if ( renv->scriptenv->namespaces != NULL ) { + mailbox_item = NULL; + while ( (result=sieve_coded_stringlist_next_item + (mailbox_names, &mailbox_item)) + && mailbox_item != NULL ) { + struct mail_namespace *ns; + struct mail_storage *storage; + const char *mailbox = str_c(mailbox_item); + struct mailbox *box; + + /* Find the namespace */ + ns = mail_namespace_find(renv->scriptenv->namespaces, &mailbox); + if ( ns == NULL) { + all_exist = FALSE; + break; + } + + /* Open the box */ + storage = ns->storage; + box = mailbox_open(&storage, mailbox, NULL, MAILBOX_OPEN_FAST); + if ( box == NULL ) { + all_exist = FALSE; + break; + } + + /* Also fail when it is readonly */ + if ( mailbox_is_readonly(box) ) + all_exist = FALSE; + + mailbox_close(&box); } } diff --git a/src/lib-sieve/plugins/mailbox/ext-mailbox.c b/src/lib-sieve/plugins/mailbox/ext-mailbox.c index c0fc6e8b4..3ea658802 100644 --- a/src/lib-sieve/plugins/mailbox/ext-mailbox.c +++ b/src/lib-sieve/plugins/mailbox/ext-mailbox.c @@ -6,8 +6,8 @@ * * Authors: Stephan Bosch * Specification: RFC 5490 - * Implementation: skeleton - * Status: under development + * Implementation: full + * Status: experimental, largely untested * */ -- GitLab