#include <stdio.h>
#include <unistd.h>
+#define DOVEADM_CHECK_INTERRUPT_INTERVAL_MS 1000
+
static struct event_category event_category_auth = {
.name = "auth",
};
unsigned int auth_id;
unsigned int auth_pid;
const char *auth_cookie;
-
+ struct timeout *to;
};
static bool auth_want_log_debug(void)
static void auth_cmd_help(struct doveadm_cmd_context *cctx);
+static void auth_is_interrupted(struct authtest_input *input)
+{
+ if (master_service_is_killed(master_service)) {
+ auth_client_request_abort(&input->request, "cancelled");
+ timeout_remove(&input->to);
+ }
+}
+
static struct auth_master_connection *
doveadm_get_auth_master_conn(const char *auth_socket_path)
{
switch (status) {
case AUTH_REQUEST_STATUS_ABORT:
- i_unreached();
+ printf("passdb: %s request cancelled\n", input->username);
+ break;
case AUTH_REQUEST_STATUS_INTERNAL_FAIL:
case AUTH_REQUEST_STATUS_FAIL:
printf("passdb: %s auth failed\n", input->username);
input->request = auth_client_request_new(client, &info,
auth_callback, input);
+ input->to = timeout_add(DOVEADM_CHECK_INTERRUPT_INTERVAL_MS,
+ auth_is_interrupted, input);
}
static void cmd_auth_init_sasl_client(struct authtest_input *input)
io_loop_run(current_ioloop);
auth_client_set_connect_notify(client, NULL, NULL);
+ timeout_remove(&input->to);
auth_client_deinit(&client);
cmd_auth_deinit_sasl_client(input);
if (!auth_client_is_disconnected(auth_client))
io_loop_run(current_ioloop);
auth_client_set_connect_notify(auth_client, NULL, NULL);
+ timeout_remove(&input.to);
/* finish login with userdb lookup */
if (input.success)
cmd_auth_master_input(auth_master_socket_path, &input);