Mercurial > dovecot > core-2.2
changeset 10193:02e852b2c2c3 HEAD
pop3: Added support for verbose_proctitle=yes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 26 Oct 2009 19:53:48 -0400 |
parents | 585bceaf98bb |
children | 40d8df2b4111 |
files | src/pop3/main.c src/pop3/pop3-client.c src/pop3/pop3-client.h src/pop3/pop3-common.h src/pop3/pop3-settings.c src/pop3/pop3-settings.h |
diffstat | 6 files changed, 48 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/pop3/main.c Mon Oct 26 19:49:22 2009 -0400 +++ b/src/pop3/main.c Mon Oct 26 19:53:48 2009 -0400 @@ -6,11 +6,14 @@ #include "istream.h" #include "ostream.h" #include "base64.h" +#include "str.h" +#include "process-title.h" #include "restrict-access.h" #include "master-service.h" #include "master-login.h" #include "master-interface.h" #include "var-expand.h" +#include "mail-user.h" #include "mail-storage-service.h" #include <stdio.h> @@ -20,11 +23,41 @@ #define IS_STANDALONE() \ (getenv(MASTER_UID_ENV) == NULL) +static bool verbose_proctitle = FALSE; static struct mail_storage_service_ctx *storage_service; static struct master_login *master_login = NULL; void (*hook_client_created)(struct client **client) = NULL; +void pop3_refresh_proctitle(void) +{ + struct client *client; + string_t *title = t_str_new(128); + + if (!verbose_proctitle) + return; + + str_append_c(title, '['); + switch (pop3_client_count) { + case 0: + str_append(title, "idling"); + break; + case 1: + client = pop3_clients; + str_append(title, client->user->username); + if (client->user->remote_ip != NULL) { + str_append_c(title, ' '); + str_append(title, net_ip2addr(client->user->remote_ip)); + } + break; + default: + str_printfa(title, "%u connections", pop3_client_count); + break; + } + str_append_c(title, ']'); + process_title_set(str_c(title)); +} + static void pop3_die(void) { /* do nothing. pop3 connections typically die pretty quick anyway. */ @@ -65,6 +98,9 @@ restrict_access_allow_coredumps(TRUE); set = mail_storage_service_user_get_set(user)[1]; + if (set->verbose_proctitle) + verbose_proctitle = TRUE; + client = client_create(fd_in, fd_out, mail_user, user, set); T_BEGIN { client_add_input(client, input_buf);
--- a/src/pop3/pop3-client.c Mon Oct 26 19:49:22 2009 -0400 +++ b/src/pop3/pop3-client.c Mon Oct 26 19:53:48 2009 -0400 @@ -37,6 +37,7 @@ #define CLIENT_COMMIT_TIMEOUT_MSECS (10*1000) struct client *pop3_clients; +unsigned int pop3_client_count; static void client_input(struct client *client); static int client_output(struct client *client); @@ -266,9 +267,12 @@ client->anvil_sent = TRUE; } + pop3_client_count++; DLLIST_PREPEND(&pop3_clients, client); if (hook_client_created != NULL) hook_client_created(&client); + + pop3_refresh_proctitle(); return client; } @@ -334,6 +338,7 @@ client->cmd(client); i_assert(client->cmd == NULL); } + pop3_client_count--; DLLIST_REMOVE(&pop3_clients, client); if (client->trans != NULL) { @@ -375,6 +380,7 @@ i_free(client); master_service_client_connection_destroyed(master_service); + pop3_refresh_proctitle(); } void client_disconnect(struct client *client, const char *reason)
--- a/src/pop3/pop3-client.h Mon Oct 26 19:49:22 2009 -0400 +++ b/src/pop3/pop3-client.h Mon Oct 26 19:53:48 2009 -0400 @@ -62,6 +62,7 @@ }; extern struct client *pop3_clients; +extern unsigned int pop3_client_count; /* Create new client with specified input/output handles. socket specifies if the handle is a socket. */
--- a/src/pop3/pop3-common.h Mon Oct 26 19:49:22 2009 -0400 +++ b/src/pop3/pop3-common.h Mon Oct 26 19:53:48 2009 -0400 @@ -14,4 +14,6 @@ extern void (*hook_client_created)(struct client **client); +void pop3_refresh_proctitle(void); + #endif
--- a/src/pop3/pop3-settings.c Mon Oct 26 19:49:22 2009 -0400 +++ b/src/pop3/pop3-settings.c Mon Oct 26 19:53:48 2009 -0400 @@ -60,6 +60,7 @@ static const struct setting_define pop3_setting_defines[] = { DEF(SET_BOOL, mail_debug), + DEF(SET_BOOL, verbose_proctitle), DEF(SET_BOOL, pop3_no_flag_updates), DEF(SET_BOOL, pop3_enable_last), @@ -74,6 +75,7 @@ static const struct pop3_settings pop3_default_settings = { MEMBER(mail_debug) FALSE, + MEMBER(verbose_proctitle) FALSE, MEMBER(pop3_no_flag_updates) FALSE, MEMBER(pop3_enable_last) FALSE,