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.3.0.rc1~3043 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c46d97e6a26a5bacb40a1d817407b94ae3860bdd;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 806e662c42..1ba81bfe75 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 9ba77a88a3..3e6e50906e 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), @@ -83,6 +84,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 69e60d8948..7adb8e0931 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 19988c8134..bc91f85076 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;