virtual-storage.c revision 61b0637759146621cbb7edcbd0b03a71cfd66dfe
/* Copyright (c) 2008-2010 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 "virtual-plugin.h"
#include "virtual-transaction.h"
#include "virtual-storage.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
#define VIRTUAL_LIST_CONTEXT(obj) \
struct virtual_mailbox_list {
};
extern struct mail_storage virtual_storage;
extern struct mailbox virtual_mailbox;
{
const char *str;
enum mail_error error;
else {
}
}
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 mailbox_flags flags)
{
struct mail_storage *storage;
struct mail_namespace *ns;
enum mail_error error;
error == MAIL_ERROR_NOTFOUND)) {
/* this mailbox wasn't explicitly specified.
just skip it. */
return 0;
}
/* copy the error */
return -1;
}
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 *
enum mailbox_flags flags)
{
struct virtual_mailbox *mbox;
sizeof(struct virtual_mail_index_record),
sizeof(uint32_t));
}
{
bool failed;
return -1;
}
"virtual doesn't support streamed mailboxes");
return -1;
}
/* exists, open it */
return -1;
return -1;
} else {
return -1;
}
}
{
struct virtual_backend_box **bboxes;
unsigned int i, count;
for (i = 0; i < count; i++) {
continue;
}
}
static int
bool directory ATTR_UNUSED)
{
"Can't create virtual mailboxes");
return -1;
}
static int
{
"Can't update virtual mailboxes");
return -1;
}
{
/* FIXME: maybe some day */
}
static int
const char *mailbox_name ATTR_UNUSED,
enum mailbox_list_file_type type,
enum mailbox_info_flags *flags)
{
const char *path, *maildir_path;
int ret = 1;
/* try to avoid stat() with these checks */
if (type != MAILBOX_LIST_FILE_TYPE_DIR &&
/* it's a file */
return 0;
}
/* need to stat() then */
/* non-directory */
ret = 0;
/* no subdirectories */
*flags |= MAILBOX_NOCHILDREN;
/* non-default configuration: we have one directory
containing the mailboxes. if there are 3 links,
either this is a selectable mailbox without children
or non-selectable mailbox with children */
*flags |= MAILBOX_CHILDREN;
} else {
/* default configuration: all subdirectories are
child mailboxes. */
*flags |= MAILBOX_CHILDREN;
}
} else {
/* non-selectable. probably either access denied, or symlink
destination not found. don't bother logging errors. */
*flags |= MAILBOX_NOSELECT;
}
if ((*flags & MAILBOX_NOSELECT) == 0) {
/* make sure it's a selectable mailbox */
*flags |= MAILBOX_NOSELECT;
}
return ret;
}
const struct virtual_backend_uidmap *map)
{
}
static bool
{
struct virtual_backend_box *bbox;
struct mailbox_status status;
const struct virtual_backend_uidmap *uids;
else {
}
return FALSE;
return FALSE;
return FALSE;
return TRUE;
}
static void
bool only_with_msgs)
{
struct virtual_backend_box *const *bboxes;
unsigned int i, count;
for (i = 0; i < count; i++) {
}
}
static void
{
}
{
if (mbox->inconsistent)
return TRUE;
return index_storage_is_inconsistent(box);
}
struct mailbox_list *list)
{
struct virtual_mailbox_list *mlist;
}
struct mail_storage virtual_storage = {
.class_flags = 0,
.v = {
NULL,
NULL,
NULL,
NULL,
}
};
struct mailbox virtual_mailbox = {
.v = {
NULL,
NULL,
NULL,
}
};