From: Timo Sirainen Date: Thu, 9 Apr 2020 19:26:57 +0000 (+0300) Subject: login-common: Split off args_parse_user() X-Git-Tag: 2.3.11.2~224 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a64d326b699309b2fe65aa3534a75c3b07392b1b;p=thirdparty%2Fdovecot%2Fcore.git login-common: Split off args_parse_user() --- diff --git a/src/login-common/sasl-server.c b/src/login-common/sasl-server.c index 7eedbfc1a9..edbec36471 100644 --- a/src/login-common/sasl-server.c +++ b/src/login-common/sasl-server.c @@ -289,6 +289,25 @@ sasl_server_check_login(struct client *client) return TRUE; } +static bool args_parse_user(struct client *client, const char *arg) +{ + if (str_begins(arg, "user=")) { + i_free(client->virtual_user); + i_free_and_null(client->virtual_user_orig); + i_free_and_null(client->virtual_auth_user); + client->virtual_user = i_strdup(arg + 5); + } else if (str_begins(arg, "original_user=")) { + i_free(client->virtual_user_orig); + client->virtual_user_orig = i_strdup(arg + 14); + } else if (str_begins(arg, "auth_user=")) { + i_free(client->virtual_auth_user); + client->virtual_auth_user = i_strdup(arg + 10); + } else { + return FALSE; + } + return TRUE; +} + static void authenticate_callback(struct auth_client_request *request, enum auth_request_status status, const char *data_base64, @@ -321,19 +340,9 @@ authenticate_callback(struct auth_client_request *request, nologin = FALSE; for (i = 0; args[i] != NULL; i++) { - if (str_begins(args[i], "user=")) { - i_free(client->virtual_user); - i_free_and_null(client->virtual_user_orig); - i_free_and_null(client->virtual_auth_user); - client->virtual_user = i_strdup(args[i] + 5); - } else if (str_begins(args[i], "original_user=")) { - i_free(client->virtual_user_orig); - client->virtual_user_orig = i_strdup(args[i] + 14); - } else if (str_begins(args[i], "auth_user=")) { - i_free(client->virtual_auth_user); - client->virtual_auth_user = - i_strdup(args[i] + 10); - } else if (str_begins(args[i], "postlogin_socket=")) { + if (args_parse_user(client, args[i])) + ; + else if (str_begins(args[i], "postlogin_socket=")) { client->postlogin_socket_path = p_strdup(client->pool, args[i] + 17); } else if (strcmp(args[i], "nologin") == 0 || @@ -368,23 +377,8 @@ authenticate_callback(struct auth_client_request *request, if (args != NULL) { /* parse our username if it's there */ - for (i = 0; args[i] != NULL; i++) { - if (str_begins(args[i], "user=")) { - i_free(client->virtual_user); - i_free_and_null(client->virtual_user_orig); - i_free_and_null(client->virtual_auth_user); - client->virtual_user = - i_strdup(args[i] + 5); - } else if (str_begins(args[i], "original_user=")) { - i_free(client->virtual_user_orig); - client->virtual_user_orig = - i_strdup(args[i] + 14); - } else if (str_begins(args[i], "auth_user=")) { - i_free(client->virtual_auth_user); - client->virtual_auth_user = - i_strdup(args[i] + 10); - } - } + for (i = 0; args[i] != NULL; i++) + (void)args_parse_user(client, args[i]); } client->authenticating = FALSE;