From: Timo Sirainen Date: Mon, 23 Aug 2010 15:09:11 +0000 (+0100) Subject: auth: Crashfix when aborting auth request doing async passdb/userdb lookup. X-Git-Tag: 2.0.1~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cc4d0d30fbba883d5d1b600646491fb77bdb989c;p=thirdparty%2Fdovecot%2Fcore.git auth: Crashfix when aborting auth request doing async passdb/userdb lookup. --- diff --git a/src/auth/auth-request-handler.c b/src/auth/auth-request-handler.c index f842191b65..a8206f9a95 100644 --- a/src/auth/auth-request-handler.c +++ b/src/auth/auth-request-handler.c @@ -66,10 +66,22 @@ void auth_request_handler_abort_requests(struct auth_request_handler *handler) while (hash_table_iterate(iter, &key, &value)) { struct auth_request *auth_request = value; - auth_request_unref(&auth_request); + switch (auth_request->state) { + case AUTH_REQUEST_STATE_NEW: + case AUTH_REQUEST_STATE_MECH_CONTINUE: + case AUTH_REQUEST_STATE_FINISHED: + auth_request_unref(&auth_request); + hash_table_remove(handler->requests, key); + break; + case AUTH_REQUEST_STATE_PASSDB: + case AUTH_REQUEST_STATE_USERDB: + /* can't abort a pending passdb/userdb lookup */ + break; + case AUTH_REQUEST_STATE_MAX: + i_unreached(); + } } hash_table_iterate_deinit(&iter); - hash_table_clear(handler->requests, TRUE); } void auth_request_handler_unref(struct auth_request_handler **_handler)