Mercurial > dovecot > original-hg > dovecot-1.2
view src/auth/userdb-sql.c @ 2942:c7d426f8cb58 HEAD
Added name variable for userdb_module and passdb_module and changed their
initialization a bit.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 06 Dec 2004 18:39:02 +0200 |
parents | 696fe2f5152c |
children | fcecff14e470 |
line wrap: on
line source
/* Copyright (C) 2004 Timo Sirainen, Alex Howansky */ #include "config.h" #undef HAVE_CONFIG_H #ifdef USERDB_SQL #include "common.h" #include "str.h" #include "strescape.h" #include "var-expand.h" #include "db-sql.h" #include "userdb.h" #include <stdlib.h> #include <string.h> struct userdb_sql_request { struct auth_request *auth_request; userdb_callback_t *callback; void *context; }; static struct sql_connection *userdb_sql_conn; static void sql_query_callback(struct sql_result *result, void *context) { struct userdb_sql_request *sql_request = context; struct auth_request *auth_request = sql_request->auth_request; struct user_data user; const char *uid, *gid; int ret; uid = gid = NULL; ret = sql_result_next_row(result); if (ret < 0) { i_error("sql(%s): User query failed: %s", get_log_prefix(auth_request), sql_result_get_error(result)); } else if (ret == 0) { if (verbose) { i_error("sql(%s): User not found", get_log_prefix(auth_request)); } } else { uid = sql_result_find_field_value(result, "uid"); if (uid == NULL) { i_error("sql(%s): Password query didn't return uid, " "or it was NULL", get_log_prefix(auth_request)); } gid = sql_result_find_field_value(result, "gid"); if (gid == NULL) { i_error("sql(%s): Password query didn't return gid, " "or it was NULL", get_log_prefix(auth_request)); } } if (uid == NULL || gid == NULL) sql_request->callback(NULL, sql_request->context); else { memset(&user, 0, sizeof(user)); user.virtual_user = auth_request->user; user.system_user = sql_result_find_field_value(result, "system_user"); user.home = sql_result_find_field_value(result, "home"); user.mail = sql_result_find_field_value(result, "mail"); user.uid = (uid_t)strtoul(uid, NULL, 10); user.gid = (gid_t)strtoul(gid, NULL, 10); sql_request->callback(&user, sql_request->context); } i_free(sql_request); } static void userdb_sql_lookup(struct auth_request *auth_request, userdb_callback_t *callback, void *context) { struct userdb_sql_request *sql_request; string_t *query; query = t_str_new(512); var_expand(query, userdb_sql_conn->set.user_query, auth_request_get_var_expand_table(auth_request, str_escape)); sql_request = i_new(struct userdb_sql_request, 1); sql_request->callback = callback; sql_request->context = context; sql_request->auth_request = auth_request; sql_query(userdb_sql_conn->db, str_c(query), sql_query_callback, sql_request); } static void userdb_sql_preinit(const char *args) { userdb_sql_conn = db_sql_init(args); } static void userdb_sql_init(const char *args __attr_unused__) { db_sql_connect(userdb_sql_conn); } static void userdb_sql_deinit(void) { db_sql_unref(userdb_sql_conn); } struct userdb_module userdb_sql = { "sql", userdb_sql_preinit, userdb_sql_init, userdb_sql_deinit, userdb_sql_lookup }; #endif