]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: If built-in SQL query fails, log it clearly that it was using built-in one.
authorTimo Sirainen <tss@iki.fi>
Wed, 21 Jul 2010 14:19:19 +0000 (15:19 +0100)
committerTimo Sirainen <tss@iki.fi>
Wed, 21 Jul 2010 14:19:19 +0000 (15:19 +0100)
src/auth/db-sql.c
src/auth/db-sql.h
src/auth/passdb-sql.c
src/auth/userdb-sql.c

index 68af6698132a7dfd8c68ab48bbb8bb7f1c930860..1367d15e7faabf0488262f8882837cd8a678f11f 100644 (file)
@@ -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);
index 7a58c97f42722599e94494ecbb6c0cf4f982532d..5ff8e131d27a950adcc5567814cfa0995e1fa400 100644 (file)
@@ -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);
index 7e6ed6035427d45a36404bc169ab698dac0362c6..6f7ef003251ff1fd06660dcb7c4d79b0ae306a6d 100644 (file)
@@ -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.
index d715a52a7a45a5cddc4c6bf8de0aa0b441b2de42..18b52714303a29308092be3d5e2631b2b3f5d7a0 100644 (file)
@@ -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);