changeset 21970:866421afc7b7

*-login: Add client_vfuncs.send_raw_data() This allows login plugins to hook into seeing all the data that is sent to the imap/pop3 client.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 21 Apr 2017 13:35:33 +0300
parents 60ee14b2fa4b
children 486b1b94f39c
files src/imap-login/imap-login-client.c src/imap-urlauth/imap-urlauth-login.c src/login-common/client-common.c src/login-common/client-common.h src/pop3-login/client.c
diffstat 5 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap-login/imap-login-client.c	Fri Apr 21 13:27:18 2017 +0300
+++ b/src/imap-login/imap-login-client.c	Fri Apr 21 13:35:33 2017 +0300
@@ -757,6 +757,7 @@
 	imap_proxy_parse_line,
 	imap_proxy_error,
 	imap_proxy_get_state,
+	client_common_send_raw_data,
 };
 
 static const struct login_binary imap_login_binary = {
--- a/src/imap-urlauth/imap-urlauth-login.c	Fri Apr 21 13:27:18 2017 +0300
+++ b/src/imap-urlauth/imap-urlauth-login.c	Fri Apr 21 13:35:33 2017 +0300
@@ -174,6 +174,7 @@
 	NULL,
 	NULL,
 	NULL,
+	client_common_send_raw_data,
 };
 
 static const struct login_binary imap_urlauth_login_binary = {
--- a/src/login-common/client-common.c	Fri Apr 21 13:27:18 2017 +0300
+++ b/src/login-common/client-common.c	Fri Apr 21 13:35:33 2017 +0300
@@ -856,7 +856,8 @@
 		client->v.notify_status(client, bad, text);
 }
 
-void client_send_raw_data(struct client *client, const void *data, size_t size)
+void client_common_send_raw_data(struct client *client,
+				 const void *data, size_t size)
 {
 	ssize_t ret;
 
@@ -870,6 +871,15 @@
 	}
 }
 
+void client_send_raw_data(struct client *client, const void *data, size_t size)
+{
+	/* FIXME: NULL check is only for backwards compatibility - remove */
+	if (client->v.send_raw_data != NULL)
+		client->v.send_raw_data(client, data, size);
+	else
+		client_common_send_raw_data(client, data, size);
+}
+
 void client_send_raw(struct client *client, const char *data)
 {
 	client_send_raw_data(client, data, strlen(data));
--- a/src/login-common/client-common.h	Fri Apr 21 13:27:18 2017 +0300
+++ b/src/login-common/client-common.h	Fri Apr 21 13:35:33 2017 +0300
@@ -103,6 +103,8 @@
 	int (*proxy_parse_line)(struct client *client, const char *line);
 	void (*proxy_error)(struct client *client, const char *text);
 	const char *(*proxy_get_state)(struct client *client);
+	void (*send_raw_data)(struct client *client,
+			      const void *data, size_t size);
 };
 
 struct client {
@@ -254,6 +256,8 @@
 
 void client_send_raw_data(struct client *client, const void *data, size_t size);
 void client_send_raw(struct client *client, const char *data);
+void client_common_send_raw_data(struct client *client,
+				 const void *data, size_t size);
 
 void client_set_auth_waiting(struct client *client);
 void client_auth_send_challenge(struct client *client, const char *data);
--- a/src/pop3-login/client.c	Fri Apr 21 13:27:18 2017 +0300
+++ b/src/pop3-login/client.c	Fri Apr 21 13:35:33 2017 +0300
@@ -323,6 +323,7 @@
 	pop3_proxy_parse_line,
 	pop3_proxy_error,
 	pop3_proxy_get_state,
+	client_common_send_raw_data,
 };
 
 static const struct login_binary pop3_login_binary = {