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);
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);
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;
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;
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.
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");
{
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;
}
_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);