]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
*-login: Add client_vfuncs.send_raw_data()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 21 Apr 2017 10:35:33 +0000 (13:35 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 21 Apr 2017 10:44:01 +0000 (13:44 +0300)
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
src/imap-urlauth/imap-urlauth-login.c
src/login-common/client-common.c
src/login-common/client-common.h
src/pop3-login/client.c

index 224bf61c191fb0d9d4148cec5bfc76f0b7a2628a..3bed536d739f930f15915e96297fb0dfd4cfbb35 100644 (file)
@@ -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 = {
index 980628e0c75df5c8a80912d652c4c67e314fbc8f..14eab52d4eba873377f8b86b74a3eca1a0c401bc 100644 (file)
@@ -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 = {
index 546d49ff4ef397dadef2525387568e922361cce9..c13d5c16f06a80a638541b9fe80f785ccfa9f0b5 100644 (file)
@@ -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));
index f93b2e5f3efd0a96560957bdd3c00bb4c0a68184..d919706b2f8786dfc25c2d892863a0811899e20e 100644 (file)
@@ -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);
index 10a855d10123233ebdb9ed5dcbaaa41ca6bf4860..a285681ff8729061f6e415883797971b643c6185 100644 (file)
@@ -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 = {