]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
login-common: Split off args_parse_user()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 9 Apr 2020 19:26:57 +0000 (22:26 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Fri, 24 Apr 2020 08:02:40 +0000 (08:02 +0000)
src/login-common/sasl-server.c

index 7eedbfc1a931996b7c215fcea660f22f233f4023..edbec3647177650c2ed275ef71c4b36029ee590f 100644 (file)
@@ -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;