changeset 19567:11b714c6c31c

*-login: Added login_plugins and login_plugin_dir settings.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 15 Jan 2016 16:07:32 +0200
parents f395cd665008
children 828dd58e03a4
files src/login-common/Makefile.am src/login-common/login-settings.c src/login-common/login-settings.h src/login-common/main.c
diffstat 4 files changed, 32 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/login-common/Makefile.am	Fri Jan 15 16:20:45 2016 +0200
+++ b/src/login-common/Makefile.am	Fri Jan 15 16:07:32 2016 +0200
@@ -8,7 +8,8 @@
 	-I$(top_srcdir)/src/lib-master \
 	-I$(top_srcdir)/src/lib-ssl-iostream \
 	-I$(top_srcdir)/src/lib-mail \
-	-DPKG_STATEDIR=\""$(statedir)"\"
+	-DPKG_STATEDIR=\""$(statedir)"\" \
+	-DMODULEDIR=\""$(moduledir)"\"
 
 liblogin_la_SOURCES = \
 	access-lookup.c \
--- a/src/login-common/login-settings.c	Fri Jan 15 16:20:45 2016 +0200
+++ b/src/login-common/login-settings.c	Fri Jan 15 16:07:32 2016 +0200
@@ -26,6 +26,8 @@
 	DEF(SET_STR, login_log_format_elements),
 	DEF(SET_STR, login_log_format),
 	DEF(SET_STR, login_access_sockets),
+	DEF(SET_STR, login_plugin_dir),
+	DEF(SET_STR, login_plugins),
 	DEF(SET_TIME, login_proxy_max_disconnect_delay),
 	DEF(SET_STR, director_username_hash),
 
@@ -52,6 +54,8 @@
 	.login_log_format_elements = "user=<%u> method=%m rip=%r lip=%l mpid=%e %c session=<%{session}>",
 	.login_log_format = "%$: %s",
 	.login_access_sockets = "",
+	.login_plugin_dir = MODULEDIR"/login",
+	.login_plugins = "",
 	.login_proxy_max_disconnect_delay = 0,
 	.director_username_hash = "%u",
 
--- a/src/login-common/login-settings.h	Fri Jan 15 16:20:45 2016 +0200
+++ b/src/login-common/login-settings.h	Fri Jan 15 16:07:32 2016 +0200
@@ -9,6 +9,8 @@
 	const char *login_greeting;
 	const char *login_log_format_elements, *login_log_format;
 	const char *login_access_sockets;
+	const char *login_plugin_dir;
+	const char *login_plugins;
 	unsigned int login_proxy_max_disconnect_delay;
 	const char *director_username_hash;
 
--- a/src/login-common/main.c	Fri Jan 15 16:20:45 2016 +0200
+++ b/src/login-common/main.c	Fri Jan 15 16:07:32 2016 +0200
@@ -4,6 +4,7 @@
 #include "ioloop.h"
 #include "array.h"
 #include "randgen.h"
+#include "module-dir.h"
 #include "process-title.h"
 #include "restrict-access.h"
 #include "restrict-process-size.h"
@@ -47,6 +48,7 @@
 const struct ip_addr *login_source_ips;
 unsigned int login_source_ips_idx, login_source_ips_count;
 
+static struct module *modules;
 static struct timeout *auth_client_to;
 static bool shutting_down = FALSE;
 static bool ssl_connections = FALSE;
@@ -302,6 +304,26 @@
 	return array_get(&ips, count_r);
 }
 
+static void login_load_modules(void)
+{
+	struct module_dir_load_settings mod_set;
+
+	if (global_login_settings->login_plugins[0] == '\0')
+		return;
+
+	memset(&mod_set, 0, sizeof(mod_set));
+	mod_set.abi_version = DOVECOT_ABI_VERSION;
+	mod_set.binary_name = login_binary->process_name;
+	mod_set.setting_name = "logi_plugins";
+	mod_set.require_init_funcs = TRUE;
+	mod_set.debug = login_debug;
+
+	modules = module_dir_load(global_login_settings->login_plugin_dir,
+				  global_login_settings->login_plugins,
+				  &mod_set);
+	module_dir_init(modules);
+}
+
 static void main_preinit(void)
 {
 	unsigned int max_fds;
@@ -348,6 +370,8 @@
 		login_source_ips_idx = rand() % login_source_ips_count;
 	}
 
+	login_load_modules();
+
 	restrict_access_by_env(NULL, TRUE);
 	if (login_debug)
 		restrict_access_allow_coredumps(TRUE);