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