Skip to content

Commit

Permalink
*-login: Added login_plugins and login_plugin_dir settings.
Browse files Browse the repository at this point in the history
  • Loading branch information
sirainen committed Jan 15, 2016
1 parent 7d8862f commit 4819488
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/login-common/Makefile.am
Expand Up @@ -8,7 +8,8 @@ AM_CPPFLAGS = \
-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 \
Expand Down
4 changes: 4 additions & 0 deletions src/login-common/login-settings.c
Expand Up @@ -26,6 +26,8 @@ static const struct setting_define login_setting_defines[] = {
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),

Expand All @@ -52,6 +54,8 @@ static const struct login_settings login_default_settings = {
.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",

Expand Down
2 changes: 2 additions & 0 deletions src/login-common/login-settings.h
Expand Up @@ -9,6 +9,8 @@ struct login_settings {
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;

Expand Down
24 changes: 24 additions & 0 deletions src/login-common/main.c
Expand Up @@ -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"
Expand Down Expand Up @@ -47,6 +48,7 @@ void **global_other_settings;
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;
Expand Down Expand Up @@ -302,6 +304,26 @@ parse_login_source_ips(const char *ips_str, unsigned int *count_r)
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;
Expand Down Expand Up @@ -348,6 +370,8 @@ static void main_preinit(void)
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);
Expand Down

0 comments on commit 4819488

Please sign in to comment.