dovecot-2.2: lib-auth: Don't crash in auth_master_user_list_*() ...

dovecot at dovecot.org dovecot at dovecot.org
Tue Jul 30 13:09:57 EEST 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/0cab916b28c6
changeset: 16623:0cab916b28c6
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Jul 30 13:09:52 2013 +0300
description:
lib-auth: Don't crash in auth_master_user_list_*() if socket can't be connected to.

diffstat:

 src/lib-auth/auth-master.c |  19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diffs (43 lines):

diff -r a6736e42301e -r 0cab916b28c6 src/lib-auth/auth-master.c
--- a/src/lib-auth/auth-master.c	Mon Jul 29 23:22:46 2013 +0300
+++ b/src/lib-auth/auth-master.c	Tue Jul 30 13:09:52 2013 +0300
@@ -352,13 +352,15 @@
 		io_loop_set_current(conn->prev_ioloop);
 		lib_signals_reset_ioloop();
 	}
-	io_loop_set_current(conn->ioloop);
+	if (conn->ioloop != NULL) {
+		io_loop_set_current(conn->ioloop);
 
-	timeout_remove(&conn->to);
-	io_remove(&conn->io);
-	i_stream_unref(&conn->input);
-	o_stream_unref(&conn->output);
-	io_loop_destroy(&conn->ioloop);
+		timeout_remove(&conn->to);
+		io_remove(&conn->io);
+		i_stream_unref(&conn->input);
+		o_stream_unref(&conn->output);
+		io_loop_destroy(&conn->ioloop);
+	}
 
 	if ((conn->flags & AUTH_MASTER_FLAG_NO_IDLE_TIMEOUT) == 0) {
 		if (conn->prev_ioloop == NULL)
@@ -685,13 +687,16 @@
 {
 	const char *line;
 
+	if (ctx->failed)
+		return NULL;
+
 	/* try to read already buffered input */
 	line = i_stream_next_line(ctx->conn->input);
 	if (line != NULL) {
 		T_BEGIN {
 			auth_handle_line(ctx->conn, line);
 		} T_END;
-	} else if (!ctx->failed) {
+	} else {
 		/* wait for more data */
 		io_loop_run(ctx->conn->ioloop);
 	}


More information about the dovecot-cvs mailing list