changeset 12625:495fb0e9f7cc

imapc: Moved settings from plugin {} section to proper imapc_* settings.
author Timo Sirainen <tss@iki.fi>
date Tue, 01 Feb 2011 19:05:54 +0200
parents 893e0738733b
children aa131065b53d
files src/lib-storage/index/imapc/Makefile.am src/lib-storage/index/imapc/imapc-settings.c src/lib-storage/index/imapc/imapc-settings.h src/lib-storage/index/imapc/imapc-storage.c src/lib-storage/index/imapc/imapc-storage.h
diffstat 5 files changed, 122 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/Makefile.am	Mon Jan 31 19:29:17 2011 +0200
+++ b/src/lib-storage/index/imapc/Makefile.am	Tue Feb 01 19:05:54 2011 +0200
@@ -3,6 +3,7 @@
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/src/lib \
 	-I$(top_srcdir)/src/lib-test \
+	-I$(top_srcdir)/src/lib-settings \
 	-I$(top_srcdir)/src/lib-dns \
 	-I$(top_srcdir)/src/lib-ssl-iostream \
 	-I$(top_srcdir)/src/lib-mail \
@@ -20,6 +21,7 @@
 	imapc-save.c \
 	imapc-search.c \
 	imapc-seqmap.c \
+	imapc-settings.c \
 	imapc-sync.c \
 	imapc-storage.c
 
@@ -28,6 +30,7 @@
 	imapc-list.h \
 	imapc-mail.h \
 	imapc-seqmap.h \
+	imapc-settings.h \
 	imapc-storage.h \
 	imapc-sync.h
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-storage/index/imapc/imapc-settings.c	Tue Feb 01 19:05:54 2011 +0200
@@ -0,0 +1,79 @@
+/* Copyright (c) 2011 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "settings-parser.h"
+#include "mail-storage-settings.h"
+#include "imapc-settings.h"
+
+#include <stddef.h>
+
+#undef DEF
+#define DEF(type, name) \
+	{ type, #name, offsetof(struct imapc_settings, name), NULL }
+
+static bool imapc_settings_check(void *_set, pool_t pool, const char **error_r);
+
+static const struct setting_define imapc_setting_defines[] = {
+	DEF(SET_STR, imapc_host),
+	DEF(SET_UINT, imapc_port),
+
+	DEF(SET_STR, imapc_user),
+	DEF(SET_STR, imapc_password),
+
+	DEF(SET_ENUM, imapc_ssl),
+	DEF(SET_STR, imapc_ssl_ca_dir),
+
+	SETTING_DEFINE_LIST_END
+};
+
+static const struct imapc_settings imapc_default_settings = {
+	.imapc_host = "",
+	.imapc_port = 143,
+
+	.imapc_user = "",
+	.imapc_password = "",
+
+	.imapc_ssl = "no:imaps:starttls",
+	.imapc_ssl_ca_dir = ""
+};
+
+static const struct setting_parser_info imapc_setting_parser_info = {
+	.module_name = "imapc",
+	.defines = imapc_setting_defines,
+	.defaults = &imapc_default_settings,
+
+	.type_offset = (size_t)-1,
+	.struct_size = sizeof(struct imapc_settings),
+
+	.parent_offset = (size_t)-1,
+	.parent = &mail_user_setting_parser_info,
+
+	.check_func = imapc_settings_check
+};
+
+const struct setting_parser_info *imapc_get_setting_parser_info(void)
+{
+	return &imapc_setting_parser_info;
+}
+
+/* <settings checks> */
+static bool imapc_settings_check(void *_set, pool_t pool ATTR_UNUSED,
+				 const char **error_r)
+{
+	struct imapc_settings *set = _set;
+
+	if (set->imapc_port == 0 || set->imapc_port > 65535) {
+		*error_r = "invalid imapc_port";
+		return FALSE;
+	}
+#ifndef CONFIG_BINARY
+	if (*set->imapc_ssl_ca_dir != '\0' &&
+	    access(set->imapc_ssl_ca_dir, X_OK) < 0) {
+		*error_r = t_strdup_printf(
+			"imapc_ssl_ca_dir: access(%s) failed: %m",
+			set->imapc_ssl_ca_dir);
+		return FALSE;
+	}
+#endif
+	return TRUE;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-storage/index/imapc/imapc-settings.h	Tue Feb 01 19:05:54 2011 +0200
@@ -0,0 +1,17 @@
+#ifndef IMAPC_SETTINGS_H
+#define IMAPC_SETTINGS_H
+
+struct imapc_settings {
+	const char *imapc_host;
+	unsigned int imapc_port;
+
+	const char *imapc_user;
+	const char *imapc_password;
+
+	const char *imapc_ssl;
+	const char *imapc_ssl_ca_dir;
+};
+
+const struct setting_parser_info *imapc_get_setting_parser_info(void);
+
+#endif
--- a/src/lib-storage/index/imapc/imapc-storage.c	Mon Jan 31 19:29:17 2011 +0200
+++ b/src/lib-storage/index/imapc/imapc-storage.c	Tue Feb 01 19:05:54 2011 +0200
@@ -9,6 +9,7 @@
 #include "imapc-client.h"
 #include "imapc-list.h"
 #include "imapc-sync.h"
+#include "imapc-settings.h"
 #include "imapc-storage.h"
 
 #define DNS_CLIENT_SOCKET_NAME "dns-client"
@@ -163,30 +164,23 @@
 {
 	struct imapc_storage *storage = (struct imapc_storage *)_storage;
 	struct imapc_client_settings set;
-	const char *port, *value;
 	string_t *str;
 
+	storage->set = mail_storage_get_driver_settings(_storage);
+
 	memset(&set, 0, sizeof(set));
-	set.host = ns->list->set.root_dir;
-
-	port = mail_user_plugin_getenv(_storage->user, "imapc_port");
-	if (port == NULL)
-		set.port = 143;
-	else {
-		if (str_to_uint(port, &set.port) < 0 ||
-		    set.port == 0 || set.port >= 65536) {
-			*error_r = t_strdup_printf("Invalid port: %s", port);
-			return -1;
-		}
+	set.host = storage->set->imapc_host;
+	if (*set.host == '\0') {
+		*error_r = "missing imapc_host";
+		return -1;
 	}
-
-	set.username = mail_user_plugin_getenv(_storage->user, "imapc_user");
-	if (set.username == NULL)
+	set.port = storage->set->imapc_port;
+	set.username = storage->set->imapc_user;
+	if (*set.username == '\0')
 		set.username = _storage->user->username;
-
-	set.password = mail_user_plugin_getenv(_storage->user, "pass");
-	if (set.password == NULL) {
-		*error_r = "missing pass";
+	set.password = storage->set->imapc_password;
+	if (*set.password == '\0') {
+		*error_r = "missing imapc_password";
 		return -1;
 	}
 	set.dns_client_socket_path =
@@ -196,15 +190,13 @@
 	mail_user_set_get_temp_prefix(str, _storage->user->set);
 	set.temp_path_prefix = str_c(str);
 
-	set.ssl_ca_dir = mail_user_plugin_getenv(_storage->user,
-						 "imapc_ssl_ca_dir");
-	if (set.ssl_ca_dir != NULL) {
-		value = mail_user_plugin_getenv(_storage->user,
-						"imapc_ssl_starttls");
-		set.ssl_mode = value != NULL ?
-			IMAPC_CLIENT_SSL_MODE_STARTTLS :
-			IMAPC_CLIENT_SSL_MODE_IMMEDIATE;
-	}
+	set.ssl_ca_dir = storage->set->imapc_ssl_ca_dir;
+	if (strcmp(storage->set->imapc_ssl, "imaps") == 0)
+		set.ssl_mode = IMAPC_CLIENT_SSL_MODE_IMMEDIATE;
+	else if (strcmp(storage->set->imapc_ssl, "starttls") == 0)
+		set.ssl_mode = IMAPC_CLIENT_SSL_MODE_STARTTLS;
+	else
+		set.ssl_mode = IMAPC_CLIENT_SSL_MODE_NONE;
 
 	storage->list = (struct imapc_mailbox_list *)ns->list;
 	storage->list->storage = storage;
@@ -496,7 +488,7 @@
 	.class_flags = 0,
 
 	.v = {
-		NULL,
+		imapc_get_setting_parser_info,
 		imapc_storage_alloc,
 		imapc_storage_create,
 		imapc_storage_destroy,
--- a/src/lib-storage/index/imapc/imapc-storage.h	Mon Jan 31 19:29:17 2011 +0200
+++ b/src/lib-storage/index/imapc/imapc-storage.h	Tue Feb 01 19:05:54 2011 +0200
@@ -28,6 +28,8 @@
 
 struct imapc_storage {
 	struct mail_storage storage;
+	const struct imapc_settings *set;
+
 	struct imapc_mailbox_list *list;
 	struct imapc_client *client;