changeset 19384:605dd1749578

*-login: Added postlogin_socket=path passdb extra field. By default e.g. "imap" or "pop3" is the post-login socket, but this can override it. This could be used for example for per-user debugging (e.g. setting executable to be run via strace or valgrind).
author Timo Sirainen <tss@iki.fi>
date Tue, 17 Nov 2015 17:26:56 +0200
parents 8fa5d235065b
children 392b4cd7a47a
files src/login-common/client-common-auth.c src/login-common/client-common.h src/login-common/sasl-server.c
diffstat 3 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/login-common/client-common-auth.c	Tue Nov 17 17:23:31 2015 +0200
+++ b/src/login-common/client-common-auth.c	Tue Nov 17 17:26:56 2015 +0200
@@ -133,8 +133,9 @@
 				PROXY_SSL_FLAG_STARTTLS;
 			if (strcmp(value, "any-cert") == 0)
 				reply_r->ssl_flags |= PROXY_SSL_FLAG_ANY_CERT;
-		} else if (strcmp(key, "user") == 0) {
-			/* already handled in login-common */
+		} else if (strcmp(key, "user") == 0 ||
+			   strcmp(key, "postlogin_socket") == 0) {
+			/* already handled in sasl-server.c */
 		} else if (client->set->auth_debug)
 			i_debug("Ignoring unknown passdb extra field: %s", key);
 	}
--- a/src/login-common/client-common.h	Tue Nov 17 17:23:31 2015 +0200
+++ b/src/login-common/client-common.h	Tue Nov 17 17:26:56 2015 +0200
@@ -113,7 +113,7 @@
 	struct ssl_proxy *ssl_proxy;
 	const struct login_settings *set;
 	const struct master_service_ssl_settings *ssl_set;
-	const char *session_id, *listener_name;
+	const char *session_id, *listener_name, *postlogin_socket_path;
 
 	int fd;
 	struct istream *input;
--- a/src/login-common/sasl-server.c	Tue Nov 17 17:23:31 2015 +0200
+++ b/src/login-common/sasl-server.c	Tue Nov 17 17:26:56 2015 +0200
@@ -155,6 +155,7 @@
 
 	memset(&params, 0, sizeof(params));
 	params.client_fd = client->fd;
+	params.socket_path = client->postlogin_socket_path;
 	params.request = req;
 	params.data = buf->data;
 	master_auth_request_full(master_auth, &params, master_auth_callback,
@@ -246,6 +247,7 @@
 		client->auth_request = NULL;
 		client->auth_successes++;
 		client->auth_passdb_args = p_strarray_dup(client->pool, args);
+		client->postlogin_socket_path = NULL;
 
 		nologin = FALSE;
 		for (i = 0; args[i] != NULL; i++) {
@@ -261,6 +263,9 @@
 				i_free(client->virtual_auth_user);
 				client->virtual_auth_user =
 					i_strdup(args[i] + 10);
+			} else if (strncmp(args[i], "postlogin_socket=", 17) == 0) {
+				client->postlogin_socket_path =
+					p_strdup(client->pool, args[i] + 17);
 			} else if (strcmp(args[i], "nologin") == 0 ||
 				   strcmp(args[i], "proxy") == 0) {
 				/* user can't login */