Mercurial > dovecot > original-hg > dovecot-1.2
view src/auth/userdb.c @ 3520:e2fe8222449d HEAD
s/occured/occurred/
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 07 Aug 2005 14:41:19 +0300 |
parents | 16ea551957ed |
children | 4e55969a6a93 |
line wrap: on
line source
/* Copyright (C) 2002-2003 Timo Sirainen */ #include "common.h" #include "auth-module.h" #include "userdb.h" #include <stdlib.h> #include <pwd.h> #include <grp.h> extern struct userdb_module userdb_passdb; extern struct userdb_module userdb_static; extern struct userdb_module userdb_passwd; extern struct userdb_module userdb_passwd_file; extern struct userdb_module userdb_vpopmail; extern struct userdb_module userdb_ldap; extern struct userdb_module userdb_sql; struct userdb_module *userdbs[] = { #ifdef USERDB_PASSWD &userdb_passwd, #endif #ifdef USERDB_PASSWD_FILE &userdb_passwd_file, #endif #ifdef USERDB_PASSDB &userdb_passdb, #endif #ifdef USERDB_STATIC &userdb_static, #endif #ifdef USERDB_VPOPMAIL &userdb_vpopmail, #endif #ifdef USERDB_LDAP &userdb_ldap, #endif #ifdef USERDB_SQL &userdb_sql, #endif NULL }; uid_t userdb_parse_uid(struct auth_request *request, const char *str) { struct passwd *pw; if (str == NULL) return (uid_t)-1; if (*str >= '0' && *str <= '9') return (uid_t)strtoul(str, NULL, 10); pw = getpwnam(str); if (pw == NULL) { if (request != NULL) { auth_request_log_error(request, "userdb", "Invalid UID field '%s'", str); } return (uid_t)-1; } return pw->pw_uid; } gid_t userdb_parse_gid(struct auth_request *request, const char *str) { struct group *gr; if (str == NULL) return (uid_t)-1; if (*str >= '0' && *str <= '9') return (gid_t)strtoul(str, NULL, 10); gr = getgrnam(str); if (gr == NULL) { if (request != NULL) { auth_request_log_error(request, "userdb", "Invalid GID field '%s'", str); } return (gid_t)-1; } return gr->gr_gid; } void userdb_preinit(struct auth *auth, const char *driver, const char *args) { struct userdb_module **p; struct auth_userdb *auth_userdb, **dest; if (args == NULL) args = ""; auth_userdb = p_new(auth->pool, struct auth_userdb, 1); auth_userdb->auth = auth; auth_userdb->args = p_strdup(auth->pool, args); for (dest = &auth->userdbs; *dest != NULL; dest = &(*dest)->next) auth_userdb->num++; *dest = auth_userdb; for (p = userdbs; *p != NULL; p++) { if (strcmp((*p)->name, driver) == 0) { auth_userdb->userdb = *p; break; } } #ifdef HAVE_MODULES if (auth_userdb->userdb == NULL) auth_userdb->module = auth_module_open(driver); if (auth_userdb->module != NULL) { auth_userdb->userdb = auth_module_sym(auth_userdb->module, t_strconcat("userdb_", driver, NULL)); } #endif if (auth_userdb->userdb == NULL) i_fatal("Unknown userdb driver '%s'", driver); if (auth_userdb->userdb->preinit != NULL) auth_userdb->userdb->preinit(auth_userdb->args); } void userdb_init(struct auth_userdb *userdb) { if (userdb->userdb->init != NULL) userdb->userdb->init(userdb->args); } void userdb_deinit(struct auth_userdb *userdb) { if (userdb->userdb->deinit != NULL) userdb->userdb->deinit(); #ifdef HAVE_MODULES if (userdb->module != NULL) auth_module_close(userdb->module); #endif }