db-sql.c revision 79450e7c1bbc2812957ccde8dcaf41ed54eb3611
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher/* Copyright (c) 2003-2008 Dovecot authors, see the included COPYING file */
ee359fe1384507fed6c2274e7bfe81d288de4542Stephen Gallagher#if defined(PASSDB_SQL) || defined(USERDB_SQL)
84ae5edab16ad6be5e3be956cb6fa031c1428eb5Stephen Gallagher#define DEF_STR(name) DEF_STRUCT_STR(name, sql_settings)
84ae5edab16ad6be5e3be956cb6fa031c1428eb5Stephen Gallagher#define DEF_INT(name) DEF_STRUCT_INT(name, sql_settings)
84ae5edab16ad6be5e3be956cb6fa031c1428eb5Stephen Gallagher#define DEF_BOOL(name) DEF_STRUCT_BOOL(name, sql_settings)
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagherstatic struct setting_def setting_defs[] = {
1183d29d87c5c7439cf2364b7d7324d4a13b6e35Stephen Gallagher MEMBER(password_query) "SELECT username, domain, password FROM users WHERE username = '%n' AND domain = '%d'",
1183d29d87c5c7439cf2364b7d7324d4a13b6e35Stephen Gallagher MEMBER(user_query) "SELECT home, uid, gid FROM users WHERE username = '%n' AND domain = '%d'",
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher MEMBER(update_query) "UPDATE users SET password = '%w' WHERE username = '%n' AND domain = '%d'",
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagherstatic struct sql_connection *connections = NULL;
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagherstatic struct sql_connection *sql_conn_find(const char *config_path)
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher for (conn = connections; conn != NULL; conn = conn->next) {
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher if (strcmp(conn->config_path, config_path) == 0)
c89589fa349f38214c9cb8d9389c0fd557e5dca2Simo Sorcestatic const char *parse_setting(const char *key, const char *value,
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher return parse_setting_from_defs(conn->pool, setting_defs,
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagherstruct sql_connection *db_sql_init(const char *config_path)
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher conn->config_path = p_strdup(pool, config_path);
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher if (!settings_read(config_path, NULL, parse_setting,
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher i_fatal("sql: driver not set in configuration file %s",
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher i_fatal("sql: connect string not set in configuration file %s",
551aa6c36797ed720487f5974dcadabf19e6ff9fStephen Gallagher conn->db = sql_init(conn->set.driver, conn->set.connect);