#include "sasl-server-protected.h" // FIXME: remove
#include "auth-request.h"
-void auth_request_fields_init(struct auth_request *request)
+void auth_request_fields_alloc(struct auth_request *request)
{
request->fields.extra_fields = auth_fields_init(request->pool);
+ /* Default to "insecure" until it's changed later */
+ event_add_str(request->event, "transport", "insecure");
+}
+
+void auth_request_fields_init(struct auth_request *request)
+{
if (request->mech != NULL) {
request->fields.mech_name = request->mech->mech_name;
event_add_str(request->event, "mechanism",
request->mech->mech_name);
}
- /* Default to "insecure" until it's changed later */
- event_add_str(request->event, "transport", "insecure");
}
static void
int auth_request_handler_auth_begin(struct auth_request_handler *handler,
const char *const *args)
{
- const struct sasl_server_mech_def *mech;
struct auth_request *request;
- const char *name, *arg, *initial_resp;
+ const char *mech_name, *name, *arg, *initial_resp;
void *initial_resp_data;
unsigned int id;
buffer_t *buf;
"sent broken AUTH request", handler->client_pid);
return -1;
}
+ mech_name = args[1];
- if (auth_request_handler_find_mech(handler, args[1], &mech) < 0)
- return -1;
-
- request = auth_request_new(mech, handler->conn->conn.event);
+ request = auth_request_new(handler->conn->event);
request->handler = handler;
request->connect_uid = handler->connect_uid;
request->client_pid = handler->client_pid;
auth_request_unref(&request);
return -1;
}
- auth_request_init(request);
+
+ const struct sasl_server_mech_def *mech;
+
+ if (auth_request_handler_find_mech(handler, mech_name, &mech) < 0)
+ return -1;
+ auth_request_init_sasl(request, mech);
request->to_abort = timeout_add(MASTER_AUTH_SERVER_TIMEOUT_SECS * 1000,
auth_request_timeout, request);
request->set = global_auth_settings;
request->protocol_set = global_auth_settings;
request->event = event_create(parent_event);
- auth_request_fields_init(request);
+ auth_request_fields_alloc(request);
level = request->set->verbose ? LOG_TYPE_INFO : LOG_TYPE_WARNING;
event_set_min_log_level(request->event, level);
p_array_init(&request->authdb_event, request->pool, 2);
}
-struct auth_request *
-auth_request_new(const struct sasl_server_mech_def *mech,
- struct event *parent_event)
+struct auth_request *auth_request_new(struct event *parent_event)
{
struct auth_request *request;
pool_t pool;
pool = pool_alloconly_create(MEMPOOL_GROWING"auth_request", 1024);
request = p_new(pool, struct auth_request, 1);
request->pool = pool;
- request->mech = mech;
- auth_request_post_alloc_init(request, parent_event);
-
- enum log_type level =
- (request->set->verbose ? LOG_TYPE_INFO : LOG_TYPE_WARNING);
- const char *prefix = t_strconcat(
- t_str_lcase(request->mech->mech_name), ": ", NULL);
-
- request->mech_event = event_create(request->event);
- event_set_min_log_level(request->mech_event, level);
- event_set_append_log_prefix(request->mech_event, prefix);
-
- auth_sasl_request_init(request, mech);
+ auth_request_post_alloc_init(request, parent_event);
return request;
}
request->protocol_set = auth->protocol_set;
request->passdb = auth->passdbs;
request->userdb = auth->userdbs;
+
+ auth_request_fields_init(request);
+}
+
+void auth_request_init_sasl(struct auth_request *request,
+ const struct sasl_server_mech_def *mech)
+{
+ request->mech = mech;
+
+ const char *prefix = t_strconcat(
+ t_str_lcase(request->mech->mech_name), ": ", NULL);
+
+ request->mech_event = event_create(request->event);
+ event_set_append_log_prefix(request->mech_event, prefix);
+
+ auth_sasl_request_init(request, mech);
+ auth_request_init(request);
}
struct auth *auth_request_get_auth(struct auth_request *request)
extern unsigned int auth_request_state_count[AUTH_REQUEST_STATE_MAX];
-struct auth_request *
-auth_request_new(const struct sasl_server_mech_def *mech,
- struct event *parent_event);
+struct auth_request *auth_request_new(struct event *parent_event);
struct auth_request *auth_request_new_dummy(struct event *parent_event);
+
void auth_request_init(struct auth_request *request);
+void auth_request_init_sasl(struct auth_request *request,
+ const struct sasl_server_mech_def *mech);
+
struct auth *auth_request_get_auth(struct auth_request *request);
void auth_request_set_state(struct auth_request *request,
auth_request_finished_event(struct auth_request *request, struct event *event);
void auth_request_log_finished(struct auth_request *request);
void auth_request_master_user_login_finish(struct auth_request *request);
+
+void auth_request_fields_alloc(struct auth_request *request);
void auth_request_fields_init(struct auth_request *request);
void auth_request_passdb_lookup_begin(struct auth_request *request);
request->set = global_auth_settings;
request->refcount = 1;
p_array_init(&request->authdb_event, pool, 1);
+ auth_request_fields_alloc(request);
auth_request_fields_init(request);
/* fill out fields that are always exported */
unsigned int running_test,
const struct test_case *test_case)
{
- struct auth *auth = auth_default_protocol();
-
- struct auth_request *request = auth_request_new(mech, NULL);
+ struct auth_request *request = auth_request_new(NULL);
struct auth_settings *new_set =
p_memdup(request->pool, global_auth_settings,
sizeof(*global_auth_settings));
request->handler = handler;
request->id = running_test+1;
request->mech_password = NULL;
+ request->fields.protocol = "service";
request->state = AUTH_REQUEST_STATE_NEW;
+ request->mech = mech;
request->set = new_set;
request->protocol_set = global_auth_settings;
request->connect_uid = running_test;
- request->passdb = auth->passdbs;
- request->userdb = auth->userdbs;
handler->refcount = 1;
+ auth_request_init_sasl(request, mech);
+
request->failure_nodelay = TRUE;
auth_request_state_count[AUTH_REQUEST_STATE_NEW] = 1;