changeset 10177:d589d568a19d HEAD

Changed all settings related structs to const and changed APIs to make it work.
author Timo Sirainen <tss@iki.fi>
date Fri, 23 Oct 2009 20:10:17 -0400
parents 9e0123366fc5
children 272bec780e26
files src/auth/auth-settings.c src/config/config-request.c src/config/settings-get.pl src/dict/dict-settings.c src/dict/dict-settings.h src/imap-login/imap-login-settings.c src/imap/imap-settings.c src/imap/imap-settings.h src/lib-dict/dict-sql-settings.c src/lib-lda/lda-settings.c src/lib-lda/lda-settings.h src/lib-master/master-service-settings.c src/lib-master/master-service-settings.h src/lib-settings/settings-parser.c src/lib-settings/settings-parser.h src/lib-settings/settings.c src/lib-settings/settings.h src/lib-storage/index/dbox-multi/mdbox-settings.c src/lib-storage/index/maildir/maildir-settings.c src/lib-storage/index/mbox/mbox-settings.c src/lib-storage/mail-storage-service.c src/lib-storage/mail-storage-settings.c src/lib-storage/mail-storage-settings.h src/lmtp/lmtp-settings.c src/lmtp/lmtp-settings.h src/login-common/login-settings.c src/login-common/login-settings.h src/master/master-settings.c src/master/master-settings.h src/pop3-login/pop3-login-settings.c src/pop3/pop3-settings.c src/pop3/pop3-settings.h src/ssl-params/ssl-params-settings.c
diffstat 33 files changed, 116 insertions(+), 112 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/auth-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/auth/auth-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -8,8 +8,8 @@
 
 #include <stddef.h>
 
-extern struct setting_parser_info auth_setting_parser_info;
-extern struct setting_parser_info auth_root_setting_parser_info;
+extern const struct setting_parser_info auth_setting_parser_info;
+extern const struct setting_parser_info auth_root_setting_parser_info;
 
 static bool auth_settings_check(void *_set, pool_t pool, const char **error_r);
 
@@ -17,7 +17,7 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct auth_passdb_settings, name), NULL }
 
-static struct setting_define auth_passdb_setting_defines[] = {
+static const struct setting_define auth_passdb_setting_defines[] = {
 	DEF(SET_STR, driver),
 	DEF(SET_STR, args),
 	DEF(SET_BOOL, deny),
@@ -25,7 +25,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-struct setting_parser_info auth_passdb_setting_parser_info = {
+const struct setting_parser_info auth_passdb_setting_parser_info = {
 	MEMBER(module_name) NULL,
 	MEMBER(defines) auth_passdb_setting_defines,
 	MEMBER(defaults) NULL,
@@ -41,14 +41,14 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct auth_userdb_settings, name), NULL }
 
-static struct setting_define auth_userdb_setting_defines[] = {
+static const struct setting_define auth_userdb_setting_defines[] = {
 	DEF(SET_STR, driver),
 	DEF(SET_STR, args),
 
 	SETTING_DEFINE_LIST_END
 };
 
-struct setting_parser_info auth_userdb_setting_parser_info = {
+const struct setting_parser_info auth_userdb_setting_parser_info = {
 	MEMBER(module_name) NULL,
 	MEMBER(defines) auth_userdb_setting_defines,
 	MEMBER(defaults) NULL,
@@ -68,7 +68,7 @@
 #define DEFLIST(field, name, defines) \
 	{ SET_DEFLIST, name, offsetof(struct auth_settings, field), defines }
 
-static struct setting_define auth_setting_defines[] = {
+static const struct setting_define auth_setting_defines[] = {
 	DEF(SET_STR, mechanisms),
 	DEF(SET_STR, realms),
 	DEF(SET_STR, default_realm),
@@ -100,7 +100,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct auth_settings auth_default_settings = {
+static const struct auth_settings auth_default_settings = {
 	MEMBER(mechanisms) "plain",
 	MEMBER(realms) "",
 	MEMBER(default_realm) "",
@@ -130,7 +130,7 @@
 	MEMBER(userdbs) ARRAY_INIT
 };
 
-struct setting_parser_info auth_setting_parser_info = {
+const struct setting_parser_info auth_setting_parser_info = {
 	MEMBER(module_name) "auth",
 	MEMBER(defines) auth_setting_defines,
 	MEMBER(defaults) &auth_default_settings,
--- a/src/config/config-request.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/config/config-request.c	Fri Oct 23 20:10:17 2009 -0400
@@ -26,7 +26,7 @@
 				  const struct setting_parser_info *info)
 {
 	const struct setting_parser_info *p;
-	struct setting_parser_info *const *dep;
+	const struct setting_parser_info *const *dep;
 
 	/* we're trying to find info or its parents from root's dependencies. */
 
--- a/src/config/settings-get.pl	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/config/settings-get.pl	Fri Oct 23 20:10:17 2009 -0400
@@ -31,11 +31,11 @@
 	  /struct setting_define.*{/ ||
 	  /struct .*_default_settings = {/) {
 	$state++;
-      } elsif (/^(static )?struct setting_parser_info (.*) = {/) {
-	$state++;
+      } elsif (/^(static )?const struct setting_parser_info (.*) = {/) {
 	$cur_name = $2;
-      } elsif (/^extern struct setting_parser_info (.*);/) {
-	$externs .= "extern struct setting_parser_info $1;\n";
+	$state++ if ($cur_name !~ /^\*default_/);
+      } elsif (/^extern const struct setting_parser_info (.*);/) {
+	$externs .= "extern const struct setting_parser_info $1;\n";
       } elsif (/\/\* <settings checks> \*\//) {
 	$state = 4;
 	$code .= $_;
@@ -62,7 +62,7 @@
 	  my $value = $1;
 	  if ($value =~ /.*&(.*)\)/) {
 	    $parsers{$1} = 0;
-	    $externs .= "extern struct setting_parser_info $1;\n";
+	    $externs .= "extern const struct setting_parser_info $1;\n";
 	  } else {
 	    $state = 3;
 	  }
--- a/src/dict/dict-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/dict/dict-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -8,7 +8,7 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct dict_settings, name), NULL }
 
-static struct setting_define dict_setting_defines[] = {
+static const struct setting_define dict_setting_defines[] = {
 	DEF(SET_STR, base_dir),
 	DEF(SET_STR, dict_db_config),
 	{ SET_STRLIST, "dict", offsetof(struct dict_settings, dicts), NULL },
@@ -16,13 +16,13 @@
 	SETTING_DEFINE_LIST_END
 };
 
-struct dict_settings dict_default_settings = {
+const struct dict_settings dict_default_settings = {
 	MEMBER(base_dir) PKG_RUNDIR,
 	MEMBER(dict_db_config) "",
 	MEMBER(dicts) ARRAY_INIT
 };
 
-struct setting_parser_info dict_setting_parser_info = {
+const struct setting_parser_info dict_setting_parser_info = {
 	MEMBER(module_name) "dict",
 	MEMBER(defines) dict_setting_defines,
 	MEMBER(defaults) &dict_default_settings,
@@ -33,4 +33,4 @@
 	MEMBER(parent_offset) (size_t)-1
 };
 
-struct dict_settings *dict_settings;
+const struct dict_settings *dict_settings;
--- a/src/dict/dict-settings.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/dict/dict-settings.h	Fri Oct 23 20:10:17 2009 -0400
@@ -7,7 +7,7 @@
 	ARRAY_DEFINE(dicts, const char *);
 };
 
-extern struct setting_parser_info dict_setting_parser_info;
-extern struct dict_settings *dict_settings;
+extern const struct setting_parser_info dict_setting_parser_info;
+extern const struct dict_settings *dict_settings;
 
 #endif
--- a/src/imap-login/imap-login-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/imap-login/imap-login-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -11,22 +11,22 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct imap_login_settings, name), NULL }
 
-static struct setting_define imap_login_setting_defines[] = {
+static const struct setting_define imap_login_setting_defines[] = {
 	DEF(SET_STR, imap_capability),
 
 	SETTING_DEFINE_LIST_END
 };
 
-static struct imap_login_settings imap_login_default_settings = {
+static const struct imap_login_settings imap_login_default_settings = {
 	MEMBER(imap_capability) ""
 };
 
-static struct setting_parser_info *imap_login_setting_dependencies[] = {
+static const struct setting_parser_info *imap_login_setting_dependencies[] = {
 	&login_setting_parser_info,
 	NULL
 };
 
-static struct setting_parser_info imap_login_setting_parser_info = {
+static const struct setting_parser_info imap_login_setting_parser_info = {
 	MEMBER(module_name) "imap-login",
 	MEMBER(defines) imap_login_setting_defines,
 	MEMBER(defaults) &imap_login_default_settings,
--- a/src/imap/imap-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/imap/imap-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -19,7 +19,7 @@
 #define DEFLIST(field, name, defines) \
 	{ SET_DEFLIST, name, offsetof(struct imap_settings, field), defines }
 
-static struct setting_define imap_setting_defines[] = {
+static const struct setting_define imap_setting_defines[] = {
 	DEF(SET_BOOL, mail_debug),
 
 	DEF(SET_UINT, imap_max_line_length),
@@ -33,7 +33,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct imap_settings imap_default_settings = {
+static const struct imap_settings imap_default_settings = {
 	MEMBER(mail_debug) FALSE,
 
 	/* RFC-2683 recommends at least 8000 bytes. Some clients however don't
@@ -48,12 +48,12 @@
 	MEMBER(imap_id_log) ""
 };
 
-static struct setting_parser_info *imap_setting_dependencies[] = {
+static const struct setting_parser_info *imap_setting_dependencies[] = {
 	&mail_user_setting_parser_info,
 	NULL
 };
 
-struct setting_parser_info imap_setting_parser_info = {
+const struct setting_parser_info imap_setting_parser_info = {
 	MEMBER(module_name) "imap",
 	MEMBER(defines) imap_setting_defines,
 	MEMBER(defaults) &imap_default_settings,
@@ -74,7 +74,7 @@
 	enum imap_client_workarounds num;
 };
 
-static struct imap_client_workaround_list imap_client_workaround_list[] = {
+static const struct imap_client_workaround_list imap_client_workaround_list[] = {
 	{ "delay-newmail", WORKAROUND_DELAY_NEWMAIL },
 	{ "outlook-idle", 0 }, /* only for backwards compatibility */
 	{ "netscape-eoh", WORKAROUND_NETSCAPE_EOH },
@@ -87,7 +87,7 @@
 				const char **error_r)
 {
         enum imap_client_workarounds client_workarounds = 0;
-        struct imap_client_workaround_list *list;
+        const struct imap_client_workaround_list *list;
 	const char *const *str;
 
         str = t_strsplit_spaces(set->imap_client_workarounds, " ,");
--- a/src/imap/imap-settings.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/imap/imap-settings.h	Fri Oct 23 20:10:17 2009 -0400
@@ -26,6 +26,6 @@
 	enum imap_client_workarounds parsed_workarounds;
 };
 
-extern struct setting_parser_info imap_setting_parser_info;
+extern const struct setting_parser_info imap_setting_parser_info;
 
 #endif
--- a/src/lib-dict/dict-sql-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-dict/dict-sql-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -29,7 +29,7 @@
 
 #define DEF_STR(name) DEF_STRUCT_STR(name, dict_sql_map)
 
-static struct setting_def dict_sql_map_setting_defs[] = {
+static const struct setting_def dict_sql_map_setting_defs[] = {
 	DEF_STR(pattern),
 	DEF_STR(table),
 	DEF_STR(username_field),
--- a/src/lib-lda/lda-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-lda/lda-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -16,7 +16,7 @@
 #define DEFLIST(field, name, defines) \
 	{ SET_DEFLIST, name, offsetof(struct lda_settings, field), defines }
 
-static struct setting_define lda_setting_defines[] = {
+static const struct setting_define lda_setting_defines[] = {
 	DEF(SET_STR, postmaster_address),
 	DEF(SET_STR, hostname),
 	DEF(SET_STR, sendmail_path),
@@ -30,7 +30,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct lda_settings lda_default_settings = {
+static const struct lda_settings lda_default_settings = {
 	MEMBER(postmaster_address) "",
 	MEMBER(hostname) "",
 	MEMBER(sendmail_path) "/usr/lib/sendmail",
@@ -43,12 +43,12 @@
 	MEMBER(lda_mailbox_autosubscribe) FALSE
 };
 
-static struct setting_parser_info *lda_setting_dependencies[] = {
+static const struct setting_parser_info *lda_setting_dependencies[] = {
 	&mail_user_setting_parser_info,
 	NULL
 };
 
-struct setting_parser_info lda_setting_parser_info = {
+const struct setting_parser_info lda_setting_parser_info = {
 	MEMBER(module_name) "lda",
 	MEMBER(defines) lda_setting_defines,
 	MEMBER(defaults) &lda_default_settings,
--- a/src/lib-lda/lda-settings.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-lda/lda-settings.h	Fri Oct 23 20:10:17 2009 -0400
@@ -15,6 +15,6 @@
 	bool lda_mailbox_autosubscribe;
 };
 
-extern struct setting_parser_info lda_setting_parser_info;
+extern const struct setting_parser_info lda_setting_parser_info;
 
 #endif
--- a/src/lib-master/master-service-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-master/master-service-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -24,7 +24,7 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct master_service_settings, name), NULL }
 
-static struct setting_define master_service_setting_defines[] = {
+static const struct setting_define master_service_setting_defines[] = {
 	DEF(SET_STR, log_path),
 	DEF(SET_STR, info_log_path),
 	DEF(SET_STR, debug_log_path),
@@ -36,7 +36,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct master_service_settings master_service_default_settings = {
+static const struct master_service_settings master_service_default_settings = {
 	MEMBER(log_path) "",
 	MEMBER(info_log_path) "",
 	MEMBER(debug_log_path) "",
@@ -46,7 +46,7 @@
 	MEMBER(shutdown_clients) TRUE
 };
 
-struct setting_parser_info master_service_setting_parser_info = {
+const struct setting_parser_info master_service_setting_parser_info = {
 	MEMBER(module_name) "master",
 	MEMBER(defines) master_service_setting_defines,
 	MEMBER(defaults) &master_service_default_settings,
@@ -213,6 +213,7 @@
 
 	if (input->dyn_parsers != NULL) {
 		settings_parser_info_update(service->set_pool,
+					    input->dyn_parsers_parent,
 					    input->dyn_parsers);
 	}
 
--- a/src/lib-master/master-service-settings.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-master/master-service-settings.h	Fri Oct 23 20:10:17 2009 -0400
@@ -20,6 +20,7 @@
 struct master_service_settings_input {
 	const struct setting_parser_info **roots;
 	const struct dynamic_settings_parser *dyn_parsers;
+	struct setting_parser_info *dyn_parsers_parent;
 	const char *config_path;
 	bool preserve_home;
 
@@ -29,7 +30,7 @@
 	struct ip_addr local_ip, remote_ip;
 };
 
-extern struct setting_parser_info master_service_setting_parser_info;
+extern const struct setting_parser_info master_service_setting_parser_info;
 
 int master_service_settings_read(struct master_service *service,
 				 const struct master_service_settings_input *input,
--- a/src/lib-settings/settings-parser.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-settings/settings-parser.c	Fri Oct 23 20:10:17 2009 -0400
@@ -1072,10 +1072,10 @@
 }
 
 static void
-info_update_real(pool_t pool, const struct dynamic_settings_parser *parsers)
+info_update_real(pool_t pool, struct setting_parser_info *parent,
+		 const struct dynamic_settings_parser *parsers)
 {
 	/* @UNSAFE */
-	struct setting_parser_info *parent;
 	ARRAY_DEFINE(defines, struct setting_define);
 	ARRAY_TYPE(dynamic_settings_parser) dynamic_parsers;
 	struct dynamic_settings_parser new_parser;
@@ -1085,8 +1085,6 @@
 	unsigned int i, j;
 	size_t offset, new_struct_size;
 
-	parent = parsers[0].info->parent;
-
 	t_array_init(&defines, 128);
 	/* add existing defines */
 	for (j = 0; parent->defines[j].key != NULL; j++)
@@ -1147,10 +1145,11 @@
 }
 
 void settings_parser_info_update(pool_t pool,
+				 struct setting_parser_info *parent,
 				 const struct dynamic_settings_parser *parsers)
 {
 	if (parsers[0].name != NULL) T_BEGIN {
-		info_update_real(pool, parsers);
+		info_update_real(pool, parent, parsers);
 	} T_END;
 }
 
--- a/src/lib-settings/settings-parser.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-settings/settings-parser.h	Fri Oct 23 20:10:17 2009 -0400
@@ -61,10 +61,10 @@
 	size_t struct_size;
 
 	size_t parent_offset;
-	struct setting_parser_info *parent;
+	const struct setting_parser_info *parent;
 
 	bool (*check_func)(void *set, pool_t pool, const char **error_r);
-	struct setting_parser_info *const *dependencies;
+	const struct setting_parser_info *const *dependencies;
 	struct dynamic_settings_parser *dynamic_parsers;
 
 };
@@ -168,6 +168,7 @@
    dynamic_settings_list structures to their parent. All must have the same
    parent. The new structures are allocated from the given pool. */
 void settings_parser_info_update(pool_t pool,
+				 struct setting_parser_info *parent,
 				 const struct dynamic_settings_parser *parsers);
 
 /* Return pointer to beginning of settings for given name, or NULL if there is
--- a/src/lib-settings/settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-settings/settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -51,10 +51,10 @@
 }
 
 const char *
-parse_setting_from_defs(pool_t pool, struct setting_def *defs, void *base,
+parse_setting_from_defs(pool_t pool, const struct setting_def *defs, void *base,
 			const char *key, const char *value)
 {
-	struct setting_def *def;
+	const struct setting_def *def;
 
 	for (def = defs; def->name != NULL; def++) {
 		if (strcmp(def->name, key) == 0) {
--- a/src/lib-settings/settings.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-settings/settings.h	Fri Oct 23 20:10:17 2009 -0400
@@ -37,7 +37,7 @@
 extern settings_section_callback_t *null_settings_section_callback;
 
 const char *
-parse_setting_from_defs(pool_t pool, struct setting_def *defs, void *base,
+parse_setting_from_defs(pool_t pool, const struct setting_def *defs, void *base,
 			const char *key, const char *value);
 
 bool settings_read(const char *path, const char *section,
--- a/src/lib-storage/index/dbox-multi/mdbox-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-storage/index/dbox-multi/mdbox-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -14,7 +14,7 @@
 static bool mdbox_settings_verify(void *_set, pool_t pool ATTR_UNUSED,
 				  const char **error_r);
 
-static struct setting_define mdbox_setting_defines[] = {
+static const struct setting_define mdbox_setting_defines[] = {
 	DEF(SET_UINT, mdbox_rotate_size),
 	DEF(SET_UINT, mdbox_rotate_min_size),
 	DEF(SET_UINT, mdbox_rotate_days),
@@ -24,7 +24,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct mdbox_settings mdbox_default_settings = {
+static const struct mdbox_settings mdbox_default_settings = {
 	MEMBER(mdbox_rotate_size) 2048*1024,
 	MEMBER(mdbox_rotate_min_size) 16*1024,
 	MEMBER(mdbox_rotate_days) 0,
@@ -32,7 +32,7 @@
 	MEMBER(mdbox_purge_min_percentage) 0
 };
 
-static struct setting_parser_info mdbox_setting_parser_info = {
+static const struct setting_parser_info mdbox_setting_parser_info = {
 	MEMBER(module_name) "mdbox",
 	MEMBER(defines) mdbox_setting_defines,
 	MEMBER(defaults) &mdbox_default_settings,
--- a/src/lib-storage/index/maildir/maildir-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-storage/index/maildir/maildir-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -11,7 +11,7 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct maildir_settings, name), NULL }
 
-static struct setting_define maildir_setting_defines[] = {
+static const struct setting_define maildir_setting_defines[] = {
 	DEF(SET_BOOL, maildir_stat_dirs),
 	DEF(SET_BOOL, maildir_copy_with_hardlinks),
 	DEF(SET_BOOL, maildir_copy_preserve_filename),
@@ -20,14 +20,14 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct maildir_settings maildir_default_settings = {
+static const struct maildir_settings maildir_default_settings = {
 	MEMBER(maildir_stat_dirs) FALSE,
 	MEMBER(maildir_copy_with_hardlinks) TRUE,
 	MEMBER(maildir_copy_preserve_filename) FALSE,
 	MEMBER(maildir_very_dirty_syncs) FALSE
 };
 
-static struct setting_parser_info maildir_setting_parser_info = {
+static const struct setting_parser_info maildir_setting_parser_info = {
 	MEMBER(module_name) "maildir",
 	MEMBER(defines) maildir_setting_defines,
 	MEMBER(defaults) &maildir_default_settings,
--- a/src/lib-storage/index/mbox/mbox-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-storage/index/mbox/mbox-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -11,7 +11,7 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct mbox_settings, name), NULL }
 
-static struct setting_define mbox_setting_defines[] = {
+static const struct setting_define mbox_setting_defines[] = {
 	DEF(SET_STR, mbox_read_locks),
 	DEF(SET_STR, mbox_write_locks),
 	DEF(SET_UINT, mbox_lock_timeout),
@@ -24,7 +24,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct mbox_settings mbox_default_settings = {
+static const struct mbox_settings mbox_default_settings = {
 	MEMBER(mbox_read_locks) "fcntl",
 	MEMBER(mbox_write_locks) "dotlock fcntl",
 	MEMBER(mbox_lock_timeout) 5*60,
@@ -35,7 +35,7 @@
 	MEMBER(mbox_lazy_writes) TRUE
 };
 
-static struct setting_parser_info mbox_setting_parser_info = {
+static const struct setting_parser_info mbox_setting_parser_info = {
 	MEMBER(module_name) "mbox",
 	MEMBER(defines) mbox_setting_defines,
 	MEMBER(defaults) &mbox_default_settings,
--- a/src/lib-storage/mail-storage-service.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-storage/mail-storage-service.c	Fri Oct 23 20:10:17 2009 -0400
@@ -525,7 +525,7 @@
 	}
 }
 
-static void
+static struct setting_parser_info *
 dyn_parsers_update_parent(pool_t pool,
 			  struct master_service_settings_input *input)
 {
@@ -565,6 +565,7 @@
 		new_dyn_parsers[i].info = new_info;
 	}
 	input->dyn_parsers = new_dyn_parsers;
+	return new_parent;
 }
 
 int mail_storage_service_read_settings(struct mail_storage_service_ctx *ctx,
@@ -584,7 +585,8 @@
 	   use $HOME */
 	set_input.preserve_home = 
 		(ctx->flags & MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP) == 0;
-	dyn_parsers_update_parent(pool, &set_input);
+	set_input.dyn_parsers_parent =
+		dyn_parsers_update_parent(pool, &set_input);
 
 	if (input != NULL) {
 		set_input.module = input->module;
--- a/src/lib-storage/mail-storage-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-storage/mail-storage-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -20,7 +20,7 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct mail_storage_settings, name), NULL }
 
-static struct setting_define mail_storage_setting_defines[] = {
+static const struct setting_define mail_storage_setting_defines[] = {
 	DEF(SET_STR_VARS, mail_location),
 	DEF(SET_STR, mail_cache_fields),
 	DEF(SET_STR, mail_never_cache_fields),
@@ -42,7 +42,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-struct mail_storage_settings mail_storage_default_settings = {
+const struct mail_storage_settings mail_storage_default_settings = {
 	MEMBER(mail_location) "",
 	MEMBER(mail_cache_fields) "flags",
 	MEMBER(mail_never_cache_fields) "imap.envelope",
@@ -62,7 +62,7 @@
 	MEMBER(pop3_uidl_format) "%08Xu%08Xv"
 };
 
-struct setting_parser_info mail_storage_setting_parser_info = {
+const struct setting_parser_info mail_storage_setting_parser_info = {
 	MEMBER(module_name) "mail",
 	MEMBER(defines) mail_storage_setting_defines,
 	MEMBER(defaults) &mail_storage_default_settings,
@@ -80,7 +80,7 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct mail_namespace_settings, name), NULL }
 
-static struct setting_define mail_namespace_setting_defines[] = {
+static const struct setting_define mail_namespace_setting_defines[] = {
 	DEF(SET_ENUM, type),
 	DEF(SET_STR, separator),
 	DEF(SET_STR_VARS, prefix),
@@ -95,7 +95,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-struct mail_namespace_settings mail_namespace_default_settings = {
+const struct mail_namespace_settings mail_namespace_default_settings = {
 	MEMBER(type) "private:shared:public",
 	MEMBER(separator) "",
 	MEMBER(prefix) "",
@@ -108,7 +108,7 @@
 	MEMBER(subscriptions) TRUE
 };
 
-struct setting_parser_info mail_namespace_setting_parser_info = {
+const struct setting_parser_info mail_namespace_setting_parser_info = {
 	MEMBER(module_name) NULL,
 	MEMBER(defines) mail_namespace_setting_defines,
 	MEMBER(defaults) &mail_namespace_default_settings,
@@ -130,7 +130,7 @@
 	{ SET_DEFLIST_UNIQUE, name, \
 	  offsetof(struct mail_user_settings, field), defines }
 
-static struct setting_define mail_user_setting_defines[] = {
+static const struct setting_define mail_user_setting_defines[] = {
 	DEF(SET_STR, base_dir),
 	DEF(SET_STR, auth_socket_path),
 
@@ -158,7 +158,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct mail_user_settings mail_user_default_settings = {
+static const struct mail_user_settings mail_user_default_settings = {
 	MEMBER(base_dir) PKG_RUNDIR,
 	MEMBER(auth_socket_path) "auth-userdb",
 
@@ -184,7 +184,7 @@
 	MEMBER(plugin_envs) ARRAY_INIT
 };
 
-struct setting_parser_info mail_user_setting_parser_info = {
+const struct setting_parser_info mail_user_setting_parser_info = {
 	MEMBER(module_name) "mail",
 	MEMBER(defines) mail_user_setting_defines,
 	MEMBER(defaults) &mail_user_default_settings,
--- a/src/lib-storage/mail-storage-settings.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lib-storage/mail-storage-settings.h	Fri Oct 23 20:10:17 2009 -0400
@@ -69,10 +69,10 @@
 	ARRAY_DEFINE(plugin_envs, const char *);
 };
 
-extern struct setting_parser_info mail_user_setting_parser_info;
-extern struct setting_parser_info mail_namespace_setting_parser_info;
-extern struct setting_parser_info mail_storage_setting_parser_info;
-extern struct mail_namespace_settings mail_namespace_default_settings;
+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_storage_setting_parser_info;
+extern const struct mail_namespace_settings mail_namespace_default_settings;
 
 const void *
 mail_user_set_get_driver_settings(const struct setting_parser_info *info,
--- a/src/lmtp/lmtp-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lmtp/lmtp-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -13,22 +13,22 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct lmtp_settings, name), NULL }
 
-static struct setting_define lmtp_setting_defines[] = {
+static const struct setting_define lmtp_setting_defines[] = {
 	DEF(SET_BOOL, lmtp_proxy),
 
 	SETTING_DEFINE_LIST_END
 };
 
-static struct lmtp_settings lmtp_default_settings = {
+static const struct lmtp_settings lmtp_default_settings = {
 	MEMBER(lmtp_proxy) FALSE
 };
 
-static struct setting_parser_info *lmtp_setting_dependencies[] = {
+static const struct setting_parser_info *lmtp_setting_dependencies[] = {
 	&lda_setting_parser_info,
 	NULL
 };
 
-struct setting_parser_info lmtp_setting_parser_info = {
+const struct setting_parser_info lmtp_setting_parser_info = {
 	MEMBER(module_name) "lmtp",
 	MEMBER(defines) lmtp_setting_defines,
 	MEMBER(defaults) &lmtp_default_settings,
--- a/src/lmtp/lmtp-settings.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/lmtp/lmtp-settings.h	Fri Oct 23 20:10:17 2009 -0400
@@ -5,6 +5,6 @@
 	bool lmtp_proxy;
 };
 
-extern struct setting_parser_info lmtp_setting_parser_info;
+extern const struct setting_parser_info lmtp_setting_parser_info;
 
 #endif
--- a/src/login-common/login-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/login-common/login-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -16,7 +16,7 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct login_settings, name), NULL }
 
-static struct setting_define login_setting_defines[] = {
+static const struct setting_define login_setting_defines[] = {
 	DEF(SET_STR, login_trusted_networks),
 	DEF(SET_STR_VARS, login_greeting),
 	DEF(SET_STR, login_log_format_elements),
@@ -45,7 +45,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct login_settings login_default_settings = {
+static const struct login_settings login_default_settings = {
 	MEMBER(login_trusted_networks) "",
 	MEMBER(login_greeting) PACKAGE_NAME" ready.",
 	MEMBER(login_log_format_elements) "user=<%u> method=%m rip=%r lip=%l %c",
@@ -72,7 +72,7 @@
 	MEMBER(mail_max_userip_connections) 10
 };
 
-struct setting_parser_info login_setting_parser_info = {
+const struct setting_parser_info login_setting_parser_info = {
 	MEMBER(module_name) "login",
 	MEMBER(defines) login_setting_defines,
 	MEMBER(defaults) &login_default_settings,
--- a/src/login-common/login-settings.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/login-common/login-settings.h	Fri Oct 23 20:10:17 2009 -0400
@@ -33,7 +33,7 @@
 };
 
 extern const struct setting_parser_info **login_set_roots;
-extern struct setting_parser_info login_setting_parser_info;
+extern const struct setting_parser_info login_setting_parser_info;
 
 struct login_settings *
 login_settings_read(struct master_service *service, pool_t pool,
--- a/src/master/master-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/master/master-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -20,13 +20,13 @@
 static bool master_settings_verify(void *_set, pool_t pool,
 				   const char **error_r);
 
-extern struct setting_parser_info service_setting_parser_info;
+extern const struct setting_parser_info service_setting_parser_info;
 
 #undef DEF
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct file_listener_settings, name), NULL }
 
-static struct setting_define file_listener_setting_defines[] = {
+static const struct setting_define file_listener_setting_defines[] = {
 	DEF(SET_STR, path),
 	DEF(SET_UINT, mode),
 	DEF(SET_STR, user),
@@ -35,14 +35,14 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct file_listener_settings file_listener_default_settings = {
+static const struct file_listener_settings file_listener_default_settings = {
 	MEMBER(path) "",
 	MEMBER(mode) 0600,
 	MEMBER(user) "",
 	MEMBER(group) "",
 };
 
-static struct setting_parser_info file_listener_setting_parser_info = {
+static const struct setting_parser_info file_listener_setting_parser_info = {
 	MEMBER(module_name) NULL,
 	MEMBER(defines) file_listener_setting_defines,
 	MEMBER(defaults) &file_listener_default_settings,
@@ -58,7 +58,7 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct inet_listener_settings, name), NULL }
 
-static struct setting_define inet_listener_setting_defines[] = {
+static const struct setting_define inet_listener_setting_defines[] = {
 	DEF(SET_STR, address),
 	DEF(SET_UINT, port),
 	DEF(SET_BOOL, ssl),
@@ -66,13 +66,13 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct inet_listener_settings inet_listener_default_settings = {
+static const struct inet_listener_settings inet_listener_default_settings = {
 	MEMBER(address) "",
 	MEMBER(port) 0,
 	MEMBER(ssl) FALSE
 };
 
-static struct setting_parser_info inet_listener_setting_parser_info = {
+static const struct setting_parser_info inet_listener_setting_parser_info = {
 	MEMBER(module_name) NULL,
 	MEMBER(defines) inet_listener_setting_defines,
 	MEMBER(defaults) &inet_listener_default_settings,
@@ -94,7 +94,7 @@
 #define DEFLIST_UNIQUE(field, name, defines) \
 	{ SET_DEFLIST_UNIQUE, name, offsetof(struct service_settings, field), defines }
 
-static struct setting_define service_setting_defines[] = {
+static const struct setting_define service_setting_defines[] = {
 	DEF(SET_STR, name),
 	DEF(SET_STR, protocol),
 	DEF(SET_STR, type),
@@ -123,7 +123,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct service_settings service_default_settings = {
+static const struct service_settings service_default_settings = {
 	MEMBER(master_set) NULL,
 
 	MEMBER(name) "",
@@ -149,7 +149,7 @@
 	MEMBER(inet_listeners) ARRAY_INIT
 };
 
-struct setting_parser_info service_setting_parser_info = {
+const struct setting_parser_info service_setting_parser_info = {
 	MEMBER(module_name) NULL,
 	MEMBER(defines) service_setting_defines,
 	MEMBER(defaults) &service_default_settings,
@@ -168,7 +168,7 @@
 #define DEFLIST_UNIQUE(field, name, defines) \
 	{ SET_DEFLIST_UNIQUE, name, offsetof(struct master_settings, field), defines }
 
-static struct setting_define master_setting_defines[] = {
+static const struct setting_define master_setting_defines[] = {
 	DEF(SET_STR, base_dir),
 	DEF(SET_STR, libexec_dir),
 	DEF(SET_STR, protocols),
@@ -193,7 +193,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct master_settings master_default_settings = {
+static const struct master_settings master_default_settings = {
 	MEMBER(base_dir) PKG_RUNDIR,
 	MEMBER(libexec_dir) PKG_LIBEXECDIR,
 	MEMBER(protocols) "imap pop3 lmtp",
@@ -216,7 +216,7 @@
 	MEMBER(services) ARRAY_INIT
 };
 
-struct setting_parser_info master_setting_parser_info = {
+const struct setting_parser_info master_setting_parser_info = {
 	MEMBER(module_name) "master",
 	MEMBER(defines) master_setting_defines,
 	MEMBER(defaults) &master_default_settings,
--- a/src/master/master-settings.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/master/master-settings.h	Fri Oct 23 20:10:17 2009 -0400
@@ -76,7 +76,7 @@
 	char **protocols_split;
 };
 
-extern struct setting_parser_info master_setting_parser_info;
+extern const struct setting_parser_info master_setting_parser_info;
 
 bool master_settings_do_fixes(const struct master_settings *set);
 
--- a/src/pop3-login/pop3-login-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/pop3-login/pop3-login-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -7,16 +7,16 @@
 
 #include <stddef.h>
 
-static struct setting_define pop3_login_setting_defines[] = {
+static const struct setting_define pop3_login_setting_defines[] = {
 	SETTING_DEFINE_LIST_END
 };
 
-static struct setting_parser_info *pop3_login_setting_dependencies[] = {
+static const struct setting_parser_info *pop3_login_setting_dependencies[] = {
 	&login_setting_parser_info,
 	NULL
 };
 
-struct setting_parser_info pop3_login_setting_parser_info = {
+const struct setting_parser_info pop3_login_setting_parser_info = {
 	MEMBER(module_name) "pop3-login",
 	MEMBER(defines) pop3_login_setting_defines,
 	MEMBER(defaults) NULL,
--- a/src/pop3/pop3-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/pop3/pop3-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -19,7 +19,7 @@
 #define DEFLIST(field, name, defines) \
 	{ SET_DEFLIST, name, offsetof(struct pop3_settings, field), defines }
 
-static struct setting_define pop3_setting_defines[] = {
+static const struct setting_define pop3_setting_defines[] = {
 	DEF(SET_BOOL, mail_debug),
 
 	DEF(SET_BOOL, pop3_no_flag_updates),
@@ -33,7 +33,7 @@
 	SETTING_DEFINE_LIST_END
 };
 
-static struct pop3_settings pop3_default_settings = {
+static const struct pop3_settings pop3_default_settings = {
 	MEMBER(mail_debug) FALSE,
 
 	MEMBER(pop3_no_flag_updates) FALSE,
@@ -45,12 +45,12 @@
 	MEMBER(pop3_logout_format) "top=%t/%p, retr=%r/%b, del=%d/%m, size=%s"
 };
 
-static struct setting_parser_info *pop3_setting_dependencies[] = {
+static const struct setting_parser_info *pop3_setting_dependencies[] = {
 	&mail_user_setting_parser_info,
 	NULL
 };
 
-struct setting_parser_info pop3_setting_parser_info = {
+const struct setting_parser_info pop3_setting_parser_info = {
 	MEMBER(module_name) "pop3",
 	MEMBER(defines) pop3_setting_defines,
 	MEMBER(defaults) &pop3_default_settings,
@@ -71,7 +71,7 @@
 	enum pop3_client_workarounds num;
 };
 
-static struct pop3_client_workaround_list pop3_client_workaround_list[] = {
+static const struct pop3_client_workaround_list pop3_client_workaround_list[] = {
 	{ "outlook-no-nuls", WORKAROUND_OUTLOOK_NO_NULS },
 	{ "oe-ns-eoh", WORKAROUND_OE_NS_EOH },
 	{ NULL, 0 }
@@ -82,7 +82,7 @@
 				const char **error_r)
 {
         enum pop3_client_workarounds client_workarounds = 0;
-	struct pop3_client_workaround_list *list;
+	const struct pop3_client_workaround_list *list;
 	const char *const *str;
 
         str = t_strsplit_spaces(set->pop3_client_workarounds, " ,");
--- a/src/pop3/pop3-settings.h	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/pop3/pop3-settings.h	Fri Oct 23 20:10:17 2009 -0400
@@ -25,6 +25,6 @@
 	enum pop3_client_workarounds parsed_workarounds;
 };
 
-extern struct setting_parser_info pop3_setting_parser_info;
+extern const struct setting_parser_info pop3_setting_parser_info;
 
 #endif
--- a/src/ssl-params/ssl-params-settings.c	Fri Oct 23 19:11:19 2009 -0400
+++ b/src/ssl-params/ssl-params-settings.c	Fri Oct 23 20:10:17 2009 -0400
@@ -13,17 +13,17 @@
 #define DEF(type, name) \
 	{ type, #name, offsetof(struct ssl_params_settings, name), NULL }
 
-static struct setting_define ssl_params_setting_defines[] = {
+static const struct setting_define ssl_params_setting_defines[] = {
 	DEF(SET_UINT, ssl_parameters_regenerate),
 
 	SETTING_DEFINE_LIST_END
 };
 
-static struct ssl_params_settings ssl_params_default_settings = {
+static const struct ssl_params_settings ssl_params_default_settings = {
 	MEMBER(ssl_parameters_regenerate) 24*7
 };
 
-struct setting_parser_info ssl_params_setting_parser_info = {
+const struct setting_parser_info ssl_params_setting_parser_info = {
 	MEMBER(module_name) "ssl-params",
 	MEMBER(defines) ssl_params_setting_defines,
 	MEMBER(defaults) &ssl_params_default_settings,