db-sql.c revision 48010d123abfac8cb19f33f1fe12f33a7090089e
5a580c3a38ced62d4bcc95b8ac7c4f2935b5d294Timo Sirainen/* Copyright (c) 2003-2010 Dovecot authors, see the included COPYING file */
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch#define DEF_STR(name) DEF_STRUCT_STR(name, sql_settings)
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch#define DEF_INT(name) DEF_STRUCT_INT(name, sql_settings)
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch#define DEF_BOOL(name) DEF_STRUCT_BOOL(name, sql_settings)
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Boschstatic struct sql_settings default_sql_settings = {
84a31ddebcf8c3aeaef7b9e54171a48ee1374c45Timo Sirainen .password_query = "SELECT username, domain, password FROM users WHERE username = '%n' AND domain = '%d'",
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch .user_query = "SELECT home, uid, gid FROM users WHERE username = '%n' AND domain = '%d'",
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch .update_query = "UPDATE users SET password = '%w' WHERE username = '%n' AND domain = '%d'",
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch .iterate_query = "SELECT username, domain FROM users",
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Boschstatic struct sql_connection *connections = NULL;
7b6cc2bca3b2fb58bbbea5293ed8f63d352dc305Timo Sirainenstatic struct sql_connection *sql_conn_find(const char *config_path)
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch for (conn = connections; conn != NULL; conn = conn->next) {
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch if (strcmp(conn->config_path, config_path) == 0)
d2dd9b7365c8efb4e205d521c9d66758dbf7300aTimo Sirainenstatic const char *parse_setting(const char *key, const char *value,
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch return parse_setting_from_defs(conn->pool, setting_defs,
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Boschstruct sql_connection *db_sql_init(const char *config_path)
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch i_fatal("sql: Configuration file path not given");
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch pool = pool_alloconly_create("sql_connection", 1024);
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch conn->config_path = p_strdup(pool, config_path);
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch if (!settings_read(config_path, NULL, parse_setting,
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch if (conn->set.password_query == default_sql_settings.password_query)
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch if (conn->set.user_query == default_sql_settings.user_query)
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch if (conn->set.update_query == default_sql_settings.update_query)
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch if (conn->set.iterate_query == default_sql_settings.iterate_query)
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch i_fatal("sql: driver not set in configuration file %s",
f9511e684858bf5f6ac77ab12254b85b737beae8Stephan Bosch i_fatal("sql: connect string not set in configuration file %s",
84a31ddebcf8c3aeaef7b9e54171a48ee1374c45Timo Sirainen conn->db = sql_init(conn->set.driver, conn->set.connect);