From: Timo Sirainen Date: Mon, 4 Mar 2024 08:40:10 +0000 (+0200) Subject: auth: userdb ldap, sql - Fix error handling for user iteration X-Git-Tag: 2.4.1~943 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4955c084d89497af959368512217cb5173ba5a95;p=thirdparty%2Fdovecot%2Fcore.git auth: userdb ldap, sql - Fix error handling for user iteration --- diff --git a/src/auth/userdb-ldap.c b/src/auth/userdb-ldap.c index d6186afc00..28b21f699f 100644 --- a/src/auth/userdb-ldap.c +++ b/src/auth/userdb-ldap.c @@ -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); diff --git a/src/auth/userdb-sql.c b/src/auth/userdb-sql.c index 38aa9ff802..5c59c7d2f1 100644 --- a/src/auth/userdb-sql.c +++ b/src/auth/userdb-sql.c @@ -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;