db-sql.c revision d37186d1462b902a9a2624c30e3512bd2b9cd197
76b43e4417bab52e913da39b5f5bc2a130d3f149Timo Sirainen/* Copyright (c) 2003-2008 Dovecot authors, see the included COPYING file */
a84eb0599fa1d796206eaed65c4e3239f0799276Timo Sirainen#define DEF_STR(name) DEF_STRUCT_STR(name, sql_settings)
a84eb0599fa1d796206eaed65c4e3239f0799276Timo Sirainen#define DEF_INT(name) DEF_STRUCT_INT(name, sql_settings)
a84eb0599fa1d796206eaed65c4e3239f0799276Timo Sirainen#define DEF_BOOL(name) DEF_STRUCT_BOOL(name, sql_settings)
d37186d1462b902a9a2624c30e3512bd2b9cd197Timo Sirainen MEMBER(password_query) "SELECT username, domain, password FROM users WHERE username = '%n' AND domain = '%d'",
d37186d1462b902a9a2624c30e3512bd2b9cd197Timo Sirainen MEMBER(user_query) "SELECT home, uid, gid FROM users WHERE username = '%n' AND domain = '%d'",
d37186d1462b902a9a2624c30e3512bd2b9cd197Timo Sirainen MEMBER(update_query) "UPDATE users SET password = '%w' WHERE username = '%n' AND domain = '%d'",
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenstatic struct sql_connection *connections = NULL;
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenstatic struct sql_connection *sql_conn_find(const char *config_path)
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen for (conn = connections; conn != NULL; conn = conn->next) {
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen if (strcmp(conn->config_path, config_path) == 0)
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenstatic const char *parse_setting(const char *key, const char *value,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen return parse_setting_from_defs(conn->pool, setting_defs,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenstruct sql_connection *db_sql_init(const char *config_path)
b7828b34f6d81cdea62761932a1da1a444a29bcdTimo Sirainen i_fatal("sql: Configuration file path not given");
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen pool = pool_alloconly_create("sql_connection", 1024);
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen conn->config_path = p_strdup(pool, config_path);
59151b71059df1190acd75d8717ed04a7920c862Timo Sirainen if (!settings_read(config_path, NULL, parse_setting,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen i_fatal("sql: driver not set in configuration file %s",
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen i_fatal("sql: connect string not set in configuration file %s",
f8a86fdfb0048f9c87bf223373b35416ceb5856bTimo Sirainen conn->db = sql_init(conn->set.driver, conn->set.connect);