diff src/director/login-connection.c @ 11714:1683324ac632 HEAD

director: Added support for LMTP proxying.
author Timo Sirainen <tss@iki.fi>
date Fri, 02 Jul 2010 18:47:43 +0100
parents c82a7922fca9
children 447bce266022
line wrap: on
line diff
--- a/src/director/login-connection.c	Fri Jul 02 17:00:21 2010 +0000
+++ b/src/director/login-connection.c	Fri Jul 02 18:47:43 2010 +0100
@@ -25,6 +25,7 @@
 	struct director *dir;
 
 	unsigned int destroyed:1;
+	unsigned int userdb:1;
 };
 
 struct login_host_request {
@@ -100,7 +101,7 @@
 {
 	struct login_connection *conn = context;
 	struct login_host_request *request;
-	const char *const *args, *username = NULL;
+	const char *const *args, *line_params, *username = NULL;
 	bool proxy = FALSE, host = FALSE;
 
 	if (line == NULL) {
@@ -108,13 +109,17 @@
 		login_connection_deinit(&conn);
 		return;
 	}
-	if (strncmp(line, "OK\t", 3) != 0) {
+	if (!conn->userdb && strncmp(line, "OK\t", 3) == 0)
+		line_params = line + 3;
+	else if (conn->userdb && strncmp(line, "PASS\t", 5) == 0)
+		line_params = line + 5;
+	else {
 		login_connection_send_line(conn, line);
 		return;
 	}
 
 	/* OK <id> [<parameters>] */
-	args = t_strsplit(line + 3, "\t");
+	args = t_strsplit(line_params, "\t");
 	if (*args != NULL) {
 		/* we should always get here, but in case we don't just
 		   forward as-is and let login process handle the error. */
@@ -157,7 +162,7 @@
 
 struct login_connection *
 login_connection_init(struct director *dir, int fd,
-		      struct auth_connection *auth)
+		      struct auth_connection *auth, bool userdb)
 {
 	struct login_connection *conn;
 
@@ -168,6 +173,7 @@
 	conn->dir = dir;
 	conn->output = o_stream_create_fd(conn->fd, (size_t)-1, FALSE);
 	conn->io = io_add(conn->fd, IO_READ, login_connection_input, conn);
+	conn->userdb = userdb;
 
 	auth_connection_set_callback(conn->auth, auth_input_line, conn);
 	DLLIST_PREPEND(&login_connections, conn);