dovecot-2.0: lib-auth: Make sure auth request isn't tried to be ...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Sep 20 21:06:33 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/af45e2f36059
changeset: 12139:af45e2f36059
user: Timo Sirainen <tss at iki.fi>
date: Mon Sep 20 19:06:26 2010 +0100
description:
lib-auth: Make sure auth request isn't tried to be double-freed on error conditions.
This could have happened if auth server crashed.
diffstat:
src/lib-auth/auth-client-request.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diffs (45 lines):
diff -r e403f4dc95ea -r af45e2f36059 src/lib-auth/auth-client-request.c
--- a/src/lib-auth/auth-client-request.c Mon Sep 20 18:19:53 2010 +0100
+++ b/src/lib-auth/auth-client-request.c Mon Sep 20 19:06:26 2010 +0100
@@ -112,19 +112,25 @@
i_error("Error sending continue request to auth server: %m");
}
+static void call_callback(struct auth_client_request *request,
+ enum auth_request_status status,
+ const char *data_base64,
+ const char *const *args)
+{
+ auth_request_callback_t *callback = request->callback;
+
+ request->callback = NULL;
+ callback(request, status, data_base64, args, request->context);
+}
+
void auth_client_request_abort(struct auth_client_request **_request)
{
struct auth_client_request *request = *_request;
- const char *str = t_strdup_printf("CANCEL\t%u\n", request->id);
*_request = NULL;
- if (o_stream_send_str(request->conn->output, str) < 0)
- i_error("Error sending request to auth server: %m");
-
- request->callback(request, AUTH_REQUEST_STATUS_FAIL, NULL, NULL,
- request->context);
- request->callback = NULL;
+ auth_client_send_cancel(request->conn->client, request->id);
+ call_callback(request, AUTH_REQUEST_STATUS_FAIL, NULL, NULL);
}
unsigned int auth_client_request_get_id(struct auth_client_request *request)
@@ -176,7 +182,7 @@
break;
}
- request->callback(request, status, base64_data, args, request->context);
+ call_callback(request, status, base64_data, args);
if (status != AUTH_REQUEST_STATUS_CONTINUE)
pool_unref(&request->pool);
}
More information about the dovecot-cvs
mailing list