}
/* continue iterating next userdb */
- ctx->iter = userdb_blocking_iter_init(ctx->userdb,
+ ctx->iter = userdb_blocking_iter_init(ctx->userdb->userdb,
master_input_list_callback, ctx);
userdb_blocking_iter_next(ctx->iter);
return;
io_remove(&conn->io);
o_stream_set_flush_callback(conn->output, master_output_list, ctx);
- ctx->iter = userdb_blocking_iter_init(ctx->userdb,
+ ctx->iter = userdb_blocking_iter_init(ctx->userdb->userdb,
master_input_list_callback, ctx);
return TRUE;
}
auth_worker_list_output, ctx);
client->refcount++;
ctx->iter = ctx->userdb->iface->
- iterate_init(userdb, list_iter_callback, ctx);
+ iterate_init(userdb->userdb, list_iter_callback, ctx);
ctx->userdb->iface->iterate_next(ctx->iter);
}
const char *const *mechanisms;
for (passdb = auth->masterdbs; passdb != NULL; passdb = passdb->next)
- passdb_init(passdb);
+ passdb_init(passdb->passdb, passdb->set);
for (passdb = auth->passdbs; passdb != NULL; passdb = passdb->next)
- passdb_init(passdb);
+ passdb_init(passdb->passdb, passdb->set);
for (userdb = auth->userdbs; userdb != NULL; userdb = userdb->next)
- userdb_init(userdb);
+ userdb_init(userdb->userdb, userdb->set);
/* caching is handled only by the main auth process */
if (!worker)
passdb_cache_init(auth->set);
*_auth = NULL;
for (passdb = auth->masterdbs; passdb != NULL; passdb = passdb->next)
- passdb_deinit(passdb);
+ passdb_deinit(passdb->passdb);
for (passdb = auth->passdbs; passdb != NULL; passdb = passdb->next)
- passdb_deinit(passdb);
+ passdb_deinit(passdb->passdb);
for (userdb = auth->userdbs; userdb != NULL; userdb = userdb->next)
- userdb_deinit(userdb);
+ userdb_deinit(userdb->userdb);
auth_request_handler_deinit();
passdb_cache_deinit();
}
static struct passdb_module *
-bsdauth_preinit(struct auth_passdb *auth_passdb, const char *args)
+bsdauth_preinit(pool_t pool, const char *args)
{
struct passdb_module *module;
- module = p_new(auth_passdb->pool, struct passdb_module, 1);
+ module = p_new(pool, struct passdb_module, 1);
module->default_pass_scheme = "PLAIN"; /* same reason as PAM */
- if (strncmp(args, "cache_key=", 10) == 0) {
- module->cache_key =
- auth_cache_parse_key(auth_passdb->pool, args + 10);
- } else if (*args != '\0')
+ if (strncmp(args, "cache_key=", 10) == 0)
+ module->cache_key = auth_cache_parse_key(pool, args + 10);
+ else if (*args != '\0')
i_fatal("passdb bsdauth: Unknown setting: %s", args);
return module;
}
}
static struct passdb_module *
-checkpassword_preinit(struct auth_passdb *auth_passdb, const char *args)
+checkpassword_preinit(pool_t pool, const char *args)
{
struct checkpassword_passdb_module *module;
- module = p_new(auth_passdb->pool,
- struct checkpassword_passdb_module, 1);
- module->checkpassword_path = p_strdup(auth_passdb->pool, args);
+ module = p_new(pool, struct checkpassword_passdb_module, 1);
+ module->checkpassword_path = p_strdup(pool, args);
module->checkpassword_reply_path =
PKG_LIBEXECDIR"/checkpassword-reply";
}
static struct passdb_module *
-passdb_ldap_preinit(struct auth_passdb *auth_passdb, const char *args)
+passdb_ldap_preinit(pool_t pool, const char *args)
{
struct ldap_passdb_module *module;
struct ldap_connection *conn;
- module = p_new(auth_passdb->pool, struct ldap_passdb_module, 1);
+ module = p_new(pool, struct ldap_passdb_module, 1);
module->conn = conn = db_ldap_init(args);
conn->pass_attr_map =
hash_table_create(default_pool, conn->pool, 0, str_hash,
conn->pass_attr_map,
conn->set.auth_bind ? "password" : NULL);
module->module.cache_key =
- auth_cache_parse_key(auth_passdb->pool,
+ auth_cache_parse_key(pool,
t_strconcat(conn->set.base,
conn->set.pass_filter, NULL));
module->module.default_pass_scheme = conn->set.default_pass_scheme;
}
static struct passdb_module *
-pam_preinit(struct auth_passdb *auth_passdb, const char *args)
+pam_preinit(pool_t pool, const char *args)
{
struct pam_passdb_module *module;
const char *const *t_args;
int i;
- module = p_new(auth_passdb->pool, struct pam_passdb_module, 1);
+ module = p_new(pool, struct pam_passdb_module, 1);
module->service_name = "dovecot";
/* we're caching the password by using directly the plaintext password
given by the auth mechanism */
module->pam_setcred = TRUE;
else if (strncmp(t_args[i], "cache_key=", 10) == 0) {
module->module.cache_key =
- auth_cache_parse_key(auth_passdb->pool,
- t_args[i] + 10);
+ auth_cache_parse_key(pool, t_args[i] + 10);
} else if (strcmp(t_args[i], "blocking=yes") == 0) {
/* ignore, for backwards compatibility */
} else if (strcmp(t_args[i], "failure_show_msg=yes") == 0) {
} else if (strncmp(t_args[i], "max_requests=", 13) == 0) {
module->requests_left = atoi(t_args[i] + 13);
} else if (t_args[i+1] == NULL) {
- module->service_name =
- p_strdup(auth_passdb->pool, t_args[i]);
+ module->service_name = p_strdup(pool, t_args[i]);
} else {
i_fatal("passdb pam: Unknown setting: %s", t_args[i]);
}
}
static struct passdb_module *
-passwd_file_preinit(struct auth_passdb *auth_passdb, const char *args)
+passwd_file_preinit(pool_t pool, const char *args)
{
struct passwd_file_passdb_module *module;
const char *scheme = PASSWD_FILE_DEFAULT_SCHEME;
args++;
if (strcmp(key, "scheme") == 0)
- scheme = p_strdup(auth_passdb->pool, value);
+ scheme = p_strdup(pool, value);
else if (strcmp(key, "username_format") == 0)
- format = p_strdup(auth_passdb->pool, value);
+ format = p_strdup(pool, value);
else
i_fatal("passdb passwd-file: Unknown setting: %s", key);
}
if (*args == '\0')
i_fatal("passdb passwd-file: Missing args");
- module = p_new(auth_passdb->pool, struct passwd_file_passdb_module, 1);
+ module = p_new(pool, struct passwd_file_passdb_module, 1);
module->pwf = db_passwd_file_init(args, format, FALSE,
global_auth_settings->debug);
if (!module->pwf->vars)
module->module.cache_key = format;
else {
- module->module.cache_key =
- auth_cache_parse_key(auth_passdb->pool,
- t_strconcat(format, module->pwf->path, NULL));
+ module->module.cache_key = auth_cache_parse_key(pool,
+ t_strconcat(format, module->pwf->path, NULL));
}
module->module.default_pass_scheme = scheme;
}
static struct passdb_module *
-passdb_sql_preinit(struct auth_passdb *auth_passdb, const char *args)
+passdb_sql_preinit(pool_t pool, const char *args)
{
struct sql_passdb_module *module;
struct sql_connection *conn;
- module = p_new(auth_passdb->pool, struct sql_passdb_module, 1);
+ module = p_new(pool, struct sql_passdb_module, 1);
module->conn = conn = db_sql_init(args);
module->module.cache_key =
- auth_cache_parse_key(auth_passdb->pool,
- conn->set.password_query);
+ auth_cache_parse_key(pool, conn->set.password_query);
module->module.default_pass_scheme = conn->set.default_pass_scheme;
return &module->module;
}
}
static struct passdb_module *
-vpopmail_preinit(struct auth_passdb *auth_passdb, const char *args)
+vpopmail_preinit(pool_t pool, const char *args)
{
struct vpopmail_passdb_module *module;
const char *const *tmp;
- module = p_new(auth_passdb->pool, struct vpopmail_passdb_module, 1);
+ module = p_new(pool, struct vpopmail_passdb_module, 1);
module->module.default_pass_scheme = VPOPMAIL_DEFAULT_PASS_SCHEME;
tmp = t_strsplit_spaces(args, " ");
for (; *tmp != NULL; tmp++) {
if (strncmp(*tmp, "cache_key=", 10) == 0) {
module->module.cache_key =
- auth_cache_parse_key(auth_passdb->pool,
- *tmp + 10);
+ auth_cache_parse_key(pool, *tmp + 10);
} else if (strncmp(*tmp, "webmail=", 8) == 0) {
if (net_addr2ip(*tmp + 8, &module->webmail_ip) < 0)
i_fatal("vpopmail: Invalid webmail IP address");
callback(result, credentials, size, auth_request);
}
-struct auth_passdb *
-passdb_preinit(struct auth *auth, struct auth_passdb_settings *set)
+void passdb_preinit(struct auth *auth, const struct auth_passdb_settings *set)
{
static unsigned int auth_passdb_id = 0;
struct passdb_module_interface *iface;
p_new(auth->pool, struct passdb_module, 1);
} else {
auth_passdb->passdb =
- iface->preinit(auth_passdb, set->args);
+ iface->preinit(auth->pool, set->args);
}
auth_passdb->passdb->id = ++auth_passdb_id;
auth_passdb->passdb->iface = *iface;
- return auth_passdb;
}
-void passdb_init(struct auth_passdb *passdb)
+void passdb_init(struct passdb_module *passdb,
+ const struct auth_passdb_settings *set)
{
- if (passdb->passdb->iface.init != NULL)
- passdb->passdb->iface.init(passdb->passdb, passdb->set->args);
+ if (passdb->iface.init != NULL)
+ passdb->iface.init(passdb, set->args);
- i_assert(passdb->passdb->default_pass_scheme != NULL ||
- passdb->passdb->cache_key == NULL);
+ i_assert(passdb->default_pass_scheme != NULL ||
+ passdb->cache_key == NULL);
}
-void passdb_deinit(struct auth_passdb *passdb)
+void passdb_deinit(struct passdb_module *passdb)
{
- if (passdb->passdb->iface.deinit != NULL)
- passdb->passdb->iface.deinit(passdb->passdb);
+ if (passdb->iface.deinit != NULL)
+ passdb->iface.deinit(passdb);
}
extern struct passdb_module_interface passdb_passwd;
((pass)[0] != '\0' && (pass)[0] != '*' && (pass)[0] != '!')
struct auth_request;
-struct auth_passdb;
struct auth_passdb_settings;
enum passdb_result {
struct passdb_module_interface {
const char *name;
- struct passdb_module *
- (*preinit)(struct auth_passdb *auth_passdb, const char *args);
+ struct passdb_module *(*preinit)(pool_t pool, const char *args);
void (*init)(struct passdb_module *module, const char *args);
void (*deinit)(struct passdb_module *module);
lookup_credentials_callback_t *callback,
struct auth_request *auth_request);
-struct auth_passdb *
-passdb_preinit(struct auth *auth, struct auth_passdb_settings *set);
-
-void passdb_init(struct auth_passdb *passdb);
-void passdb_deinit(struct auth_passdb *passdb);
+void passdb_preinit(struct auth *auth, const struct auth_passdb_settings *set);
+void passdb_init(struct passdb_module *passdb,
+ const struct auth_passdb_settings *set);
+void passdb_deinit(struct passdb_module *passdb);
void passdb_register_module(struct passdb_module_interface *iface);
void passdb_unregister_module(struct passdb_module_interface *iface);
}
struct userdb_iterate_context *
-userdb_blocking_iter_init(struct auth_userdb *userdb,
+userdb_blocking_iter_init(struct userdb_module *userdb,
userdb_iter_callback_t *callback, void *context)
{
struct blocking_userdb_iterate_context *ctx;
reply = auth_stream_reply_init(pool_datastack_create());
auth_stream_reply_add(reply, "LIST", NULL);
- auth_stream_reply_add(reply, NULL, dec2str(userdb->userdb->id));
+ auth_stream_reply_add(reply, NULL, dec2str(userdb->id));
pool = pool_alloconly_create("userdb iter", 512);
ctx = p_new(pool, struct blocking_userdb_iterate_context, 1);
- ctx->ctx.userdb = userdb->userdb;
+ ctx->ctx.userdb = userdb;
ctx->ctx.callback = callback;
ctx->ctx.context = context;
ctx->pool = pool;
void userdb_blocking_lookup(struct auth_request *request);
struct userdb_iterate_context *
-userdb_blocking_iter_init(struct auth_userdb *userdb,
+userdb_blocking_iter_init(struct userdb_module *userdb,
userdb_iter_callback_t *callback, void *context);
void userdb_blocking_iter_next(struct userdb_iterate_context *ctx);
int userdb_blocking_iter_deinit(struct userdb_iterate_context **ctx);
}
static struct userdb_module *
-checkpassword_preinit(struct auth_userdb *auth_userdb, const char *args)
+checkpassword_preinit(pool_t pool, const char *args)
{
struct checkpassword_userdb_module *module;
- module = p_new(auth_userdb->pool,
- struct checkpassword_userdb_module, 1);
- module->checkpassword_path = p_strdup(auth_userdb->pool, args);
+ module = p_new(pool, struct checkpassword_userdb_module, 1);
+ module->checkpassword_path = p_strdup(pool, args);
module->checkpassword_reply_path =
PKG_LIBEXECDIR"/checkpassword-reply";
}
static struct userdb_iterate_context *
-userdb_ldap_iterate_init(struct auth_userdb *userdb,
+userdb_ldap_iterate_init(struct userdb_module *userdb,
userdb_iter_callback_t *callback, void *context)
{
struct ldap_userdb_module *module =
- (struct ldap_userdb_module *)userdb->userdb;
+ (struct ldap_userdb_module *)userdb;
struct ldap_connection *conn = module->conn;
struct ldap_userdb_iterate_context *ctx;
struct userdb_iter_ldap_request *request;
const char **attr_names = (const char **)conn->iterate_attr_names;
ctx = i_new(struct ldap_userdb_iterate_context, 1);
- ctx->ctx.userdb = userdb->userdb;
+ ctx->ctx.userdb = userdb;
ctx->ctx.callback = callback;
ctx->ctx.context = context;
ctx->conn = conn;
}
static struct userdb_module *
-userdb_ldap_preinit(struct auth_userdb *auth_userdb, const char *args)
+userdb_ldap_preinit(pool_t pool, const char *args)
{
struct ldap_userdb_module *module;
struct ldap_connection *conn;
- module = p_new(auth_userdb->pool, struct ldap_userdb_module, 1);
+ module = p_new(pool, struct ldap_userdb_module, 1);
module->conn = conn = db_ldap_init(args);
conn->user_attr_map =
hash_table_create(default_pool, conn->pool, 0, str_hash,
&conn->iterate_attr_names,
conn->iterate_attr_map, NULL);
module->module.cache_key =
- auth_cache_parse_key(auth_userdb->pool,
+ auth_cache_parse_key(pool,
t_strconcat(conn->set.base,
conn->set.user_filter, NULL));
return &module->module;
}
static struct userdb_module *
-userdb_nss_preinit(struct auth_userdb *auth_userdb, const char *args)
+userdb_nss_preinit(pool_t pool, const char *args)
{
struct nss_userdb_module *module;
const char *const *tmp;
- pool_t pool = auth_userdb->pool;
module = p_new(pool, struct nss_userdb_module, 1);
module->bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
}
static struct userdb_iterate_context *
-passwd_file_iterate_init(struct auth_userdb *userdb,
+passwd_file_iterate_init(struct userdb_module *userdb,
userdb_iter_callback_t *callback, void *context)
{
struct passwd_file_userdb_module *module =
- (struct passwd_file_userdb_module *)userdb->userdb;
+ (struct passwd_file_userdb_module *)userdb;
struct passwd_file_userdb_iterate_context *ctx;
int fd;
ctx = i_new(struct passwd_file_userdb_iterate_context, 1);
- ctx->ctx.userdb = userdb->userdb;
+ ctx->ctx.userdb = userdb;
ctx->ctx.callback = callback;
ctx->ctx.context = context;
if (module->pwf->default_file == NULL) {
}
static struct userdb_module *
-passwd_file_preinit(struct auth_userdb *auth_userdb, const char *args)
+passwd_file_preinit(pool_t pool, const char *args)
{
struct passwd_file_userdb_module *module;
const char *format = PASSWD_FILE_DEFAULT_USERNAME_FORMAT;
format = args;
args = "";
} else {
- format = p_strdup_until(auth_userdb->pool, args, p);
+ format = p_strdup_until(pool, args, p);
args = p + 1;
}
}
if (*args == '\0')
i_fatal("userdb passwd-file: Missing args");
- module = p_new(auth_userdb->pool, struct passwd_file_userdb_module, 1);
+ module = p_new(pool, struct passwd_file_userdb_module, 1);
module->pwf = db_passwd_file_init(args, format, TRUE,
global_auth_settings->debug);
module->module.cache_key = PASSWD_FILE_CACHE_KEY;
else {
module->module.cache_key =
- auth_cache_parse_key(auth_userdb->pool,
+ auth_cache_parse_key(pool,
t_strconcat(PASSWD_FILE_CACHE_KEY,
module->pwf->path,
NULL));
}
static struct userdb_iterate_context *
-passwd_iterate_init(struct auth_userdb *userdb,
+passwd_iterate_init(struct userdb_module *userdb,
userdb_iter_callback_t *callback, void *context)
{
struct passwd_userdb_iterate_context *ctx;
ctx = i_new(struct passwd_userdb_iterate_context, 1);
- ctx->ctx.userdb = userdb->userdb;
+ ctx->ctx.userdb = userdb;
ctx->ctx.callback = callback;
ctx->ctx.context = context;
setpwent();
}
static struct userdb_module *
-passwd_passwd_preinit(struct auth_userdb *auth_userdb, const char *args)
+passwd_passwd_preinit(pool_t pool, const char *args)
{
struct passwd_userdb_module *module;
const char *value;
- module = p_new(auth_userdb->pool, struct passwd_userdb_module, 1);
+ module = p_new(pool, struct passwd_userdb_module, 1);
module->module.cache_key = USER_CACHE_KEY;
- module->tmpl = userdb_static_template_build(auth_userdb->pool,
- "passwd", args);
+ module->tmpl = userdb_static_template_build(pool, "passwd", args);
if (userdb_static_template_remove(module->tmpl, "blocking",
&value)) {
}
static struct userdb_iterate_context *
-userdb_sql_iterate_init(struct auth_userdb *userdb,
+userdb_sql_iterate_init(struct userdb_module *userdb,
userdb_iter_callback_t *callback, void *context)
{
struct sql_userdb_module *module =
- (struct sql_userdb_module *)userdb->userdb;
+ (struct sql_userdb_module *)userdb;
struct sql_userdb_iterate_context *ctx;
ctx = i_new(struct sql_userdb_iterate_context, 1);
- ctx->ctx.userdb = userdb->userdb;
+ ctx->ctx.userdb = userdb;
ctx->ctx.callback = callback;
ctx->ctx.context = context;
}
static struct userdb_module *
-userdb_sql_preinit(struct auth_userdb *auth_userdb, const char *args)
+userdb_sql_preinit(pool_t pool, const char *args)
{
struct sql_userdb_module *module;
- module = p_new(auth_userdb->pool, struct sql_userdb_module, 1);
+ module = p_new(pool, struct sql_userdb_module, 1);
module->conn = db_sql_init(args);
module->module.cache_key =
- auth_cache_parse_key(auth_userdb->pool,
- module->conn->set.user_query);
+ auth_cache_parse_key(pool, module->conn->set.user_query);
return &module->module;
}
}
static struct userdb_module *
-static_preinit(struct auth_userdb *auth_userdb, const char *args)
+static_preinit(pool_t pool, const char *args)
{
struct static_userdb_module *module;
const char *value;
- module = p_new(auth_userdb->pool, struct static_userdb_module, 1);
- module->tmpl = userdb_static_template_build(auth_userdb->pool,
- "static", args);
+ module = p_new(pool, struct static_userdb_module, 1);
+ module->tmpl = userdb_static_template_build(pool, "static", args);
if (userdb_static_template_remove(module->tmpl, "allow_all_users",
&value)) {
}
static struct userdb_module *
-vpopmail_preinit(struct auth_userdb *auth_userdb, const char *args)
+vpopmail_preinit(pool_t pool, const char *args)
{
struct vpopmail_userdb_module *module;
const char *const *tmp, *p;
- pool_t pool = auth_userdb->pool;
module = p_new(pool, struct vpopmail_userdb_module, 1);
return gr->gr_gid;
}
-void userdb_preinit(struct auth *auth, struct auth_userdb_settings *set)
+void userdb_preinit(struct auth *auth, const struct auth_userdb_settings *set)
{
static unsigned int auth_userdb_id = 0;
struct userdb_module_interface *iface;
p_new(auth->pool, struct userdb_module, 1);
} else {
auth_userdb->userdb =
- iface->preinit(auth_userdb, auth_userdb->set->args);
+ iface->preinit(auth->pool, auth_userdb->set->args);
}
auth_userdb->userdb->id = ++auth_userdb_id;
auth_userdb->userdb->iface = iface;
}
-void userdb_init(struct auth_userdb *userdb)
+void userdb_init(struct userdb_module *userdb,
+ const struct auth_userdb_settings *set)
{
- if (userdb->userdb->iface->init != NULL)
- userdb->userdb->iface->init(userdb->userdb, userdb->set->args);
+ if (userdb->iface->init != NULL)
+ userdb->iface->init(userdb, set->args);
}
-void userdb_deinit(struct auth_userdb *userdb)
+void userdb_deinit(struct userdb_module *userdb)
{
- if (userdb->userdb->iface->deinit != NULL)
- userdb->userdb->iface->deinit(userdb->userdb);
+ if (userdb->iface->deinit != NULL)
+ userdb->iface->deinit(userdb);
}
extern struct userdb_module_interface userdb_prefetch;
struct auth;
struct auth_request;
-struct auth_userdb;
struct auth_userdb_settings;
enum userdb_result {
struct userdb_module_interface {
const char *name;
- struct userdb_module *
- (*preinit)(struct auth_userdb *auth_userdb, const char *args);
+ struct userdb_module *(*preinit)(pool_t pool, const char *args);
void (*init)(struct userdb_module *module, const char *args);
void (*deinit)(struct userdb_module *module);
userdb_callback_t *callback);
struct userdb_iterate_context *
- (*iterate_init)(struct auth_userdb *userdb,
+ (*iterate_init)(struct userdb_module *userdb,
userdb_iter_callback_t *callback,
void *context);
void (*iterate_next)(struct userdb_iterate_context *ctx);
uid_t userdb_parse_uid(struct auth_request *request, const char *str);
gid_t userdb_parse_gid(struct auth_request *request, const char *str);
-void userdb_preinit(struct auth *auth, struct auth_userdb_settings *set);
-void userdb_init(struct auth_userdb *userdb);
-void userdb_deinit(struct auth_userdb *userdb);
+void userdb_preinit(struct auth *auth, const struct auth_userdb_settings *set);
+void userdb_init(struct userdb_module *userdb,
+ const struct auth_userdb_settings *set);
+void userdb_deinit(struct userdb_module *userdb);
void userdb_register_module(struct userdb_module_interface *iface);
void userdb_unregister_module(struct userdb_module_interface *iface);