]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: userdb ldap, sql - Fix error handling for user iteration
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 4 Mar 2024 08:40:10 +0000 (10:40 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:39:58 +0000 (10:39 +0200)
src/auth/userdb-ldap.c
src/auth/userdb-sql.c

index d6186afc00159f64e640f9906b186c3abe394458..28b21f699fcb6e8bfd19fcc888b4cebc3d5bbe95 100644 (file)
@@ -230,6 +230,7 @@ userdb_ldap_iterate_init(struct auth_request *auth_request,
                e_error(authdb_event(auth_request),
                        "Failed to expand base=%s: %s", conn->set.base, error);
                ctx->ctx.failed = TRUE;
+               return &ctx->ctx;
        }
        request->request.base = p_strdup(auth_request->pool, str_c(str));
 
@@ -240,6 +241,7 @@ userdb_ldap_iterate_init(struct auth_request *auth_request,
                        "Failed to expand iterate_filter=%s: %s",
                        conn->set.iterate_filter, error);
                ctx->ctx.failed = TRUE;
+               return &ctx->ctx;
        }
        request->request.filter = p_strdup(auth_request->pool, str_c(str));
        request->request.attr_map = &conn->iterate_attr_map;
@@ -260,6 +262,10 @@ static void userdb_ldap_iterate_next(struct userdb_iterate_context *_ctx)
        struct ldap_userdb_iterate_context *ctx =
                (struct ldap_userdb_iterate_context *)_ctx;
 
+       if (_ctx->failed) {
+               _ctx->callback(NULL, _ctx->context);
+               return;
+       }
        ctx->continued = TRUE;
        if (!ctx->in_callback)
                db_ldap_enable_input(ctx->conn, TRUE);
index 38aa9ff802fc6b67bffc011941efed62f3db3b6d..5c59c7d2f197e2722c10eea159605fe9374d4820 100644 (file)
@@ -141,20 +141,22 @@ userdb_sql_iterate_init(struct auth_request *auth_request,
        struct sql_userdb_iterate_context *ctx;
        const char *query, *error;
 
+       ctx = i_new(struct sql_userdb_iterate_context, 1);
+       ctx->ctx.auth_request = auth_request;
+       ctx->ctx.callback = callback;
+       ctx->ctx.context = context;
+       auth_request_ref(auth_request);
+
        if (t_auth_request_var_expand(module->conn->set.iterate_query,
                                      auth_request, userdb_sql_escape,
                                      &query, &error) <= 0) {
                e_error(authdb_event(auth_request),
                        "Failed to expand iterate_query=%s: %s",
                        module->conn->set.iterate_query, error);
+               ctx->ctx.failed = TRUE;
+               return &ctx->ctx;
        }
 
-       ctx = i_new(struct sql_userdb_iterate_context, 1);
-       ctx->ctx.auth_request = auth_request;
-       ctx->ctx.callback = callback;
-       ctx->ctx.context = context;
-       auth_request_ref(auth_request);
-
        sql_query(module->conn->db, query,
                  sql_iter_query_callback, ctx);
        e_debug(authdb_event(auth_request), "%s", query);
@@ -200,6 +202,10 @@ static void userdb_sql_iterate_next(struct userdb_iterate_context *_ctx)
        const char *user;
        int ret;
 
+       if (_ctx->failed) {
+               _ctx->callback(NULL, _ctx->context);
+               return;
+       }
        if (ctx->result == NULL) {
                /* query not finished yet */
                ctx->call_iter = TRUE;