From ae797f3368ebb86e7786ca25d7c9c703f672b9f5 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 21 Apr 2017 13:35:33 +0300 Subject: [PATCH] *-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. --- src/imap-login/imap-login-client.c | 1 + src/imap-urlauth/imap-urlauth-login.c | 1 + src/login-common/client-common.c | 12 +++++++++++- src/login-common/client-common.h | 4 ++++ src/pop3-login/client.c | 1 + 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/imap-login/imap-login-client.c b/src/imap-login/imap-login-client.c index 224bf61c19..3bed536d73 100644 --- a/src/imap-login/imap-login-client.c +++ b/src/imap-login/imap-login-client.c @@ -775,6 +775,7 @@ static struct client_vfuncs imap_client_vfuncs = { imap_proxy_parse_line, imap_proxy_error, imap_proxy_get_state, + client_common_send_raw_data, }; static const struct login_binary imap_login_binary = { diff --git a/src/imap-urlauth/imap-urlauth-login.c b/src/imap-urlauth/imap-urlauth-login.c index 980628e0c7..14eab52d4e 100644 --- a/src/imap-urlauth/imap-urlauth-login.c +++ b/src/imap-urlauth/imap-urlauth-login.c @@ -174,6 +174,7 @@ static struct client_vfuncs imap_urlauth_vfuncs = { NULL, NULL, NULL, + client_common_send_raw_data, }; static const struct login_binary imap_urlauth_login_binary = { diff --git a/src/login-common/client-common.c b/src/login-common/client-common.c index 546d49ff4e..c13d5c16f0 100644 --- a/src/login-common/client-common.c +++ b/src/login-common/client-common.c @@ -883,7 +883,8 @@ void client_notify_status(struct client *client, bool bad, const char *text) 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; @@ -897,6 +898,15 @@ void client_send_raw_data(struct client *client, const void *data, size_t size) } } +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)); diff --git a/src/login-common/client-common.h b/src/login-common/client-common.h index f93b2e5f3e..d919706b2f 100644 --- a/src/login-common/client-common.h +++ b/src/login-common/client-common.h @@ -120,6 +120,8 @@ struct client_vfuncs { 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 { @@ -268,6 +270,8 @@ void client_notify_disconnect(struct client *client, 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); diff --git a/src/pop3-login/client.c b/src/pop3-login/client.c index 10a855d101..a285681ff8 100644 --- a/src/pop3-login/client.c +++ b/src/pop3-login/client.c @@ -323,6 +323,7 @@ static struct client_vfuncs pop3_client_vfuncs = { pop3_proxy_parse_line, pop3_proxy_error, pop3_proxy_get_state, + client_common_send_raw_data, }; static const struct login_binary pop3_login_binary = {