"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/config/all-settings.c" between
dovecot-2.3.16.tar.gz and dovecot-2.3.17.tar.gz

About: Dovecot is an IMAP and POP3 server, written with security primarily in mind.

all-settings.c  (dovecot-2.3.16):all-settings.c  (dovecot-2.3.17)
skipping to change at line 20 skipping to change at line 20
#include "str.h" #include "str.h"
#include "ipwd.h" #include "ipwd.h"
#include "var-expand.h" #include "var-expand.h"
#include "file-lock.h" #include "file-lock.h"
#include "fsync-mode.h" #include "fsync-mode.h"
#include "hash-format.h" #include "hash-format.h"
#include "net.h" #include "net.h"
#include "unichar.h" #include "unichar.h"
#include "hash-method.h" #include "hash-method.h"
#include "settings-parser.h" #include "settings-parser.h"
#include "message-header-parser.h"
#include "all-settings.h" #include "all-settings.h"
#include <stddef.h> #include <stddef.h>
#include <unistd.h> #include <unistd.h>
#define CONFIG_BINARY #define CONFIG_BINARY
extern buffer_t config_all_services_buf;/* ../../src/lib-storage/mail-storage-se ttings.h */ extern buffer_t config_all_services_buf;/* ../../src/lib-storage/mail-storage-se ttings.h */
extern const struct setting_parser_info mail_user_setting_parser_info; extern const struct setting_parser_info mail_user_setting_parser_info;
extern const struct setting_parser_info mail_namespace_setting_parser_info; extern const struct setting_parser_info mail_namespace_setting_parser_info;
extern const struct setting_parser_info mail_storage_setting_parser_info; extern const struct setting_parser_info mail_storage_setting_parser_info;
/* <settings checks> */ /* <settings checks> */
#define MAILBOX_SET_AUTO_NO "no" #define MAILBOX_SET_AUTO_NO "no"
skipping to change at line 85 skipping to change at line 86
bool mail_debug; bool mail_debug;
bool mail_full_filesystem_access; bool mail_full_filesystem_access;
bool maildir_stat_dirs; bool maildir_stat_dirs;
bool mail_shared_explicit_inbox; bool mail_shared_explicit_inbox;
const char *lock_method; const char *lock_method;
const char *pop3_uidl_format; const char *pop3_uidl_format;
const char *hostname; const char *hostname;
const char *recipient_delimiter; const char *recipient_delimiter;
const char *ssl_client_ca_file;
const char *ssl_client_ca_dir;
const char *ssl_client_cert;
const char *ssl_client_key;
const char *ssl_cipher_list;
const char *ssl_cipher_suites;
const char *ssl_curve_list;
const char *ssl_min_protocol;
const char *ssl_crypto_device;
bool ssl_client_require_valid_cert;
bool verbose_ssl;
const char *mail_attachment_detection_options; const char *mail_attachment_detection_options;
enum file_lock_method parsed_lock_method; enum file_lock_method parsed_lock_method;
enum fsync_mode parsed_fsync_mode; enum fsync_mode parsed_fsync_mode;
const char *const *parsed_mail_attachment_content_type_filter; const char *const *parsed_mail_attachment_content_type_filter;
bool parsed_mail_attachment_exclude_inlined; bool parsed_mail_attachment_exclude_inlined;
bool parsed_mail_attachment_detection_add_flags; bool parsed_mail_attachment_detection_add_flags;
bool parsed_mail_attachment_detection_no_flags_on_fetch; bool parsed_mail_attachment_detection_no_flags_on_fetch;
}; };
skipping to change at line 364 skipping to change at line 354
bool login_dump_core:1; bool login_dump_core:1;
/* -- flags that can be set internally -- */ /* -- flags that can be set internally -- */
/* process_limit must not be higher than 1 */ /* process_limit must not be higher than 1 */
bool process_limit_1:1; bool process_limit_1:1;
}; };
ARRAY_DEFINE_TYPE(service_settings, struct service_settings *); ARRAY_DEFINE_TYPE(service_settings, struct service_settings *);
/* ../../src/lib-master/master-service-ssl-settings.h */ /* ../../src/lib-master/master-service-ssl-settings.h */
extern const struct setting_parser_info master_service_ssl_setting_parser_info; extern const struct setting_parser_info master_service_ssl_setting_parser_info;
extern const struct setting_parser_info master_service_ssl_server_setting_parser _info;
struct master_service_ssl_settings { struct master_service_ssl_settings {
const char *ssl; const char *ssl;
const char *ssl_ca; const char *ssl_ca;
const char *ssl_cert;
const char *ssl_alt_cert;
const char *ssl_key;
const char *ssl_alt_key;
const char *ssl_key_password;
const char *ssl_client_ca_file; const char *ssl_client_ca_file;
const char *ssl_client_ca_dir; const char *ssl_client_ca_dir;
const char *ssl_client_cert; const char *ssl_client_cert;
const char *ssl_client_key; const char *ssl_client_key;
const char *ssl_dh;
const char *ssl_cipher_list; const char *ssl_cipher_list;
const char *ssl_cipher_suites; const char *ssl_cipher_suites;
const char *ssl_curve_list; const char *ssl_curve_list;
const char *ssl_min_protocol; const char *ssl_min_protocol;
const char *ssl_cert_username_field; const char *ssl_cert_username_field;
const char *ssl_crypto_device; const char *ssl_crypto_device;
const char *ssl_options; const char *ssl_options;
bool ssl_verify_client_cert; bool ssl_verify_client_cert;
bool ssl_client_require_valid_cert; bool ssl_client_require_valid_cert;
bool ssl_require_crl; bool ssl_require_crl;
bool verbose_ssl; bool verbose_ssl;
bool ssl_prefer_server_ciphers; bool ssl_prefer_server_ciphers;
/* These are derived from ssl_options, not set directly */ /* These are derived from ssl_options, not set directly */
struct { struct {
bool compression; bool compression;
bool tickets; bool tickets;
} parsed_opts; } parsed_opts;
}; };
struct master_service_ssl_server_settings {
const char *ssl_cert;
const char *ssl_alt_cert;
const char *ssl_key;
const char *ssl_alt_key;
const char *ssl_key_password;
const char *ssl_dh;
};
/* ../../src/lib-master/master-service-settings.h */ /* ../../src/lib-master/master-service-settings.h */
extern const struct setting_parser_info master_service_setting_parser_info; extern const struct setting_parser_info master_service_setting_parser_info;
struct master_service_settings { struct master_service_settings {
/* NOTE: log process won't see any new settings unless they're /* NOTE: log process won't see any new settings unless they're
explicitly sent via environment variables by master process. */ explicitly sent via environment variables by master process. */
const char *base_dir; const char *base_dir;
const char *state_dir; const char *state_dir;
const char *instance_name; const char *instance_name;
const char *log_path; const char *log_path;
const char *info_log_path; const char *info_log_path;
skipping to change at line 460 skipping to change at line 453
unsigned int debug; unsigned int debug;
unsigned int max_attribute_count; unsigned int max_attribute_count;
bool require_ssl; bool require_ssl;
bool start_tls; bool start_tls;
ARRAY(struct dict_ldap_map) maps; ARRAY(struct dict_ldap_map) maps;
}; };
/* ../../src/lib-storage/mail-storage-settings.c */ /* ../../src/lib-storage/mail-storage-settings.c */
extern const struct setting_parser_info mailbox_setting_parser_info; extern const struct setting_parser_info mailbox_setting_parser_info;
extern const struct setting_parser_info mail_namespace_setting_parser_info; extern const struct setting_parser_info mail_namespace_setting_parser_info;
/* <settings checks> */ /* <settings checks> */
static bool mail_cache_fields_parse(const char *key, const char *value,
const char **error_r)
{
const char *const *arr;
for (arr = t_strsplit_spaces(value, " ,"); *arr != NULL; arr++) {
const char *name = *arr;
if (strncasecmp(name, "hdr.", 4) == 0 &&
!message_header_name_is_valid(name+4)) {
*error_r = t_strdup_printf(
"Invalid %s: %s is not a valid header name",
key, name);
return FALSE;
}
}
return TRUE;
}
static bool mail_storage_settings_check(void *_set, pool_t pool, static bool mail_storage_settings_check(void *_set, pool_t pool,
const char **error_r) const char **error_r)
{ {
struct mail_storage_settings *set = _set; struct mail_storage_settings *set = _set;
struct hash_format *format; struct hash_format *format;
const char *p, *error; const char *p, *error;
bool uidl_format_ok; bool uidl_format_ok;
char c; char c;
if (set->mailbox_idle_check_interval == 0) { if (set->mailbox_idle_check_interval == 0) {
skipping to change at line 556 skipping to change at line 568
*error_r = t_strconcat("Invalid mail_attachment_hash setting: ", *error_r = t_strconcat("Invalid mail_attachment_hash setting: ",
error, NULL); error, NULL);
return FALSE; return FALSE;
} }
if (strchr(set->mail_attachment_hash, '-') != NULL) { if (strchr(set->mail_attachment_hash, '-') != NULL) {
*error_r = "mail_attachment_hash setting " *error_r = "mail_attachment_hash setting "
"must not contain '-' characters"; "must not contain '-' characters";
return FALSE; return FALSE;
} }
hash_format_deinit_free(&format); hash_format_deinit_free(&format);
#ifndef CONFIG_BINARY
if (*set->ssl_client_ca_dir != '\0' &&
access(set->ssl_client_ca_dir, X_OK) < 0) {
*error_r = t_strdup_printf(
"ssl_client_ca_dir: access(%s) failed: %m",
set->ssl_client_ca_dir);
return FALSE;
}
#endif
// FIXME: check set->mail_server_admin syntax (RFC 5464, Section 6.2.2) // FIXME: check set->mail_server_admin syntax (RFC 5464, Section 6.2.2)
#ifndef CONFIG_BINARY #ifndef CONFIG_BINARY
if (*set->hostname == '\0') if (*set->hostname == '\0')
set->hostname = p_strdup(pool, my_hostdomain()); set->hostname = p_strdup(pool, my_hostdomain());
#endif #endif
/* parse mail_attachment_indicator_options */ /* parse mail_attachment_indicator_options */
if (*set->mail_attachment_detection_options != '\0') { if (*set->mail_attachment_detection_options != '\0') {
skipping to change at line 606 skipping to change at line 609
"Unknown option: %s", opt); "Unknown option: %s", opt);
return FALSE; return FALSE;
} }
options++; options++;
} }
array_append_zero(&content_types); array_append_zero(&content_types);
set->parsed_mail_attachment_content_type_filter = array_front(&co ntent_types); set->parsed_mail_attachment_content_type_filter = array_front(&co ntent_types);
} }
if (!mail_cache_fields_parse("mail_cache_fields",
set->mail_cache_fields, error_r))
return FALSE;
if (!mail_cache_fields_parse("mail_always_cache_fields",
set->mail_always_cache_fields, error_r))
return FALSE;
if (!mail_cache_fields_parse("mail_never_cache_fields",
set->mail_never_cache_fields, error_r))
return FALSE;
return TRUE; return TRUE;
} }
static bool namespace_settings_check(void *_set, pool_t pool ATTR_UNUSED, static bool namespace_settings_check(void *_set, pool_t pool ATTR_UNUSED,
const char **error_r) const char **error_r)
{ {
struct mail_namespace_settings *ns = _set; struct mail_namespace_settings *ns = _set;
struct mail_namespace_settings *const *namespaces; struct mail_namespace_settings *const *namespaces;
const char *name; const char *name;
unsigned int i, count; unsigned int i, count;
skipping to change at line 862 skipping to change at line 874
DEF(BOOL, mail_debug), DEF(BOOL, mail_debug),
DEF(BOOL, mail_full_filesystem_access), DEF(BOOL, mail_full_filesystem_access),
DEF(BOOL, maildir_stat_dirs), DEF(BOOL, maildir_stat_dirs),
DEF(BOOL, mail_shared_explicit_inbox), DEF(BOOL, mail_shared_explicit_inbox),
DEF(ENUM, lock_method), DEF(ENUM, lock_method),
DEF(STR, pop3_uidl_format), DEF(STR, pop3_uidl_format),
DEF(STR, hostname), DEF(STR, hostname),
DEF(STR, recipient_delimiter), DEF(STR, recipient_delimiter),
DEF(STR, ssl_client_ca_file),
DEF(STR, ssl_client_ca_dir),
DEF(STR, ssl_client_cert),
DEF(STR, ssl_client_key),
DEF(STR, ssl_cipher_list),
DEF(STR, ssl_cipher_suites),
DEF(STR, ssl_curve_list),
DEF(STR, ssl_min_protocol),
DEF(STR, ssl_crypto_device),
DEF(BOOL, ssl_client_require_valid_cert),
DEF(BOOL, verbose_ssl),
SETTING_DEFINE_LIST_END SETTING_DEFINE_LIST_END
}; };
const struct mail_storage_settings mail_storage_default_settings = { const struct mail_storage_settings mail_storage_default_settings = {
.mail_location = "", .mail_location = "",
.mail_attachment_fs = "sis posix", .mail_attachment_fs = "sis posix",
.mail_attachment_dir = "", .mail_attachment_dir = "",
.mail_attachment_hash = "%{sha1}", .mail_attachment_hash = "%{sha1}",
.mail_attachment_min_size = 1024*128, .mail_attachment_min_size = 1024*128,
.mail_attachment_detection_options = "", .mail_attachment_detection_options = "",
.mail_attribute_dict = "", .mail_attribute_dict = "",
skipping to change at line 928 skipping to change at line 928
.mailbox_list_index_include_inbox = FALSE, .mailbox_list_index_include_inbox = FALSE,
.mail_debug = FALSE, .mail_debug = FALSE,
.mail_full_filesystem_access = FALSE, .mail_full_filesystem_access = FALSE,
.maildir_stat_dirs = FALSE, .maildir_stat_dirs = FALSE,
.mail_shared_explicit_inbox = FALSE, .mail_shared_explicit_inbox = FALSE,
.lock_method = "fcntl:flock:dotlock", .lock_method = "fcntl:flock:dotlock",
.pop3_uidl_format = "%08Xu%08Xv", .pop3_uidl_format = "%08Xu%08Xv",
.hostname = "", .hostname = "",
.recipient_delimiter = "+", .recipient_delimiter = "+",
/* Keep synced with master-service-ssl-settings */
.ssl_client_ca_file = "",
.ssl_client_ca_dir = "",
.ssl_client_cert = "",
.ssl_client_key = "",
.ssl_cipher_list = "ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:
!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH",
.ssl_cipher_suites = "", /* Use TLS library provided value */
.ssl_curve_list = "",
.ssl_min_protocol = "TLSv1.2",
.ssl_crypto_device = "",
.ssl_client_require_valid_cert = TRUE,
.verbose_ssl = FALSE,
}; };
const struct setting_parser_info mail_storage_setting_parser_info = { const struct setting_parser_info mail_storage_setting_parser_info = {
.module_name = "mail", .module_name = "mail",
.defines = mail_storage_setting_defines, .defines = mail_storage_setting_defines,
.defaults = &mail_storage_default_settings, .defaults = &mail_storage_default_settings,
.type_offset = SIZE_MAX, .type_offset = SIZE_MAX,
.struct_size = sizeof(struct mail_storage_settings), .struct_size = sizeof(struct mail_storage_settings),
.parent_offset = SIZE_MAX, .parent_offset = SIZE_MAX,
skipping to change at line 1612 skipping to change at line 1599
extern const struct setting_parser_info *submission_login_setting_roots[]; extern const struct setting_parser_info *submission_login_setting_roots[];
struct submission_login_settings { struct submission_login_settings {
const char *hostname; const char *hostname;
/* submission: */ /* submission: */
uoff_t submission_max_mail_size; uoff_t submission_max_mail_size;
const char *submission_backend_capabilities; const char *submission_backend_capabilities;
}; };
/* ../../src/stats/stats-settings.h */ /* ../../src/stats/stats-settings.h */
extern const struct setting_parser_info stats_setting_parser_info; extern const struct setting_parser_info stats_setting_parser_info;
extern const struct setting_parser_info stats_metric_setting_parser_info;
/* <settings checks> */ /* <settings checks> */
/* /*
* We allow a selection of a timestamp format. * We allow a selection of a timestamp format.
* *
* The 'time-unix' format generates a number with the number of seconds * The 'time-unix' format generates a number with the number of seconds
* since 1970-01-01 00:00 UTC. * since 1970-01-01 00:00 UTC.
* *
* The 'time-rfc3339' format uses the YYYY-MM-DDTHH:MM:SS.uuuuuuZ format as * The 'time-rfc3339' format uses the YYYY-MM-DDTHH:MM:SS.uuuuuuZ format as
* defined by RFC 3339. * defined by RFC 3339.
* *
skipping to change at line 1691 skipping to change at line 1679
intmax_t max; intmax_t max;
}; };
struct stats_metric_settings_group_by { struct stats_metric_settings_group_by {
const char *field; const char *field;
enum stats_metric_group_by_func func; enum stats_metric_group_by_func func;
unsigned int num_ranges; unsigned int num_ranges;
struct stats_metric_settings_bucket_range *ranges; struct stats_metric_settings_bucket_range *ranges;
}; };
/* </settings checks> */ /* </settings checks> */
#define STATS_METRIC_SETTINGS_DEFAULT_EXPORTER_INCLUDE \
"name hostname timestamps categories fields"
struct stats_exporter_settings { struct stats_exporter_settings {
const char *name; const char *name;
const char *transport; const char *transport;
const char *transport_args; const char *transport_args;
unsigned int transport_timeout; unsigned int transport_timeout;
const char *format; const char *format;
const char *format_args; const char *format_args;
/* parsed values */ /* parsed values */
enum event_exporter_time_fmt parsed_time_format; enum event_exporter_time_fmt parsed_time_format;
skipping to change at line 1838 skipping to change at line 1828
const char *login_source_ips; const char *login_source_ips;
const char *login_greeting; const char *login_greeting;
const char *login_log_format_elements, *login_log_format; const char *login_log_format_elements, *login_log_format;
const char *login_access_sockets; const char *login_access_sockets;
const char *login_proxy_notify_path; const char *login_proxy_notify_path;
const char *login_plugin_dir; const char *login_plugin_dir;
const char *login_plugins; const char *login_plugins;
unsigned int login_proxy_timeout; unsigned int login_proxy_timeout;
unsigned int login_proxy_max_reconnects; unsigned int login_proxy_max_reconnects;
unsigned int login_proxy_max_disconnect_delay; unsigned int login_proxy_max_disconnect_delay;
const char *login_proxy_rawlog_dir;
const char *director_username_hash; const char *director_username_hash;
bool auth_ssl_require_client_cert; bool auth_ssl_require_client_cert;
bool auth_ssl_username_from_cert; bool auth_ssl_username_from_cert;
bool disable_plaintext_auth; bool disable_plaintext_auth;
bool auth_verbose; bool auth_verbose;
bool auth_debug; bool auth_debug;
bool auth_debug_passwords; bool auth_debug_passwords;
bool verbose_proctitle; bool verbose_proctitle;
skipping to change at line 2901 skipping to change at line 2892
DEF(STR, exporter_include), DEF(STR, exporter_include),
DEF(STR, description), DEF(STR, description),
SETTING_DEFINE_LIST_END SETTING_DEFINE_LIST_END
}; };
static const struct stats_metric_settings stats_metric_default_settings = { static const struct stats_metric_settings stats_metric_default_settings = {
.metric_name = "", .metric_name = "",
.fields = "", .fields = "",
.filter = "", .filter = "",
.exporter = "", .exporter = "",
.group_by = "", .group_by = "",
.exporter_include = "name hostname timestamps categories fields", .exporter_include = STATS_METRIC_SETTINGS_DEFAULT_EXPORTER_INCLUDE,
.description = "", .description = "",
}; };
const struct setting_parser_info stats_metric_setting_parser_info = { const struct setting_parser_info stats_metric_setting_parser_info = {
.defines = stats_metric_setting_defines, .defines = stats_metric_setting_defines,
.defaults = &stats_metric_default_settings, .defaults = &stats_metric_default_settings,
.type_offset = offsetof(struct stats_metric_settings, metric_name), .type_offset = offsetof(struct stats_metric_settings, metric_name),
.struct_size = sizeof(struct stats_metric_settings), .struct_size = sizeof(struct stats_metric_settings),
.parent_offset = SIZE_MAX, .parent_offset = SIZE_MAX,
skipping to change at line 4097 skipping to change at line 4088
DEF(STR_VARS, login_greeting), DEF(STR_VARS, login_greeting),
DEF(STR, login_log_format_elements), DEF(STR, login_log_format_elements),
DEF(STR, login_log_format), DEF(STR, login_log_format),
DEF(STR, login_access_sockets), DEF(STR, login_access_sockets),
DEF(STR_VARS, login_proxy_notify_path), DEF(STR_VARS, login_proxy_notify_path),
DEF(STR, login_plugin_dir), DEF(STR, login_plugin_dir),
DEF(STR, login_plugins), DEF(STR, login_plugins),
DEF(TIME_MSECS, login_proxy_timeout), DEF(TIME_MSECS, login_proxy_timeout),
DEF(UINT, login_proxy_max_reconnects), DEF(UINT, login_proxy_max_reconnects),
DEF(TIME, login_proxy_max_disconnect_delay), DEF(TIME, login_proxy_max_disconnect_delay),
DEF(STR, login_proxy_rawlog_dir),
DEF(STR, director_username_hash), DEF(STR, director_username_hash),
DEF(BOOL, auth_ssl_require_client_cert), DEF(BOOL, auth_ssl_require_client_cert),
DEF(BOOL, auth_ssl_username_from_cert), DEF(BOOL, auth_ssl_username_from_cert),
DEF(BOOL, disable_plaintext_auth), DEF(BOOL, disable_plaintext_auth),
DEF(BOOL, auth_verbose), DEF(BOOL, auth_verbose),
DEF(BOOL, auth_debug), DEF(BOOL, auth_debug),
DEF(BOOL, verbose_proctitle), DEF(BOOL, verbose_proctitle),
skipping to change at line 4124 skipping to change at line 4116
.login_greeting = PACKAGE_NAME" ready.", .login_greeting = PACKAGE_NAME" ready.",
.login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e % c session=<%{session}>", .login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e % c session=<%{session}>",
.login_log_format = "%$: %s", .login_log_format = "%$: %s",
.login_access_sockets = "", .login_access_sockets = "",
.login_proxy_notify_path = "proxy-notify", .login_proxy_notify_path = "proxy-notify",
.login_plugin_dir = MODULEDIR"/login", .login_plugin_dir = MODULEDIR"/login",
.login_plugins = "", .login_plugins = "",
.login_proxy_timeout = 30*1000, .login_proxy_timeout = 30*1000,
.login_proxy_max_reconnects = 3, .login_proxy_max_reconnects = 3,
.login_proxy_max_disconnect_delay = 0, .login_proxy_max_disconnect_delay = 0,
.login_proxy_rawlog_dir = "",
.director_username_hash = "%u", .director_username_hash = "%u",
.auth_ssl_require_client_cert = FALSE, .auth_ssl_require_client_cert = FALSE,
.auth_ssl_username_from_cert = FALSE, .auth_ssl_username_from_cert = FALSE,
.disable_plaintext_auth = TRUE, .disable_plaintext_auth = TRUE,
.auth_verbose = FALSE, .auth_verbose = FALSE,
.auth_debug = FALSE, .auth_debug = FALSE,
.verbose_proctitle = FALSE, .verbose_proctitle = FALSE,
skipping to change at line 5995 skipping to change at line 5988
&auth_service_settings, &auth_service_settings,
&auth_worker_service_settings, &auth_worker_service_settings,
&anvil_service_settings, &anvil_service_settings,
}; };
buffer_t config_all_services_buf = { buffer_t config_all_services_buf = {
{ { config_all_services, sizeof(config_all_services) } } { { config_all_services, sizeof(config_all_services) } }
}; };
const struct setting_parser_info *all_default_roots[] = { const struct setting_parser_info *all_default_roots[] = {
&master_service_setting_parser_info, &master_service_setting_parser_info,
&master_service_ssl_setting_parser_info, &master_service_ssl_setting_parser_info,
&master_service_ssl_server_setting_parser_info,
&smtp_submit_setting_parser_info, &smtp_submit_setting_parser_info,
&aggregator_setting_parser_info, &aggregator_setting_parser_info,
&auth_setting_parser_info, &auth_setting_parser_info,
&dict_setting_parser_info, &dict_setting_parser_info,
&director_setting_parser_info, &director_setting_parser_info,
&doveadm_setting_parser_info, &doveadm_setting_parser_info,
&fs_crypt_setting_parser_info, &fs_crypt_setting_parser_info,
&imap_login_setting_parser_info, &imap_login_setting_parser_info,
&imap_setting_parser_info, &imap_setting_parser_info,
&imap_urlauth_login_setting_parser_info, &imap_urlauth_login_setting_parser_info,
 End of changes. 18 change blocks. 
53 lines changed or deleted 46 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)