virtual-storage.c revision 8c909e451d14075c05d90382cf8eebc4e354f569
/* Copyright (c) 2008-2012 Dovecot authors, see the included COPYING file */
#include "lib.h"
#include "array.h"
#include "ioloop.h"
#include "str.h"
#include "mkdir-parents.h"
#include "unlink-directory.h"
#include "index-mail.h"
#include "mail-copy.h"
#include "mail-search.h"
#include "mailbox-list-private.h"
#include "virtual-plugin.h"
#include "virtual-transaction.h"
#include "virtual-storage.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
extern struct mail_storage virtual_storage;
extern struct mailbox virtual_mailbox;
extern struct virtual_mailbox_vfuncs virtual_mailbox_vfuncs;
{
}
{
else {
return t_strdup_printf("<hidden>%c%s",
}
}
{
enum mail_error error;
}
static struct mail_storage *virtual_storage_alloc(void)
{
struct virtual_storage *storage;
}
static void
struct mailbox_list_settings *set)
{
}
struct virtual_backend_box *
{
struct virtual_backend_box *const *bboxes;
unsigned int i, count;
for (i = 0; i < count; i++) {
return bboxes[i];
}
return NULL;
}
struct virtual_backend_box *
{
struct virtual_backend_box *const *bboxes;
unsigned int i, count;
if (mailbox_id == 0)
return NULL;
for (i = 0; i < count; i++) {
return bboxes[i];
}
return NULL;
}
const char *name)
{
const char *const *names;
unsigned int i, count;
for (i = 0; i < count; i++) {
return TRUE;
}
return FALSE;
}
struct virtual_backend_box *bbox)
{
enum mail_error error;
if (error == MAIL_ERROR_NOTFOUND) {
/* ignore this. it could be intentional. */
i_debug("virtual mailbox %s: "
"Skipping non-existing mailbox %s",
}
return 0;
}
/* this mailbox wasn't explicitly specified. just skip it. */
return 0;
}
"Virtual mailbox open failed because of mailbox %s: %s",
return -1;
}
struct virtual_backend_box *bbox,
enum mailbox_flags flags)
{
struct mail_namespace *ns;
const char *mailbox;
if (bbox->clear_recent)
return 1;
}
enum mailbox_flags flags)
{
struct virtual_backend_box *const *bboxes;
unsigned int i, count;
int ret;
for (i = 0; i < count; ) {
if (ret <= 0) {
if (ret < 0)
break;
} else {
i++;
}
}
if (i == count)
return 0;
else {
/* failed */
for (; i > 0; i--) {
}
return -1;
}
}
static struct mailbox *
{
struct virtual_mailbox *mbox;
}
{
struct virtual_backend_box **bboxes;
unsigned int i, count;
for (i = 0; i < count; i++) {
continue;
}
}
static int
enum mailbox_existence *existence_r)
{
}
{
int ret = 0;
return -1;
}
if (ret == 0) {
}
if (ret < 0) {
return -1;
}
return -1;
sizeof(struct virtual_mail_index_record),
sizeof(uint32_t));
return 0;
}
{
}
{
}
static int
bool directory ATTR_UNUSED)
{
"Can't create virtual mailboxes");
return -1;
}
static int
{
"Can't update virtual mailboxes");
return -1;
}
static int
enum mailbox_status_items items,
struct mailbox_status *status_r)
{
if ((items & STATUS_LAST_CACHED_SEQ) != 0)
items |= STATUS_MESSAGES;
return -1;
if ((items & STATUS_LAST_CACHED_SEQ) != 0) {
/* Virtual mailboxes have no cached data of their own, so the
current value is always 0. The most important use for this
functionality is for "doveadm index" to do FTS indexing and
it doesn't really matter there if we set this value
correctly or not. So for now just assume that everything is
indexed. */
}
return 0;
}
static int
enum mailbox_metadata_items items,
struct mailbox_metadata *metadata_r)
{
return -1;
if ((items & MAILBOX_METADATA_GUID) != 0) {
"Virtual mailboxes have no GUIDs");
return -1;
}
return 0;
}
static void
{
}
{
struct virtual_backend_box *const *bboxes;
unsigned int i, count;
for (i = 0; i < count; i++) {
else
}
}
static void
struct mailbox *backend_mailbox,
{
struct virtual_backend_box *bbox;
const struct virtual_backend_uidmap *uids;
struct seq_range_iter iter;
unsigned int n, i, count;
else {
}
return;
uids[i].virtual_uid);
i++;
}
}
}
static void
struct mailbox *backend_mailbox,
{
struct virtual_backend_box *bbox;
const struct virtual_backend_uidmap *uids;
struct seq_range_iter iter;
unsigned int n, i, count;
else {
}
return;
} else {
i++;
}
}
}
static void
bool only_with_msgs)
{
struct virtual_backend_box *const *bboxes;
unsigned int i, count;
for (i = 0; i < count; i++) {
}
}
{
if (mbox->inconsistent)
return TRUE;
return index_storage_is_inconsistent(box);
}
struct mail_storage virtual_storage = {
.v = {
NULL,
NULL,
NULL,
NULL,
}
};
struct mailbox virtual_mailbox = {
.v = {
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
}
};
struct virtual_mailbox_vfuncs virtual_mailbox_vfuncs = {
};