From: Timo Sirainen Date: Tue, 13 Sep 2016 04:22:03 +0000 (+0300) Subject: imap, pop3: Added rawlog_dir setting to store IMAP/POP3 traffic logs. X-Git-Tag: 2.2.26~270 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e90a0ed00032388ffe15b10c2ebf115355d553d5;p=thirdparty%2Fdovecot%2Fcore.git imap, pop3: Added rawlog_dir setting to store IMAP/POP3 traffic logs. This at least partially replaces the "rawlog" post-login binary. For now the "rawlog" binary supports some parameters, which aren't configurable for rawlog_dir. --- diff --git a/src/imap/imap-client.c b/src/imap/imap-client.c index c95faff875..162bdb869f 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -7,6 +7,7 @@ #include "hostpid.h" #include "net.h" #include "iostream.h" +#include "iostream-rawlog.h" #include "istream.h" #include "ostream.h" #include "time-util.h" @@ -123,6 +124,11 @@ struct client *client_create(int fd_in, int fd_out, const char *session_id, client->notify_count_changes = TRUE; client->notify_flag_changes = TRUE; + if (set->rawlog_dir[0] != '\0') { + (void)iostream_rawlog_create(set->rawlog_dir, &client->input, + &client->output); + } + mail_namespaces_set_storage_callbacks(user->namespaces, &mail_storage_callbacks, client); diff --git a/src/imap/imap-settings.c b/src/imap/imap-settings.c index d3e869cf80..3864ec03cc 100644 --- a/src/imap/imap-settings.c +++ b/src/imap/imap-settings.c @@ -63,6 +63,7 @@ struct service_settings imap_service_settings = { static const struct setting_define imap_setting_defines[] = { DEF(SET_BOOL, verbose_proctitle), + DEF(SET_STR_VARS, rawlog_dir), DEF(SET_SIZE, imap_max_line_length), DEF(SET_TIME, imap_idle_notify_interval), @@ -82,6 +83,7 @@ static const struct setting_define imap_setting_defines[] = { static const struct imap_settings imap_default_settings = { .verbose_proctitle = FALSE, + .rawlog_dir = "", /* RFC-2683 recommends at least 8000 bytes. Some clients however don't break large message sets to multiple commands, so we're pretty diff --git a/src/imap/imap-settings.h b/src/imap/imap-settings.h index e4e70506c3..cfb9dccc58 100644 --- a/src/imap/imap-settings.h +++ b/src/imap/imap-settings.h @@ -15,6 +15,7 @@ enum imap_client_workarounds { struct imap_settings { bool verbose_proctitle; + const char *rawlog_dir; /* imap: */ uoff_t imap_max_line_length; diff --git a/src/pop3/pop3-client.c b/src/pop3/pop3-client.c index 69faff0632..a0a00aa000 100644 --- a/src/pop3/pop3-client.c +++ b/src/pop3/pop3-client.c @@ -7,6 +7,7 @@ #include "iostream.h" #include "istream.h" #include "ostream.h" +#include "iostream-rawlog.h" #include "crc32.h" #include "str.h" #include "llist.h" @@ -400,6 +401,11 @@ int client_create(int fd_in, int fd_out, const char *session_id, o_stream_set_no_error_handling(client->output, TRUE); o_stream_set_flush_callback(client->output, client_output, client); + if (set->rawlog_dir[0] != '\0') { + (void)iostream_rawlog_create(set->rawlog_dir, &client->input, + &client->output); + } + p_array_init(&client->module_contexts, client->pool, 5); client->io = io_add_istream(client->input, client_input, client); client->last_input = ioloop_time; diff --git a/src/pop3/pop3-settings.c b/src/pop3/pop3-settings.c index f74b9ed0fe..dc3fb921fe 100644 --- a/src/pop3/pop3-settings.c +++ b/src/pop3/pop3-settings.c @@ -60,6 +60,7 @@ struct service_settings pop3_service_settings = { static const struct setting_define pop3_setting_defines[] = { DEF(SET_BOOL, verbose_proctitle), + DEF(SET_STR_VARS, rawlog_dir), DEF(SET_BOOL, pop3_no_flag_updates), DEF(SET_BOOL, pop3_enable_last), @@ -78,6 +79,7 @@ static const struct setting_define pop3_setting_defines[] = { static const struct pop3_settings pop3_default_settings = { .verbose_proctitle = FALSE, + .rawlog_dir = "", .pop3_no_flag_updates = FALSE, .pop3_enable_last = FALSE, diff --git a/src/pop3/pop3-settings.h b/src/pop3/pop3-settings.h index 3ea4a0079d..cf50f980d5 100644 --- a/src/pop3/pop3-settings.h +++ b/src/pop3/pop3-settings.h @@ -16,6 +16,7 @@ enum pop3_delete_type { struct pop3_settings { bool verbose_proctitle; + const char *rawlog_dir; /* pop3: */ bool pop3_no_flag_updates;