# HG changeset patch # User Timo Sirainen # Date 1296579954 -7200 # Node ID 495fb0e9f7cc5baffc94af431f0f20b7414e5b77 # Parent 893e0738733bbbcfe8990f4f6b8bc2b9976f029c imapc: Moved settings from plugin {} section to proper imapc_* settings. diff -r 893e0738733b -r 495fb0e9f7cc src/lib-storage/index/imapc/Makefile.am --- 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 diff -r 893e0738733b -r 495fb0e9f7cc src/lib-storage/index/imapc/imapc-settings.c --- /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 + +#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; +} + +/* */ +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; +} diff -r 893e0738733b -r 495fb0e9f7cc src/lib-storage/index/imapc/imapc-settings.h --- /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 diff -r 893e0738733b -r 495fb0e9f7cc src/lib-storage/index/imapc/imapc-storage.c --- 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, diff -r 893e0738733b -r 495fb0e9f7cc src/lib-storage/index/imapc/imapc-storage.h --- 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;