dovecot-2.0: auth: If built-in SQL query fails, log it clearly t...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Jul 21 17:20:04 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/584957cba877
changeset: 11881:584957cba877
user: Timo Sirainen <tss at iki.fi>
date: Wed Jul 21 15:19:19 2010 +0100
description:
auth: If built-in SQL query fails, log it clearly that it was using built-in one.
diffstat:
src/auth/db-sql.c | 9 +++++++++
src/auth/db-sql.h | 5 +++++
src/auth/passdb-sql.c | 32 ++++++++++++++++++++++++++------
src/auth/userdb-sql.c | 30 +++++++++++++++++++++++++-----
4 files changed, 65 insertions(+), 11 deletions(-)
diffs (150 lines):
diff -r e3519ec18f03 -r 584957cba877 src/auth/db-sql.c
--- a/src/auth/db-sql.c Wed Jul 21 13:33:35 2010 +0100
+++ b/src/auth/db-sql.c Wed Jul 21 15:19:19 2010 +0100
@@ -84,6 +84,15 @@
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 -r e3519ec18f03 -r 584957cba877 src/auth/db-sql.h
--- a/src/auth/db-sql.h Wed Jul 21 13:33:35 2010 +0100
+++ b/src/auth/db-sql.h Wed Jul 21 15:19:19 2010 +0100
@@ -22,6 +22,11 @@
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 -r e3519ec18f03 -r 584957cba877 src/auth/passdb-sql.c
--- a/src/auth/passdb-sql.c Wed Jul 21 13:33:35 2010 +0100
+++ b/src/auth/passdb-sql.c Wed Jul 21 15:19:19 2010 +0100
@@ -56,6 +56,8 @@
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 @@
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_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 -r e3519ec18f03 -r 584957cba877 src/auth/userdb-sql.c
--- a/src/auth/userdb-sql.c Wed Jul 21 13:33:35 2010 +0100
+++ b/src/auth/userdb-sql.c Wed Jul 21 15:19:19 2010 +0100
@@ -60,14 +60,25 @@
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 @@
{
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 @@
}
_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);
More information about the dovecot-cvs
mailing list