Пример #1
0
int mdbox_storage_create(struct mail_storage *_storage,
                         struct mail_namespace *ns, const char **error_r)
{
    struct mdbox_storage *storage = (struct mdbox_storage *)_storage;
    const char *dir;

    storage->set = mail_storage_get_driver_settings(_storage);
    storage->preallocate_space = storage->set->mdbox_preallocate_space;

    if (*ns->list->set.mailbox_dir_name == '\0') {
        *error_r = "mdbox: MAILBOXDIR must not be empty";
        return -1;
    }

    _storage->unique_root_dir =
        p_strdup(_storage->pool, ns->list->set.root_dir);

    dir = mailbox_list_get_root_forced(ns->list, MAILBOX_LIST_PATH_TYPE_DIR);
    storage->storage_dir = p_strconcat(_storage->pool, dir,
                                       "/"MDBOX_GLOBAL_DIR_NAME, NULL);
    storage->alt_storage_dir = p_strconcat(_storage->pool,
                                           ns->list->set.alt_dir,
                                           "/"MDBOX_GLOBAL_DIR_NAME, NULL);
    i_array_init(&storage->open_files, 64);

    storage->map = mdbox_map_init(storage, ns->list);
    return dbox_storage_create(_storage, ns, error_r);
}
Пример #2
0
static int
mbox_storage_create(struct mail_storage *_storage, struct mail_namespace *ns,
		    const char **error_r)
{
	struct mbox_storage *storage = (struct mbox_storage *)_storage;
	struct stat st;
	const char *dir;

	if (master_service_get_client_limit(master_service) > 1) {
		/* we can't handle locking related problems. */
		*error_r = "mbox requires client_limit=1 for service";
		return -1;
	}

	storage->set = mail_storage_get_driver_settings(_storage);

	if (mailbox_list_get_root_path(ns->list, MAILBOX_LIST_PATH_TYPE_INDEX, &dir)) {
		_storage->temp_path_prefix = p_strconcat(_storage->pool, dir,
			"/", mailbox_list_get_temp_prefix(ns->list), NULL);
	}
	if (stat(ns->list->set.root_dir, &st) == 0 && !S_ISDIR(st.st_mode)) {
		*error_r = t_strdup_printf(
			"mbox root directory can't be a file: %s "
			"(http://wiki2.dovecot.org/MailLocation/Mbox)",
			ns->list->set.root_dir);
		return -1;
	}
	return 0;
}
Пример #3
0
    pool = pool_alloconly_create("maildir storage", 512+256);
    storage = p_new(pool, struct maildir_storage, 1);
    storage->storage = maildir_storage;
    storage->storage.pool = pool;
    return &storage->storage;
}

static int
maildir_storage_create(struct mail_storage *_storage, struct mail_namespace *ns,
                       const char **error_r ATTR_UNUSED)
{
    struct maildir_storage *storage = (struct maildir_storage *)_storage;
    struct mailbox_list *list = ns->list;
    const char *dir;

    storage->set = mail_storage_get_driver_settings(_storage);

    storage->temp_prefix = p_strdup(_storage->pool,
                                    mailbox_list_get_temp_prefix(list));

    if (list->set.control_dir == NULL && list->set.inbox_path == NULL &&
            (ns->flags & NAMESPACE_FLAG_INBOX_ANY) != 0) {
        /* put the temp files into tmp/ directory preferrably */
        storage->temp_prefix = p_strconcat(_storage->pool, "tmp/",
                                           storage->temp_prefix, NULL);
        dir = mailbox_list_get_root_forced(list, MAILBOX_LIST_PATH_TYPE_DIR);
    } else {
        /* control dir should also be writable */
        dir = mailbox_list_get_root_forced(list, MAILBOX_LIST_PATH_TYPE_CONTROL);
    }
    _storage->temp_path_prefix = p_strconcat(_storage->pool, dir, "/",