Mercurial > dovecot > core-2.2
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);