changeset 19925:1b966650aef9

auth: Code cleanup - avoid using void *context auth_request_callback_t always uses struct auth_client/master_connection* in the context - no need to try to be too generic here.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 11 Mar 2016 18:43:57 +1300
parents 5a4b25374acd
children 3a190d74a1ac
files src/auth/auth-master-connection.c src/auth/auth-master-connection.h src/auth/auth-request-handler.c src/auth/auth-request-handler.h
diffstat 4 files changed, 23 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/auth-master-connection.c	Fri Mar 11 18:37:43 2016 +1300
+++ b/src/auth/auth-master-connection.c	Fri Mar 11 18:43:57 2016 +1300
@@ -68,9 +68,8 @@
 	return t_strarray_join((void *)args, "\t");
 }
 
-void auth_master_request_callback(const char *reply, void *context)
+void auth_master_request_callback(const char *reply, struct auth_master_connection *conn)
 {
-	struct auth_master_connection *conn = context;
 	struct const_iovec iov[2];
 
 	if (conn->auth->set->debug) {
--- a/src/auth/auth-master-connection.h	Fri Mar 11 18:37:43 2016 +1300
+++ b/src/auth/auth-master-connection.h	Fri Mar 11 18:43:57 2016 +1300
@@ -34,7 +34,7 @@
 void auth_master_connection_ref(struct auth_master_connection *conn);
 void auth_master_connection_unref(struct auth_master_connection **conn);
 
-void auth_master_request_callback(const char *reply, void *context);
+void auth_master_request_callback(const char *reply, struct auth_master_connection *conn);
 
 void auth_master_connections_destroy_all(void);
 
--- a/src/auth/auth-request-handler.c	Fri Mar 11 18:37:43 2016 +1300
+++ b/src/auth/auth-request-handler.c	Fri Mar 11 18:43:57 2016 +1300
@@ -27,10 +27,10 @@
 
         unsigned int connect_uid, client_pid;
 
-	auth_request_callback_t *callback;
-	void *context;
+	auth_client_request_callback_t *callback;
+	struct auth_client_connection *conn;
 
-	auth_request_callback_t *master_callback;
+	auth_master_request_callback_t *master_callback;
 
 	unsigned int destroyed:1;
 	unsigned int token_auth:1;
@@ -42,10 +42,10 @@
 
 static void auth_failure_timeout(void *context) ATTR_NULL(1);
 
-#undef auth_request_handler_create
 struct auth_request_handler *
-auth_request_handler_create(bool token_auth, auth_request_callback_t *callback,
-			    void *context, auth_request_callback_t *master_callback)
+auth_request_handler_create(bool token_auth, auth_client_request_callback_t *callback,
+			    struct auth_client_connection *conn,
+			    auth_master_request_callback_t *master_callback)
 {
 	struct auth_request_handler *handler;
 	pool_t pool;
@@ -57,7 +57,7 @@
 	handler->pool = pool;
 	hash_table_create_direct(&handler->requests, pool, 0);
 	handler->callback = callback;
-	handler->context = context;
+	handler->conn = conn;
 	handler->master_callback = master_callback;
 	handler->token_auth = token_auth;
 	return handler;
@@ -108,7 +108,7 @@
 	i_assert(hash_table_count(handler->requests) == 0);
 
 	/* notify parent that we're done with all requests */
-	handler->callback(NULL, handler->context);
+	handler->callback(NULL, handler->conn);
 
 	hash_table_destroy(&handler->requests);
 	pool_unref(&handler->pool);
@@ -207,7 +207,7 @@
 
 	if (request->in_delayed_failure_queue) {
 		/* we came here from flush_failures() */
-		handler->callback(reply, handler->context);
+		handler->callback(reply, handler->conn);
 		return;
 	}
 
@@ -217,7 +217,7 @@
 
 	if (auth_fields_exists(request->extra_fields, "nodelay")) {
 		/* passdb specifically requested not to delay the reply. */
-		handler->callback(reply, handler->context);
+		handler->callback(reply, handler->conn);
 		auth_request_unref(&request);
 		return;
 	}
@@ -267,7 +267,7 @@
 		   process to pick it up. delete it */
 		auth_request_handler_remove(handler, request);
 	}
-	handler->callback(str_c(str), handler->context);
+	handler->callback(str_c(str), handler->conn);
 }
 
 static void
@@ -353,7 +353,7 @@
 		base64_encode(auth_reply, reply_size, str);
 
 		request->accept_cont_input = TRUE;
-		handler->callback(str_c(str), handler->context);
+		handler->callback(str_c(str), handler->conn);
 		break;
 	case AUTH_CLIENT_RESULT_SUCCESS:
 		if (reply_size > 0) {
@@ -399,7 +399,7 @@
 	str_printfa(str, "FAIL\t%u\treason=", request->id);
 	str_append_tabescaped(str, reason);
 
-	handler->callback(str_c(str), handler->context);
+	handler->callback(str_c(str), handler->conn);
 	auth_request_handler_remove(handler, request);
 }
 
@@ -599,7 +599,7 @@
 	if (request == NULL) {
 		const char *reply = t_strdup_printf(
 			"FAIL\t%u\treason=Authentication request timed out", id);
-		handler->callback(reply, handler->context);
+		handler->callback(reply, handler->conn);
 		return TRUE;
 	}
 
--- a/src/auth/auth-request-handler.h	Fri Mar 11 18:37:43 2016 +1300
+++ b/src/auth/auth-request-handler.h	Fri Mar 11 18:43:57 2016 +1300
@@ -2,6 +2,7 @@
 #define AUTH_REQUEST_HANDLER_H
 
 struct auth_request;
+struct auth_client_connection;
 struct auth_master_connection;
 struct auth_stream_reply;
 
@@ -12,18 +13,14 @@
 };
 
 typedef void
-auth_request_callback_t(const char *reply, void *context);
+auth_client_request_callback_t(const char *reply, struct auth_client_connection *conn);
+typedef void
+auth_master_request_callback_t(const char *reply, struct auth_master_connection *conn);
 
 struct auth_request_handler *
-auth_request_handler_create(bool token_auth, auth_request_callback_t *callback,
-			    void *context, auth_request_callback_t *master_callback);
-#define auth_request_handler_create(token_auth, callback, context, master_callback)\
-	  auth_request_handler_create(token_auth, \
-		(auth_request_callback_t *)callback, \
-		(void *)((char*)context + \
-			CALLBACK_TYPECHECK(callback, void (*)( \
-				const char *, typeof(context)))), \
-		master_callback)
+auth_request_handler_create(bool token_auth, auth_client_request_callback_t *callback,
+			    struct auth_client_connection *conn,
+			    auth_master_request_callback_t *master_callback);
 
 void auth_request_handler_destroy(struct auth_request_handler **handler);
 void auth_request_handler_unref(struct auth_request_handler **handler);