From: Timo Sirainen Date: Wed, 21 Jul 2010 14:19:19 +0000 (+0100) Subject: auth: If built-in SQL query fails, log it clearly that it was using built-in one. X-Git-Tag: 2.0.rc4~54 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48010d123abfac8cb19f33f1fe12f33a7090089e;p=thirdparty%2Fdovecot%2Fcore.git auth: If built-in SQL query fails, log it clearly that it was using built-in one. --- diff --git a/src/auth/db-sql.c b/src/auth/db-sql.c index 68af669813..1367d15e7f 100644 --- a/src/auth/db-sql.c +++ b/src/auth/db-sql.c @@ -84,6 +84,15 @@ struct sql_connection *db_sql_init(const char *config_path) null_settings_section_callback, conn)) exit(FATAL_DEFAULT); + if (conn->set.password_query == default_sql_settings.password_query) + conn->default_password_query = TRUE; + if (conn->set.user_query == default_sql_settings.user_query) + conn->default_user_query = TRUE; + if (conn->set.update_query == default_sql_settings.update_query) + conn->default_update_query = TRUE; + if (conn->set.iterate_query == default_sql_settings.iterate_query) + conn->default_iterate_query = TRUE; + if (conn->set.driver == NULL) { i_fatal("sql: driver not set in configuration file %s", config_path); diff --git a/src/auth/db-sql.h b/src/auth/db-sql.h index 7a58c97f42..5ff8e131d2 100644 --- a/src/auth/db-sql.h +++ b/src/auth/db-sql.h @@ -22,6 +22,11 @@ struct sql_connection { char *config_path; struct sql_settings set; struct sql_db *db; + + unsigned int default_password_query:1; + unsigned int default_user_query:1; + unsigned int default_update_query:1; + unsigned int default_iterate_query:1; }; struct sql_connection *db_sql_init(const char *config_path); diff --git a/src/auth/passdb-sql.c b/src/auth/passdb-sql.c index 7e6ed60354..6f7ef00325 100644 --- a/src/auth/passdb-sql.c +++ b/src/auth/passdb-sql.c @@ -56,6 +56,8 @@ static void sql_query_callback(struct sql_result *result, struct passdb_sql_request *sql_request) { struct auth_request *auth_request = sql_request->auth_request; + struct passdb_module *_module = auth_request->passdb->passdb; + struct sql_passdb_module *module = (struct sql_passdb_module *)_module; enum passdb_result passdb_result; const char *password, *scheme; int ret; @@ -65,9 +67,17 @@ static void sql_query_callback(struct sql_result *result, ret = sql_result_next_row(result); if (ret < 0) { - auth_request_log_error(auth_request, "sql", - "Password query failed: %s", - sql_result_get_error(result)); + if (!module->conn->default_password_query) { + auth_request_log_error(auth_request, "sql", + "Password query failed: %s", + sql_result_get_error(result)); + } else { + auth_request_log_error(auth_request, "sql", + "Password query failed: %s " + "(using built-in default password_query: %s)", + sql_result_get_error(result), + module->conn->set.password_query); + } } else if (ret == 0) { auth_request_log_info(auth_request, "sql", "unknown user"); passdb_result = PASSDB_RESULT_USER_UNKNOWN; @@ -184,10 +194,20 @@ static void sql_lookup_credentials(struct auth_request *request, static void sql_set_credentials_callback(const char *error, struct passdb_sql_request *sql_request) { + struct passdb_module *_module = + sql_request->auth_request->passdb->passdb; + struct sql_passdb_module *module = (struct sql_passdb_module *)_module; + if (error != NULL) { - auth_request_log_error(sql_request->auth_request, "sql", - "Set credentials query failed: %s", - error); + if (!module->conn->default_update_query) { + auth_request_log_error(sql_request->auth_request, "sql", + "Set credentials query failed: %s", error); + } else { + auth_request_log_error(sql_request->auth_request, "sql", + "Set credentials query failed: %s" + "(using built-in default update_query: %s)", + error, module->conn->set.update_query); + } } sql_request->callback. diff --git a/src/auth/userdb-sql.c b/src/auth/userdb-sql.c index d715a52a7a..18b5271430 100644 --- a/src/auth/userdb-sql.c +++ b/src/auth/userdb-sql.c @@ -60,14 +60,25 @@ static void sql_query_callback(struct sql_result *sql_result, struct userdb_sql_request *sql_request) { struct auth_request *auth_request = sql_request->auth_request; + struct userdb_module *_module = auth_request->userdb->userdb; + struct sql_userdb_module *module = + (struct sql_userdb_module *)_module; enum userdb_result result = USERDB_RESULT_INTERNAL_FAILURE; int ret; ret = sql_result_next_row(sql_result); if (ret < 0) { - auth_request_log_error(auth_request, "sql", - "User query failed: %s", - sql_result_get_error(sql_result)); + if (!module->conn->default_user_query) { + auth_request_log_error(auth_request, "sql", + "User query failed: %s", + sql_result_get_error(sql_result)); + } else { + auth_request_log_error(auth_request, "sql", + "User query failed: %s " + "(using built-in default user_query: %s)", + sql_result_get_error(sql_result), + module->conn->set.user_query); + } } else if (ret == 0) { result = USERDB_RESULT_USER_UNKNOWN; auth_request_log_info(auth_request, "sql", "Unknown user"); @@ -180,6 +191,8 @@ static void userdb_sql_iterate_next(struct userdb_iterate_context *_ctx) { struct sql_userdb_iterate_context *ctx = (struct sql_userdb_iterate_context *)_ctx; + struct userdb_module *_module = _ctx->userdb; + struct sql_userdb_module *module = (struct sql_userdb_module *)_module; const char *user; int ret; @@ -201,8 +214,15 @@ static void userdb_sql_iterate_next(struct userdb_iterate_context *_ctx) } _ctx->failed = TRUE; } else if (ret < 0) { - i_error("sql: Iterate query failed: %s", - sql_result_get_error(ctx->result)); + if (!module->conn->default_iterate_query) { + i_error("sql: Iterate query failed: %s", + sql_result_get_error(ctx->result)); + } else { + i_error("sql: Iterate query failed: %s " + "(using built-in default iterate_query: %s)", + sql_result_get_error(ctx->result), + module->conn->set.iterate_query); + } _ctx->failed = TRUE; } _ctx->callback(NULL, _ctx->context);