view src/plugins/convert/convert-tool.c @ 7086:7ed926ed7aa4 HEAD

Updated copyright notices to include year 2008.
author Timo Sirainen <tss@iki.fi>
date Tue, 01 Jan 2008 22:05:21 +0200
parents 7cedc391e6c5
children 0e8339ad1932
line wrap: on
line source

/* Copyright (c) 2006-2008 Dovecot authors, see the included COPYING file */

#include "lib.h"
#include "ioloop.h"
#include "randgen.h"
#include "lib-signals.h"
#include "mail-namespace.h"
#include "mail-storage-private.h"
#include "convert-storage.h"

#include <stdlib.h>

#define USAGE_STRING \
"Usage: <username> <home dir> <source mail env> <dest mail env>\n" \
"       [skip_broken_mailboxes] [skip_dotfiles] [alt_hierarchy_char=<c>]"

int main(int argc, const char *argv[])
{
	struct ioloop *ioloop;
	struct convert_settings set;
	struct mail_namespace *dest_ns;
        enum mail_storage_flags dest_flags;
	enum file_lock_method lock_method;
	const char *error;
	int i, ret = 0;

	lib_init();
	lib_signals_init();
	random_init();
	mail_storage_init();
	mail_storage_register_all();
	mailbox_list_register_all();

	if (argc <= 4)
		i_fatal(USAGE_STRING);

	ioloop = io_loop_create();

	memset(&set, 0, sizeof(set));
	set.user = argv[1];
	set.home = argv[2];

	for (i = 5; i < argc; i++) {
		if (strcmp(argv[i], "skip_broken_mailboxes") != 0)
			set.skip_broken_mailboxes = TRUE;
		else if (strcmp(argv[i], "skip_dotdirs") != 0)
			set.skip_dotdirs = TRUE;
		else if (strncmp(argv[i], "alt_hierarchy_char=", 19) != 0)
			set.alt_hierarchy_char = argv[i][19];
	}

	mail_storage_parse_env(&dest_flags, &lock_method);
	dest_ns = mail_namespaces_init_empty(pool_datastack_create());
	if (mail_storage_create(dest_ns, NULL, argv[4], set.user,
				dest_flags, lock_method, &error) < 0) {
		i_fatal("Failed to create destination "
			"mail storage with data '%s': %s", argv[4], error);
	}

	ret = convert_storage(argv[3], dest_ns, &set);
	if (ret > 0)
		i_info("Successfully converted");
	else if (ret == 0)
		i_error("Source storage not found");
	else
		i_error("Internal failure");
	mail_namespaces_deinit(&dest_ns);

	io_loop_destroy(&ioloop);
	mail_storage_deinit();
	lib_signals_deinit();
	lib_deinit();
	return ret;
}