client->last_input = ioloop_time;
timeout_reset(client->to_idle);
+ client_log_start(client);
switch (i_stream_read(client->input)) {
case -1:
/* disconnected */
client_send_command_error(cmd, "Too long argument.");
cmd->param_error = TRUE;
client_command_free(&cmd);
+ client_log_stop();
return;
}
client_destroy(client, NULL);
else
client_continue_pending_input(client);
+ client_log_stop();
}
/* Returns -1 = error, 0 = need more data, 1 = successful. flags and
return;
}
+ client_log_start(client);
while ((line = i_stream_next_line(client->input)) != NULL) {
if (client->input_skip_line)
client->input_skip_line = FALSE;
break;
}
}
+ client_log_stop();
}
static void idle_client_input(struct cmd_idle_context *ctx)
ctx->sync_pending = TRUE;
else {
ctx->manual_cork = TRUE;
+ client_log_start(client);
idle_sync_now(box, ctx);
if (client->disconnected)
client_destroy(client, NULL);
+ client_log_stop();
}
}
struct client *imap_clients = NULL;
unsigned int imap_client_count = 0;
+static struct mail_user *log_prefix_user = NULL;
+
static void client_idle_timeout(struct client *client)
{
if (client->output_lock == NULL)
if (hook_client_created != NULL)
hook_client_created(&client);
+ log_prefix_user = client->user;
imap_refresh_proctitle();
return client;
}
}
}
+void client_log_start(struct client *client)
+{
+ if (log_prefix_user != NULL &&
+ log_prefix_user == client->user)
+ return;
+
+ mail_user_set_log_prefix(client->user);
+ log_prefix_user = client->user;
+}
+
+void client_log_stop(void)
+{
+ if (imap_client_count == 1) {
+ mail_user_set_log_prefix(imap_clients->user);
+ log_prefix_user = imap_clients->user;
+ } else {
+ master_service_init_log(master_service, "imap: ");
+ log_prefix_user = NULL;
+ }
+}
+
static const char *client_stats(struct client *client)
{
static struct var_expand_table static_tab[] = {
i_assert(!client->destroyed);
client->destroyed = TRUE;
+ client_log_start(client);
if (!client->disconnected) {
client->disconnected = TRUE;
if (reason == NULL)
mail_storage_service_user_free(&client->service_user);
pool_unref(&client->pool);
+ client_log_stop();
master_service_client_connection_destroyed(master_service);
imap_refresh_proctitle();
}
if (client->disconnected)
return;
+ client_log_start(client);
i_info("Disconnected: %s %s", reason, client_stats(client));
client->disconnected = TRUE;
(void)o_stream_flush(client->output);
i_assert(client->io != NULL);
+ client_log_start(client);
+
client->last_input = ioloop_time;
timeout_reset(client->to_idle);
client_destroy(client, NULL);
else
client_continue_pending_input(client);
+ client_log_stop();
}
static void client_output_cmd(struct client_command_context *cmd)
i_assert(!client->destroyed);
+ client_log_start(client);
client->last_output = ioloop_time;
timeout_reset(client->to_idle);
if (client->to_idle_output != NULL)
client_destroy(client, NULL);
else
client_continue_pending_input(client);
+ client_log_stop();
return ret;
}
bool client_handle_input(struct client *client);
int client_output(struct client *client);
+void client_log_start(struct client *client);
+void client_log_stop(void);
+
void clients_destroy_all(void);
#endif
struct client *client = cmd->client;
bool finished;
+ client_log_start(client);
o_stream_cork(client->output);
finished = cmd_search_more(cmd);
o_stream_uncork(client->output);
client_destroy(client, NULL);
else
client_continue_pending_input(client);
+ client_log_stop();
}
int cmd_search_parse_return_if_found(struct imap_search_context *ctx,
struct client *pop3_clients;
unsigned int pop3_client_count;
+static struct mail_user *log_prefix_user = NULL;
+
static void client_input(struct client *client);
static int client_output(struct client *client);
+static void client_log_start(struct client *client)
+{
+ if (log_prefix_user != NULL &&
+ log_prefix_user == client->user)
+ return;
+
+ mail_user_set_log_prefix(client->user);
+ log_prefix_user = client->user;
+}
+
+static void client_log_stop(void)
+{
+ if (pop3_client_count == 1) {
+ mail_user_set_log_prefix(pop3_clients->user);
+ log_prefix_user = pop3_clients->user;
+ } else {
+ master_service_init_log(master_service, "pop3: ");
+ log_prefix_user = NULL;
+ }
+}
+
static void client_commit_timeout(struct client *client)
{
if (client->cmd != NULL) {
if (hook_client_created != NULL)
hook_client_created(&client);
+ log_prefix_user = client->user;
pop3_refresh_proctitle();
return client;
}
if (client->seen_change_count > 0)
client_update_mails(client);
+ client_log_start(client);
if (!client->disconnected) {
if (reason == NULL)
reason = client_get_disconnect_reason(client);
mail_storage_service_user_free(&client->service_user);
i_free(client);
+ client_log_stop();
master_service_client_connection_destroyed(master_service);
pop3_refresh_proctitle();
}
if (client->to_commit != NULL)
timeout_reset(client->to_commit);
+ client_log_start(client);
switch (i_stream_read(client->input)) {
case -1:
/* disconnected */
}
(void)client_handle_input(client);
+ client_log_stop();
}
static int client_output(struct client *client)
{
+ client_log_start(client);
o_stream_cork(client->output);
if (o_stream_flush(client->output) < 0) {
client_destroy(client, NULL);
if (client->cmd != NULL)
client->cmd(client);
+ client_log_stop();
if (client->cmd == NULL) {
if (o_stream_get_buffer_used_size(client->output) <