changeset 2268:5bd7fa814d7f HEAD

If we're not connected to all auth sockets, wait before sending greeting so APOP challenge gets sent.
author Timo Sirainen <tss@iki.fi>
date Sat, 03 Jul 2004 12:44:21 +0300
parents d2e186f716d8
children 945403a685f9
files src/pop3-login/client.c src/pop3-login/client.h
diffstat 2 files changed, 17 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/pop3-login/client.c	Sat Jul 03 01:03:36 2004 +0300
+++ b/src/pop3-login/client.c	Sat Jul 03 12:44:21 2004 +0300
@@ -163,13 +163,6 @@
 	if (!client_read(client))
 		return;
 
-	if (!auth_client_is_connected(auth_client)) {
-		/* we're not yet connected to auth process -
-		   don't allow any commands */
-		client->input_blocked = TRUE;
-		return;
-	}
-
 	client_ref(client);
 
 	o_stream_cork(client->output);
@@ -236,8 +229,6 @@
 {
 	struct auth_connect_id id;
 
-	/* FIXME: breaks if we're not connected! */
-
 	if (!auth_client_reserve_connection(auth_client, "APOP", &id))
 		return NULL;
 
@@ -245,6 +236,16 @@
 			       dec2str(ioloop_time), my_hostname);
 }
 
+static void client_auth_ready(struct pop3_client *client)
+{
+	client->common.io =
+		io_add(client->common.fd, IO_READ, client_input, client);
+
+	client->apop_challenge = get_apop_challenge();
+	client_send_line(client, t_strconcat("+OK " PACKAGE " ready.",
+					     client->apop_challenge, NULL));
+}
+
 struct client *client_create(int fd, int ssl, const struct ip_addr *local_ip,
 			     const struct ip_addr *ip)
 {
@@ -274,7 +275,6 @@
 	client->common.local_ip = *local_ip;
 	client->common.ip = *ip;
 	client->common.fd = fd;
-	client->common.io = io_add(fd, IO_READ, client_input, client);
 	client_open_streams(client, fd);
 
 	client->last_input = ioloop_time;
@@ -282,9 +282,9 @@
 
 	main_ref();
 
-	client->apop_challenge = get_apop_challenge();
-	client_send_line(client, t_strconcat("+OK " PACKAGE " ready.",
-					     client->apop_challenge, NULL));
+	client->auth_connected = auth_client_is_connected(auth_client);
+	if (client->auth_connected)
+		client_auth_ready(client);
 	client_set_title(client);
 	return &client->common;
 }
@@ -396,9 +396,9 @@
 	while (hash_iterate(iter, &key, &value)) {
 		struct pop3_client *client = key;
 
-		if (client->input_blocked) {
-			client->input_blocked = FALSE;
-			client_input(client);
+		if (!client->auth_connected) {
+			client->auth_connected = TRUE;
+			client_auth_ready(client);
 		}
 	}
 	hash_iterate_deinit(iter);
--- a/src/pop3-login/client.h	Sat Jul 03 01:03:36 2004 +0300
+++ b/src/pop3-login/client.h	Sat Jul 03 12:44:21 2004 +0300
@@ -25,7 +25,7 @@
 
 	unsigned int tls:1;
 	unsigned int secured:1;
-	unsigned int input_blocked:1;
+	unsigned int auth_connected:1;
 	unsigned int destroyed:1;
 };