db-sql.c revision e665999b757e60bfb98e5a84a78b05f061453140
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2003-2011 Dovecot authors, see the included COPYING file */
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen#define DEF_STR(name) DEF_STRUCT_STR(name, sql_settings)
d756ebcfa96bd7cff02097c8f26df9df368b81b1Timo Sirainen#define DEF_INT(name) DEF_STRUCT_INT(name, sql_settings)
ccd83028a34cc6e2b6370eb7ecf1cf25e717c2d3Timo Sirainen#define DEF_BOOL(name) DEF_STRUCT_BOOL(name, sql_settings)
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainenstatic struct sql_settings default_sql_settings = {
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen .password_query = "SELECT username, domain, password FROM users WHERE username = '%n' AND domain = '%d'",
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen .user_query = "SELECT home, uid, gid FROM users WHERE username = '%n' AND domain = '%d'",
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen .update_query = "UPDATE users SET password = '%w' WHERE username = '%n' AND domain = '%d'",
c4267cf4c40fb1f866b5958ff122ef836b8c5dfbTimo Sirainen .iterate_query = "SELECT username, domain FROM users",
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainenstatic struct sql_connection *connections = NULL;
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainenstatic struct sql_connection *sql_conn_find(const char *config_path)
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen for (conn = connections; conn != NULL; conn = conn->next) {
150e64c376365becf1ec5c9d45912ecb840eea96Timo Sirainen if (strcmp(conn->config_path, config_path) == 0)
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainenstatic const char *parse_setting(const char *key, const char *value,
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen return parse_setting_from_defs(conn->pool, setting_defs,
7bd72e4deca3cbf757dd1ea298486d9f3bc24226Timo Sirainenstruct sql_connection *db_sql_init(const char *config_path, bool userdb)
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen i_fatal("sql: Configuration file path not given");
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen pool = pool_alloconly_create("sql_connection", 1024);
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen conn->config_path = p_strdup(pool, config_path);
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen if (!settings_read(config_path, NULL, parse_setting,
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen if (conn->set.password_query == default_sql_settings.password_query)
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen if (conn->set.user_query == default_sql_settings.user_query)
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen if (conn->set.update_query == default_sql_settings.update_query)
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen if (conn->set.iterate_query == default_sql_settings.iterate_query)
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen i_fatal("sql: driver not set in configuration file %s",
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen i_fatal("sql: connect string not set in configuration file %s",
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen conn->db = sql_init(conn->set.driver, conn->set.connect);
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainenvoid db_sql_unref(struct sql_connection **_conn)
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen /* abort all pending auth requests before setting conn to NULL,
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen so that callbacks can still access it */
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainenvoid db_sql_check_userdb_warning(struct sql_connection *conn)
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen if (worker || conn->userdb_used || conn->set.userdb_warning_disable)
3dd0679b6f24be0287cc42d7a60bbf59cdf8b637Timo Sirainen i_warning("sql: Ignoring changed user_query in %s, "
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen "because userdb sql not used. "
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen "(If this is intentional, set userdb_warning_disable=yes)",
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen i_warning("sql: Ignoring changed iterate_query in %s, "
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen "because userdb sql not used. "
51cbc45fc1ac5dde29bc2adbb175945df1b4f7d4Timo Sirainen "(If this is intentional, set userdb_warning_disable=yes)",