diff --git a/src/managesieve/main.c b/src/managesieve/main.c
index e8bcc84c100339ca617f7b3011c3f36944e1ed88..64985567df784e6b4e050ae959d0a8e2d7057100 100644
--- a/src/managesieve/main.c
+++ b/src/managesieve/main.c
@@ -225,11 +225,15 @@ int main(int argc, char *argv[])
 		&managesieve_setting_parser_info,
 		NULL
 	};
+	struct master_login_settings login_set;
 	enum master_service_flags service_flags = 0;
 	enum mail_storage_service_flags storage_service_flags = 0;
-	const char *postlogin_socket_path, *username = NULL;
+	const char *username = NULL;
 	int c;
 
+	memset(&login_set, 0, sizeof(login_set));
+	login_set.postlogin_timeout_secs = MASTER_POSTLOGIN_TIMEOUT_DEFAULT;
+
 	if (IS_STANDALONE() && getuid() == 0 &&
 	    net_getpeername(1, NULL, NULL) == 0) {
 		printf("NO \"managesieve binary must not be started from "
@@ -247,9 +251,14 @@ int main(int argc, char *argv[])
 	}
 
 	master_service = master_service_init("managesieve", service_flags,
-					     &argc, &argv, "u:");
+					     &argc, &argv, "t:u:");
 	while ((c = master_getopt(master_service)) > 0) {
 		switch (c) {
+		case 't':
+			if (str_to_uint(optarg, &login_set.postlogin_timeout_secs) < 0 ||
+			    login_set.postlogin_timeout_secs == 0)
+				i_fatal("Invalid -t parameter: %s", optarg);
+			break;
 		case 'u':
 			storage_service_flags |=
 				MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP;
@@ -259,8 +268,12 @@ int main(int argc, char *argv[])
 			return FATAL_DEFAULT;
 		}
 	}
-	postlogin_socket_path = argv[optind] == NULL ? NULL :
-		t_abspath(argv[optind]);
+
+	login_set.auth_socket_path = t_abspath("auth-master");
+	if (argv[optind] != NULL)
+		login_set.postlogin_socket_path = t_abspath(argv[optind]);
+	login_set.callback = login_client_connected;
+	login_set.failure_callback = login_client_failed;
 
 	master_service_init_finish(master_service);
 	master_service_set_die_callback(master_service, managesieve_die);
@@ -287,11 +300,7 @@ int main(int argc, char *argv[])
 			main_stdio_run(username);
 		} T_END;
 	} else {
-		master_login = master_login_init(master_service,
-						 t_abspath("auth-master"),
-						 postlogin_socket_path,
-						 login_client_connected,
-						 login_client_failed);
+		master_login = master_login_init(master_service, &login_set);
 		io_loop_set_running(current_ioloop);
 	}