dovecot-2.0-sslstream: config: Allow settings plugins to specify...

dovecot at dovecot.org dovecot at dovecot.org
Sat Feb 13 02:56:26 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0-sslstream/rev/e18645b47984
changeset: 10337:e18645b47984
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Nov 16 18:38:06 2009 -0500
description:
config: Allow settings plugins to specify also new default services.

diffstat:

6 files changed, 28 insertions(+), 5 deletions(-)
configure.in                      |    4 +++-
src/config/all-settings.h         |    1 +
src/config/config-parser.c        |   22 +++++++++++++++++++---
src/config/settings-get.pl        |    3 +++
src/lib-master/service-settings.h |    1 +
src/master/master-settings.h      |    2 +-

diffs (117 lines):

diff -r 12434655f2e5 -r e18645b47984 configure.in
--- a/configure.in	Mon Nov 16 18:37:12 2009 -0500
+++ b/configure.in	Mon Nov 16 18:38:06 2009 -0500
@@ -2513,7 +2513,9 @@ dnl **
 dnl **
 
 dnl get a list of setting .[ch] files, but list .h files first
-SETTING_FILES=`find $srcdir/src -name '*settings.[[ch]]' ! -name all-settings.[[ch]] | sed -e s,$srcdir/src,./src,g -e 's,./src,$(top_srcdir)/src,g' -e 's/^\(.*\)\(.\)$/\2 \1\2/' | sort -r | sed s/^..//|tr '\n' ' '`
+FILES1=`find $srcdir/src -name '*settings.[[ch]]'|grep "$srcdir/src/lib-" | sed 's/^\(.*\)\(.\)$/\2 \1\2/' | sort -r | sed s/^..//`
+FILES2=`find $srcdir/src -name '*settings.[[ch]]'|grep -v "$srcdir/src/lib-" | sed 's/^\(.*\)\(.\)$/\2 \1\2/' | grep -v all-settings | sort -r | sed s/^..//`
+SETTING_FILES=`echo $FILES1 $FILES2 | sed -e s,$srcdir/src,./src,g -e 's,./src,$(top_srcdir)/src,g' | tr '\n' ' '`
 AC_SUBST(SETTING_FILES)
 
 dnl **
diff -r 12434655f2e5 -r e18645b47984 src/config/all-settings.h
--- a/src/config/all-settings.h	Mon Nov 16 18:37:12 2009 -0500
+++ b/src/config/all-settings.h	Mon Nov 16 18:38:06 2009 -0500
@@ -3,5 +3,6 @@
 
 extern const struct setting_parser_info *const *all_roots;
 extern const struct setting_parser_info *all_default_roots[];
+extern ARRAY_TYPE(service_settings) *default_services;
 
 #endif
diff -r 12434655f2e5 -r e18645b47984 src/config/config-parser.c
--- a/src/config/config-parser.c	Mon Nov 16 18:37:12 2009 -0500
+++ b/src/config/config-parser.c	Mon Nov 16 18:38:06 2009 -0500
@@ -8,6 +8,7 @@
 #include "istream.h"
 #include "module-dir.h"
 #include "settings-parser.h"
+#include "service-settings.h"
 #include "all-settings.h"
 #include "config-filter.h"
 #include "config-parser.h"
@@ -756,19 +757,27 @@ void config_parse_load_modules(void)
 	struct module *modules, *m;
 	const struct setting_parser_info **roots;
 	ARRAY_DEFINE(new_roots, const struct setting_parser_info *);
-	unsigned int i;
+	ARRAY_TYPE(service_settings) new_services;
+	struct service_settings *const *services, *service_set;
+	unsigned int i, count;
 
 	modules = module_dir_load(CONFIG_MODULE_DIR, NULL, FALSE, NULL);
 	module_dir_init(modules);
 
 	i_array_init(&new_roots, 64);
+	i_array_init(&new_services, 64);
 	for (m = modules; m != NULL; m = m->next) {
-		roots = module_get_symbol(m,
+		roots = module_get_symbol_quiet(m,
 			t_strdup_printf("%s_set_roots", m->name));
 		if (roots != NULL) {
 			for (i = 0; roots[i] != NULL; i++)
 				array_append(&new_roots, &roots[i], 1);
 		}
+
+		service_set = module_get_symbol_quiet(m,
+			t_strdup_printf("%s_service_settings", m->name));
+		if (service_set != NULL)
+			array_append(&new_services, &service_set, 1);
 	}
 	if (array_count(&new_roots) > 0) {
 		/* modules added new settings. add the defaults and start
@@ -778,4 +787,11 @@ void config_parse_load_modules(void)
 		(void)array_append_space(&new_roots);
 		all_roots = array_idx(&new_roots, 0);
 	}
-}
+	if (array_count(&new_services) > 0) {
+		/* module added new services. update the defaults. */
+		services = array_get(default_services, &count);
+		for (i = 0; i < count; i++)
+			array_append(&new_services, &services[i], 1);
+		*default_services = new_services;
+	}
+}
diff -r 12434655f2e5 -r e18645b47984 src/config/settings-get.pl
--- a/src/config/settings-get.pl	Mon Nov 16 18:37:12 2009 -0500
+++ b/src/config/settings-get.pl	Mon Nov 16 18:38:06 2009 -0500
@@ -78,6 +78,8 @@ foreach my $file (@ARGV) {
 	}        
       }
       
+      s/^static const (struct master_settings master_default_settings)/$1/;
+
       $write = 1;
       if (/};/) {
 	$state = 0;
@@ -115,3 +117,4 @@ print "\tNULL\n";
 print "\tNULL\n";
 print "};\n";
 print "const struct setting_parser_info *const *all_roots = all_default_roots;\n";
+print "ARRAY_TYPE(service_settings) *default_services = &master_default_settings.services;\n";
diff -r 12434655f2e5 -r e18645b47984 src/lib-master/service-settings.h
--- a/src/lib-master/service-settings.h	Mon Nov 16 18:37:12 2009 -0500
+++ b/src/lib-master/service-settings.h	Mon Nov 16 18:38:06 2009 -0500
@@ -53,5 +53,6 @@ struct service_settings {
 	enum service_type parsed_type;
 	unsigned int login_dump_core:1;
 };
+ARRAY_DEFINE_TYPE(service_settings, struct service_settings *);
 
 #endif
diff -r 12434655f2e5 -r e18645b47984 src/master/master-settings.h
--- a/src/master/master-settings.h	Mon Nov 16 18:37:12 2009 -0500
+++ b/src/master/master-settings.h	Mon Nov 16 18:38:06 2009 -0500
@@ -20,7 +20,7 @@ struct master_settings {
 	unsigned int first_valid_uid, last_valid_uid;
 	unsigned int first_valid_gid, last_valid_gid;
 
-	ARRAY_DEFINE(services, struct service_settings *);
+	ARRAY_TYPE(service_settings) services;
 	char **protocols_split;
 };
 


More information about the dovecot-cvs mailing list