# HG changeset patch # User Timo Sirainen # Date 1102351142 -7200 # Node ID c7d426f8cb5823b13e1cbf3c26d1416328f6cf5f # Parent 89ab5c72430ded373261e33fdbc22d8dc3da6e9d Added name variable for userdb_module and passdb_module and changed their initialization a bit. diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb-bsdauth.c --- a/src/auth/passdb-bsdauth.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb-bsdauth.c Mon Dec 06 18:39:02 2004 +0200 @@ -65,6 +65,8 @@ } struct passdb_module passdb_bsdauth = { + "bsdauth", + NULL, NULL, bsdauth_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb-checkpassword.c --- a/src/auth/passdb-checkpassword.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb-checkpassword.c Mon Dec 06 18:39:02 2004 +0200 @@ -317,6 +317,8 @@ } struct passdb_module passdb_checkpassword = { + "checkpassword", + NULL, checkpassword_init, checkpassword_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb-ldap.c --- a/src/auth/passdb-ldap.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb-ldap.c Mon Dec 06 18:39:02 2004 +0200 @@ -253,6 +253,8 @@ } struct passdb_module passdb_ldap = { + "ldap", + passdb_ldap_preinit, passdb_ldap_init, passdb_ldap_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb-pam.c --- a/src/auth/passdb-pam.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb-pam.c Mon Dec 06 18:39:02 2004 +0200 @@ -404,6 +404,8 @@ } struct passdb_module passdb_pam = { + "pam", + NULL, pam_init, pam_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb-passwd-file.c --- a/src/auth/passdb-passwd-file.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb-passwd-file.c Mon Dec 06 18:39:02 2004 +0200 @@ -83,6 +83,8 @@ } struct passdb_module passdb_passwd_file = { + "passwd-file", + NULL, passwd_file_init, passwd_file_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb-passwd.c --- a/src/auth/passdb-passwd.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb-passwd.c Mon Dec 06 18:39:02 2004 +0200 @@ -62,6 +62,8 @@ } struct passdb_module passdb_passwd = { + "passwd", + NULL, NULL, passwd_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb-shadow.c --- a/src/auth/passdb-shadow.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb-shadow.c Mon Dec 06 18:39:02 2004 +0200 @@ -62,6 +62,8 @@ } struct passdb_module passdb_shadow = { + "shadow", + NULL, NULL, shadow_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb-sql.c --- a/src/auth/passdb-sql.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb-sql.c Mon Dec 06 18:39:02 2004 +0200 @@ -213,6 +213,8 @@ } struct passdb_module passdb_sql = { + "sql", + passdb_sql_preinit, passdb_sql_init, passdb_sql_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb-vpopmail.c --- a/src/auth/passdb-vpopmail.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb-vpopmail.c Mon Dec 06 18:39:02 2004 +0200 @@ -97,6 +97,8 @@ } struct passdb_module passdb_vpopmail = { + "vpopmail", + NULL, NULL, vpopmail_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb.c --- a/src/auth/passdb.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb.c Mon Dec 06 18:39:02 2004 +0200 @@ -13,6 +13,37 @@ static struct auth_module *passdb_module = NULL; #endif +struct passdb_module *passdbs[] = { +#ifdef PASSDB_PASSWD + &passdb_passwd, +#endif +#ifdef PASSDB_BSDAUTH + &passdb_bsdauth, +#endif +#ifdef PASSDB_PASSWD_FILE + &passdb_passwd_file, +#endif +#ifdef PASSDB_PAM + &passdb_pam, +#endif +#ifdef PASSDB_CHECKPASSWORD + &passdb_checkpassword, +#endif +#ifdef PASSDB_SHADOW + &passdb_shadow, +#endif +#ifdef PASSDB_VPOPMAIL + &passdb_vpopmail, +#endif +#ifdef PASSDB_LDAP + &passdb_ldap, +#endif +#ifdef PASSDB_SQL + &passdb_sql, +#endif + NULL +}; + struct passdb_module *passdb; static char *passdb_args; @@ -81,8 +112,7 @@ callback(password, auth_request); } -static void -mech_list_verify_passdb(struct passdb_module *passdb, const char *name) +static void mech_list_verify_passdb(struct passdb_module *passdb) { struct mech_module_list *list; @@ -97,16 +127,15 @@ if (list != NULL) { i_fatal("Passdb %s doesn't support %s method", - name, list->module.mech_name); + passdb->name, list->module.mech_name); } } void passdb_preinit(void) { + struct passdb_module **p; const char *name, *args; - passdb = NULL; - name = getenv("PASSDB"); if (name == NULL) i_fatal("PASSDB environment is unset"); @@ -120,42 +149,14 @@ passdb_args = i_strdup(args); -#ifdef PASSDB_PASSWD - if (strcasecmp(name, "passwd") == 0) - passdb = &passdb_passwd; -#endif -#ifdef PASSDB_BSDAUTH - if (strcasecmp(name, "bsdauth") == 0) - passdb = &passdb_bsdauth; -#endif -#ifdef PASSDB_PASSWD_FILE - if (strcasecmp(name, "passwd-file") == 0) - passdb = &passdb_passwd_file; -#endif -#ifdef PASSDB_PAM - if (strcasecmp(name, "pam") == 0) - passdb = &passdb_pam; -#endif -#ifdef PASSDB_CHECKPASSWORD - if (strcasecmp(name, "checkpassword") == 0) - passdb = &passdb_checkpassword; -#endif -#ifdef PASSDB_SHADOW - if (strcasecmp(name, "shadow") == 0) - passdb = &passdb_shadow; -#endif -#ifdef PASSDB_VPOPMAIL - if (strcasecmp(name, "vpopmail") == 0) - passdb = &passdb_vpopmail; -#endif -#ifdef PASSDB_LDAP - if (strcasecmp(name, "ldap") == 0) - passdb = &passdb_ldap; -#endif -#ifdef PASSDB_SQL - if (strcasecmp(name, "sql") == 0) - passdb = &passdb_sql; -#endif + passdb = NULL; + for (p = passdbs; *p != NULL; p++) { + if (strcmp((*p)->name, name) == 0) { + passdb = *p; + break; + } + } + #ifdef HAVE_MODULES passdb_module = passdb != NULL ? NULL : auth_module_open(name); if (passdb_module != NULL) { @@ -170,7 +171,7 @@ if (passdb->preinit != NULL) passdb->preinit(passdb_args); - mech_list_verify_passdb(passdb, name); + mech_list_verify_passdb(passdb); } void passdb_init(void) diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/passdb.h --- a/src/auth/passdb.h Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/passdb.h Mon Dec 06 18:39:02 2004 +0200 @@ -33,6 +33,8 @@ struct auth_request *request); struct passdb_module { + const char *name; + void (*preinit)(const char *args); void (*init)(const char *args); void (*deinit)(void); diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/userdb-ldap.c --- a/src/auth/userdb-ldap.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/userdb-ldap.c Mon Dec 06 18:39:02 2004 +0200 @@ -208,6 +208,8 @@ } struct userdb_module userdb_ldap = { + "ldap", + userdb_ldap_preinit, userdb_ldap_init, userdb_ldap_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/userdb-passwd-file.c --- a/src/auth/userdb-passwd-file.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/userdb-passwd-file.c Mon Dec 06 18:39:02 2004 +0200 @@ -54,6 +54,8 @@ } struct userdb_module userdb_passwd_file = { + "passwd-file", + NULL, passwd_file_init, passwd_file_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/userdb-passwd.c --- a/src/auth/userdb-passwd.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/userdb-passwd.c Mon Dec 06 18:39:02 2004 +0200 @@ -37,6 +37,8 @@ } struct userdb_module userdb_passwd = { + "passwd", + NULL, NULL, NULL, passwd_lookup }; diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/userdb-sql.c --- a/src/auth/userdb-sql.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/userdb-sql.c Mon Dec 06 18:39:02 2004 +0200 @@ -107,6 +107,8 @@ } struct userdb_module userdb_sql = { + "sql", + userdb_sql_preinit, userdb_sql_init, userdb_sql_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/userdb-static.c --- a/src/auth/userdb-static.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/userdb-static.c Mon Dec 06 18:39:02 2004 +0200 @@ -84,6 +84,8 @@ } struct userdb_module userdb_static = { + "static", + NULL, static_init, static_deinit, diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/userdb-vpopmail.c --- a/src/auth/userdb-vpopmail.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/userdb-vpopmail.c Mon Dec 06 18:39:02 2004 +0200 @@ -106,6 +106,8 @@ } struct userdb_module userdb_vpopmail = { + "vpopmail", + NULL, NULL, NULL, vpopmail_lookup }; diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/userdb.c --- a/src/auth/userdb.c Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/userdb.c Mon Dec 06 18:39:02 2004 +0200 @@ -10,15 +10,36 @@ static struct auth_module *userdb_module = NULL; #endif +struct userdb_module *userdbs[] = { +#ifdef USERDB_PASSWD + &userdb_passwd, +#endif +#ifdef USERDB_PASSWD_FILE + &userdb_passwd_file, +#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 +}; + struct userdb_module *userdb; static char *userdb_args; void userdb_preinit(void) { + struct userdb_module **p; const char *name, *args; - userdb = NULL; - name = getenv("USERDB"); if (name == NULL) i_fatal("USERDB environment is unset"); @@ -32,30 +53,13 @@ userdb_args = i_strdup(args); -#ifdef USERDB_PASSWD - if (strcasecmp(name, "passwd") == 0) - userdb = &userdb_passwd; -#endif -#ifdef USERDB_PASSWD_FILE - if (strcasecmp(name, "passwd-file") == 0) - userdb = &userdb_passwd_file; -#endif -#ifdef USERDB_STATIC - if (strcasecmp(name, "static") == 0) - userdb = &userdb_static; -#endif -#ifdef USERDB_VPOPMAIL - if (strcasecmp(name, "vpopmail") == 0) - userdb = &userdb_vpopmail; -#endif -#ifdef USERDB_LDAP - if (strcasecmp(name, "ldap") == 0) - userdb = &userdb_ldap; -#endif -#ifdef USERDB_SQL - if (strcasecmp(name, "sql") == 0) - userdb = &userdb_sql; -#endif + userdb = NULL; + for (p = userdbs; *p != NULL; p++) { + if (strcmp((*p)->name, name) == 0) { + userdb = *p; + break; + } + } #ifdef HAVE_MODULES userdb_module = userdb != NULL ? NULL : auth_module_open(name); if (userdb_module != NULL) { diff -r 89ab5c72430d -r c7d426f8cb58 src/auth/userdb.h --- a/src/auth/userdb.h Sun Dec 05 06:10:43 2004 +0200 +++ b/src/auth/userdb.h Mon Dec 06 18:39:02 2004 +0200 @@ -16,6 +16,8 @@ typedef void userdb_callback_t(const struct user_data *user, void *context); struct userdb_module { + const char *name; + void (*preinit)(const char *args); void (*init)(const char *args); void (*deinit)(void);