dovecot-2.2: lmtp: If verbose_proctitle=yes, update the process ...

dovecot at dovecot.org dovecot at dovecot.org
Sat Feb 16 18:57:45 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/63117ab893dc
changeset: 15806:63117ab893dc
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Feb 05 16:48:29 2013 +0200
description:
lmtp: If verbose_proctitle=yes, update the process state in the title.

diffstat:

 src/lmtp/client.c   |  22 ++++++++++++++++++++--
 src/lmtp/client.h   |   2 ++
 src/lmtp/commands.c |   8 ++++----
 3 files changed, 26 insertions(+), 6 deletions(-)

diffs (132 lines):

diff -r 443ff272317f -r 63117ab893dc src/lmtp/client.c
--- a/src/lmtp/client.c	Mon Feb 04 17:06:40 2013 +0200
+++ b/src/lmtp/client.c	Tue Feb 05 16:48:29 2013 +0200
@@ -8,6 +8,7 @@
 #include "istream.h"
 #include "ostream.h"
 #include "hostpid.h"
+#include "process-title.h"
 #include "var-expand.h"
 #include "settings-parser.h"
 #include "master-service.h"
@@ -31,6 +32,20 @@
 static struct client *clients = NULL;
 unsigned int clients_count = 0;
 
+void client_state_set(struct client *client, const char *name)
+{
+	client->state.name = name;
+
+	if (!client->service_set->verbose_proctitle)
+		return;
+	if (clients_count == 0)
+		process_title_set("[idling]");
+	else if (clients_count > 1)
+		process_title_set(t_strdup_printf("[%u clients]", clients_count));
+	else
+		process_title_set(t_strdup_printf("[%s]", client->state.name));
+}
+
 static void client_idle_timeout(struct client *client)
 {
 	client_destroy(client,
@@ -156,6 +171,7 @@
 	lmtp_settings_dup(set_parser, client->pool, &lmtp_set, &lda_set);
 	settings_var_expand(&lmtp_setting_parser_info, lmtp_set, client->pool,
 		mail_storage_service_get_var_expand_table(storage_service, &input));
+	client->service_set = master_service_settings_get(master_service);
 	client->lmtp_set = lmtp_set;
 	client->set = lda_set;
 }
@@ -219,7 +235,6 @@
 	client_io_reset(client);
 	client->state_pool = pool_alloconly_create("client state", 4096);
 	client->state.mail_data_fd = -1;
-	client->state.name = "banner";
 	client_read_settings(client);
 	client_raw_user_create(client);
 	client_generate_session_id(client);
@@ -229,6 +244,7 @@
 	DLLIST_PREPEND(&clients, client);
 	clients_count++;
 
+	client_state_set(client, "banner");
 	client_send_line(client, "220 %s %s", client->my_domain,
 			 client->lmtp_set->login_greeting);
 	i_info("Connect from %s", client_remote_id(client));
@@ -243,6 +259,8 @@
 	clients_count--;
 	DLLIST_REMOVE(&clients, client);
 
+	client_state_set(client, "destroyed");
+
 	if (client->raw_mail_user != NULL)
 		mail_user_unref(&client->raw_mail_user);
 	if (client->proxy != NULL)
@@ -326,7 +344,7 @@
 	client->state.mail_data_fd = -1;
 
 	client_generate_session_id(client);
-	client->state.name = "reset";
+	client_state_set(client, "reset");
 }
 
 void client_send_line(struct client *client, const char *fmt, ...)
diff -r 443ff272317f -r 63117ab893dc src/lmtp/client.h
--- a/src/lmtp/client.h	Mon Feb 04 17:06:40 2013 +0200
+++ b/src/lmtp/client.h	Tue Feb 05 16:48:29 2013 +0200
@@ -43,6 +43,7 @@
 	const struct setting_parser_info *user_set_info;
 	const struct lda_settings *set;
 	const struct lmtp_settings *lmtp_set;
+	const struct master_service_settings *service_set;
 	int fd_in, fd_out;
 	struct io *io;
 	struct istream *input;
@@ -76,6 +77,7 @@
 		       const char *reason);
 void client_io_reset(struct client *client);
 void client_state_reset(struct client *client);
+void client_state_set(struct client *client, const char *name);
 
 void client_input_handle(struct client *client);
 int client_input_read(struct client *client);
diff -r 443ff272317f -r 63117ab893dc src/lmtp/commands.c
--- a/src/lmtp/commands.c	Mon Feb 04 17:06:40 2013 +0200
+++ b/src/lmtp/commands.c	Tue Feb 05 16:48:29 2013 +0200
@@ -74,7 +74,7 @@
 
 	i_free(client->lhlo);
 	client->lhlo = i_strdup(str_c(domain));
-	client->state.name = "LHLO";
+	client_state_set(client, "LHLO");
 	return 0;
 }
 
@@ -143,7 +143,7 @@
 	client->state.mail_from = p_strdup(client->state_pool, addr);
 	p_array_init(&client->state.rcpt_to, client->state_pool, 64);
 	client_send_line(client, "250 2.1.0 OK");
-	client->state.name = "MAIL FROM";
+	client_state_set(client, "MAIL FROM");
 	return 0;
 }
 
@@ -488,7 +488,7 @@
 	const char *error = NULL;
 	int ret = 0;
 
-	client->state.name = "RCPT TO";
+	client_state_set(client, "RCPT TO");
 
 	if (client->state.mail_from == NULL) {
 		client_send_line(client, "503 5.5.1 MAIL needed first");
@@ -1014,7 +1014,7 @@
 	client_send_line(client, "354 OK");
 
 	io_remove(&client->io);
-	client->state.name = "DATA";
+	client_state_set(client, "DATA");
 	client->io = io_add(client->fd_in, IO_READ, client_input_data, client);
 	client_input_data_handle(client);
 	return -1;


More information about the dovecot-cvs mailing list