diff --git a/src/imap/main.c b/src/imap/main.c
index ab8d3b1..656b08a 100644
--- a/src/imap/main.c
+++ b/src/imap/main.c
@@ -368,7 +368,7 @@ int main(int argc, char *argv[])
 	enum master_service_flags service_flags = 0;
 	enum mail_storage_service_flags storage_service_flags =
 		MAIL_STORAGE_SERVICE_FLAG_AUTOEXPUNGE;
-	const char *username = NULL;
+	const char *username = NULL, *auth_socket_path = "auth-master";
 	int c;
 
 	memset(&login_set, 0, sizeof(login_set));
@@ -392,7 +392,7 @@ int main(int argc, char *argv[])
 	}
 
 	master_service = master_service_init("imap", service_flags,
-					     &argc, &argv, "Dt:u:");
+					     &argc, &argv, "Dt:S:u:");
 	while ((c = master_getopt(master_service)) > 0) {
 		switch (c) {
 		case 't':
@@ -405,6 +405,9 @@ int main(int argc, char *argv[])
 				MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP;
 			username = optarg;
 			break;
+		case 'S':
+			auth_socket_path = optarg;
+			break;
 		case 'D':
 			imap_debug = TRUE;
 			break;
@@ -435,7 +438,7 @@ int main(int argc, char *argv[])
 			main_stdio_run(username);
 		} T_END;
 	} else T_BEGIN {
-		login_set.auth_socket_path = t_abspath("auth-master");
+		login_set.auth_socket_path = t_abspath(auth_socket_path);
 		if (argv[optind] != NULL) {
 			login_set.postlogin_socket_path =
 				t_abspath(argv[optind]);
diff --git a/src/login-common/main.c b/src/login-common/main.c
index d229e5c..24e322c 100644
--- a/src/login-common/main.c
+++ b/src/login-common/main.c
@@ -51,6 +51,7 @@ unsigned int login_source_ips_idx, login_source_ips_count;
 
 static struct module *modules;
 static struct timeout *auth_client_to;
+static const char *post_login_socket;
 static bool shutting_down = FALSE;
 static bool ssl_connections = FALSE;
 static bool auth_connected_once = FALSE;
@@ -403,7 +404,7 @@ static void main_init(const char *login_socket)
 	auth_client = auth_client_init(login_socket, (unsigned int)getpid(),
 				       FALSE);
         auth_client_set_connect_notify(auth_client, auth_connect_notify, NULL);
-	master_auth = master_auth_init(master_service, login_binary->protocol);
+	master_auth = master_auth_init(master_service, post_login_socket);
 
 	login_binary->init();
 	login_proxy_init("proxy-notify");
@@ -441,10 +442,11 @@ int login_binary_run(const struct login_binary *binary,
 	login_binary = binary;
 	login_socket = binary->default_login_socket != NULL ?
 		binary->default_login_socket : LOGIN_DEFAULT_SOCKET;
+	post_login_socket = binary->protocol;
 
 	master_service = master_service_init(login_binary->process_name,
 					     service_flags, &argc, &argv,
-					     "DR:S");
+					     "DP:R:S");
 	master_service_init_log(master_service, t_strconcat(
 		login_binary->process_name, ": ", NULL));
 
@@ -453,6 +455,9 @@ int login_binary_run(const struct login_binary *binary,
 		case 'D':
 			login_debug = TRUE;
 			break;
+		case 'P':
+			post_login_socket = optarg;
+			break;
 		case 'R':
 			login_rawlog_dir = optarg;
 			break;
