-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 \
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),
.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",
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;
#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"
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;
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;
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);