]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Cleaned up struct auth_passdb/auth_userdb.
authorTimo Sirainen <tss@iki.fi>
Sat, 13 Mar 2010 18:00:32 +0000 (20:00 +0200)
committerTimo Sirainen <tss@iki.fi>
Sat, 13 Mar 2010 18:00:32 +0000 (20:00 +0200)
--HG--
branch : HEAD

src/auth/auth-request.c
src/auth/auth-settings.c
src/auth/auth-worker-client.c
src/auth/auth.h
src/auth/passdb-blocking.c
src/auth/passdb.c
src/auth/passdb.h
src/auth/userdb-blocking.c
src/auth/userdb.c
src/auth/userdb.h

index 45c9d08d9b523158d2f222df8630206e5333d429..87318644130126afcb12bba177158f8ce4c99e83 100644 (file)
@@ -340,7 +340,7 @@ static bool auth_request_master_lookup_finish(struct auth_request *request)
        request->skip_password_check = TRUE;
        request->passdb_password = NULL;
 
-       if (!request->passdb->pass) {
+       if (!request->passdb->set->pass) {
                /* skip the passdb lookup, we're authenticated now. */
                return TRUE;
        }
@@ -360,7 +360,8 @@ auth_request_handle_passdb_callback(enum passdb_result *result,
                            strlen(request->passdb_password));
        }
 
-       if (request->passdb->deny && *result != PASSDB_RESULT_USER_UNKNOWN) {
+       if (request->passdb->set->deny &&
+           *result != PASSDB_RESULT_USER_UNKNOWN) {
                /* deny passdb. we can get through this step only if the
                   lookup returned that user doesn't exist in it. internal
                   errors are fatal here. */
@@ -376,7 +377,7 @@ auth_request_handle_passdb_callback(enum passdb_result *result,
                        if (!auth_request_master_lookup_finish(request))
                                return FALSE;
                } else {
-                       if (request->passdb->pass) {
+                       if (request->passdb->set->pass) {
                                /* this wasn't the final passdb lookup,
                                   continue to next passdb */
                                request->passdb = request->passdb->next;
@@ -1368,7 +1369,7 @@ int auth_request_password_verify(struct auth_request *request,
                return 1;
        }
 
-       if (request->passdb->deny) {
+       if (request->passdb->set->deny) {
                /* this is a deny database, we don't care about the password */
                return 0;
        }
@@ -1473,10 +1474,10 @@ auth_request_get_var_expand_table(const struct auth_request *auth_request,
        }
        if (auth_request->userdb_lookup) {
                tab[9].value = auth_request->userdb == NULL ? "" :
-                       dec2str(auth_request->userdb->num);
+                       dec2str(auth_request->userdb->userdb->id);
        } else {
                tab[9].value = auth_request->passdb == NULL ? "" :
-                       dec2str(auth_request->passdb->id);
+                       dec2str(auth_request->passdb->passdb->id);
        }
        tab[10].value = auth_request->mech_name == NULL ? "" :
                auth_request->mech_name;
index 249a3dc7b5ae24f0c58f46d983de76316a81abd8..d93498d260ae1346abfb05f85506ea0837e05aa9 100644 (file)
@@ -110,8 +110,17 @@ static const struct setting_define auth_passdb_setting_defines[] = {
        SETTING_DEFINE_LIST_END
 };
 
+static const struct auth_passdb_settings auth_passdb_settings = {
+       .driver = "",
+       .args = "",
+       .deny = FALSE,
+       .pass = FALSE,
+       .master = FALSE
+};
+
 const struct setting_parser_info auth_passdb_setting_parser_info = {
        .defines = auth_passdb_setting_defines,
+       .defaults = &auth_passdb_settings,
 
        .type_offset = (size_t)-1,
        .struct_size = sizeof(struct auth_passdb_settings),
@@ -133,8 +142,14 @@ static const struct setting_define auth_userdb_setting_defines[] = {
        SETTING_DEFINE_LIST_END
 };
 
+static const struct auth_userdb_settings auth_userdb_settings = {
+       .driver = "",
+       .args = ""
+};
+
 const struct setting_parser_info auth_userdb_setting_parser_info = {
        .defines = auth_userdb_setting_defines,
+       .defaults = &auth_userdb_settings,
 
        .type_offset = (size_t)-1,
        .struct_size = sizeof(struct auth_userdb_settings),
index 31340acde95ff94f5ff8b4df318468795faad3f2..ad42066f1fef5db3bc32fc5c6f1090fc306de4f8 100644 (file)
@@ -165,13 +165,13 @@ auth_worker_handle_passv(struct auth_worker_client *client,
        }
 
        passdb = auth_request->passdb;
-       while (passdb != NULL && passdb->id != passdb_id)
+       while (passdb != NULL && passdb->passdb->id != passdb_id)
                passdb = passdb->next;
 
        if (passdb == NULL) {
                /* could be a masterdb */
                passdb = auth_request->auth->masterdbs;
-               while (passdb != NULL && passdb->id != passdb_id)
+               while (passdb != NULL && passdb->passdb->id != passdb_id)
                        passdb = passdb->next;
 
                if (passdb == NULL) {
@@ -264,7 +264,7 @@ auth_worker_handle_passl(struct auth_worker_client *client,
                return;
        }
 
-       while (auth_request->passdb->id != passdb_id) {
+       while (auth_request->passdb->passdb->id != passdb_id) {
                auth_request->passdb = auth_request->passdb->next;
                if (auth_request->passdb == NULL) {
                        i_error("BUG: PASSL had invalid passdb ID");
@@ -328,7 +328,7 @@ auth_worker_handle_setcred(struct auth_worker_client *client,
                return;
        }
 
-       while (auth_request->passdb->id != passdb_id) {
+       while (auth_request->passdb->passdb->id != passdb_id) {
                auth_request->passdb = auth_request->passdb->next;
                if (auth_request->passdb == NULL) {
                        i_error("BUG: SETCRED had invalid passdb ID");
index af880561b252095f1e4bc01d1e2cfe60082f619a..babc53e41b3d43a639b36efa2162fd85d88f10b8 100644 (file)
@@ -9,23 +9,15 @@ struct auth_passdb {
        pool_t pool;
        struct auth_passdb *next;
 
-        /* id is used by blocking passdb to identify the passdb */
-       unsigned int id;
-       const char *args;
+       const struct auth_passdb_settings *set;
        struct passdb_module *passdb;
-
-        /* if user is found from this passdb, deny authentication immediately */
-       unsigned int deny:1;
-       /* after a successful lookup, continue to next passdb */
-       unsigned int pass:1;
 };
 
 struct auth_userdb {
        pool_t pool;
        struct auth_userdb *next;
 
-       unsigned int num;
-       const char *args;
+       const struct auth_userdb_settings *set;
        struct userdb_module *userdb;
 };
 
index 5a7ca461cd9e341602c890a5377488ba7fe7fc00..0b3f39edae86ec975ababf832545430c97634d6e 100644 (file)
@@ -80,7 +80,7 @@ void passdb_blocking_verify_plain(struct auth_request *request)
 
        reply = auth_stream_reply_init(pool_datastack_create());
        auth_stream_reply_add(reply, "PASSV", NULL);
-       auth_stream_reply_add(reply, NULL, dec2str(request->passdb->id));
+       auth_stream_reply_add(reply, NULL, dec2str(request->passdb->passdb->id));
        auth_stream_reply_add(reply, NULL, request->mech_password);
        auth_request_export(request, reply);
 
@@ -122,7 +122,7 @@ void passdb_blocking_lookup_credentials(struct auth_request *request)
 
        reply = auth_stream_reply_init(pool_datastack_create());
        auth_stream_reply_add(reply, "PASSL", NULL);
-       auth_stream_reply_add(reply, NULL, dec2str(request->passdb->id));
+       auth_stream_reply_add(reply, NULL, dec2str(request->passdb->passdb->id));
        auth_stream_reply_add(reply, NULL, request->credentials_scheme);
        auth_request_export(request, reply);
 
@@ -150,7 +150,7 @@ void passdb_blocking_set_credentials(struct auth_request *request,
 
        reply = auth_stream_reply_init(pool_datastack_create());
        auth_stream_reply_add(reply, "SETCRED", NULL);
-       auth_stream_reply_add(reply, NULL, dec2str(request->passdb->id));
+       auth_stream_reply_add(reply, NULL, dec2str(request->passdb->passdb->id));
        auth_stream_reply_add(reply, NULL, new_credentials);
        auth_request_export(request, reply);
 
index 2c8d190bd0bc2fe41ea281f48bb6608a7c6485d5..e22d33fddf9e8b1b61387cc3cced51fca56e3864 100644 (file)
@@ -157,17 +157,15 @@ void passdb_handle_credentials(enum passdb_result result,
 struct auth_passdb *
 passdb_preinit(struct auth *auth, struct auth_passdb_settings *set)
 {
+       static unsigned int auth_passdb_id = 0;
        struct passdb_module_interface *iface;
-        struct auth_passdb *auth_passdb, **dest;
+       struct auth_passdb *auth_passdb, **dest;
 
        auth_passdb = p_new(auth->pool, struct auth_passdb, 1);
        auth_passdb->pool = auth->pool;
-       auth_passdb->args = set->args == NULL ? "" :
-               p_strdup(auth->pool, set->args);
-       auth_passdb->deny = set->deny;
+       auth_passdb->set = set;
 
-       for (dest = &auth->passdbs; *dest != NULL; dest = &(*dest)->next)
-               auth_passdb->id++;
+       for (dest = &auth->passdbs; *dest != NULL; dest = &(*dest)->next) ;
        *dest = auth_passdb;
 
        iface = passdb_interface_find(set->driver);
@@ -179,9 +177,9 @@ passdb_preinit(struct auth *auth, struct auth_passdb_settings *set)
        }
 
        if (iface->preinit == NULL && iface->init == NULL &&
-           *auth_passdb->args != '\0') {
+           *set->args != '\0') {
                i_fatal("passdb %s: No args are supported: %s",
-                       set->driver, auth_passdb->args);
+                       set->driver, set->args);
        }
 
        if (iface->preinit == NULL) {
@@ -189,8 +187,9 @@ passdb_preinit(struct auth *auth, struct auth_passdb_settings *set)
                        p_new(auth->pool, struct passdb_module, 1);
        } else {
                auth_passdb->passdb =
-                       iface->preinit(auth_passdb, auth_passdb->args);
+                       iface->preinit(auth_passdb, set->args);
        }
+       auth_passdb->passdb->id = ++auth_passdb_id;
        auth_passdb->passdb->iface = *iface;
        return auth_passdb;
 }
@@ -198,7 +197,7 @@ passdb_preinit(struct auth *auth, struct auth_passdb_settings *set)
 void passdb_init(struct auth_passdb *passdb)
 {
        if (passdb->passdb->iface.init != NULL)
-               passdb->passdb->iface.init(passdb->passdb, passdb->args);
+               passdb->passdb->iface.init(passdb->passdb, passdb->set->args);
 
        i_assert(passdb->passdb->default_pass_scheme != NULL ||
                 passdb->passdb->cache_key == NULL);
index 21b5ab8d60eaf9d7d22ad99c5c4542124ce89b67..4b2400cc9fb0f4fc11773eb3063f204732a013c1 100644 (file)
@@ -61,6 +61,8 @@ struct passdb_module {
        /* If blocking is set to TRUE, use child processes to access
           this passdb. */
        bool blocking;
+        /* id is used by blocking passdb to identify the passdb */
+       unsigned int id;
 
        struct passdb_module_interface iface;
 };
index b6371f47a87422363e9433e301f72b9272f53fea..45b7c7d1aec347f4de2db66fe18ccb72943b0cd1 100644 (file)
@@ -44,7 +44,7 @@ void userdb_blocking_lookup(struct auth_request *request)
 
        reply = auth_stream_reply_init(pool_datastack_create());
        auth_stream_reply_add(reply, "USER", NULL);
-       auth_stream_reply_add(reply, NULL, dec2str(request->userdb->num));
+       auth_stream_reply_add(reply, NULL, dec2str(request->userdb->userdb->id));
        auth_request_export(request, reply);
 
        auth_request_ref(request);
@@ -79,7 +79,7 @@ userdb_blocking_iter_init(struct auth_userdb *userdb,
 
        reply = auth_stream_reply_init(pool_datastack_create());
        auth_stream_reply_add(reply, "LIST", NULL);
-       auth_stream_reply_add(reply, NULL, dec2str(userdb->num));
+       auth_stream_reply_add(reply, NULL, dec2str(userdb->userdb->id));
 
        pool = pool_alloconly_create("userdb iter", 512);
        ctx = p_new(pool, struct blocking_userdb_iterate_context, 1);
index 13e44b22d48f5a5d448302b5aab8867080e7d556..5475cf885fee4f1f20d3d48545c4b8b4a84d8d3f 100644 (file)
@@ -108,16 +108,15 @@ gid_t userdb_parse_gid(struct auth_request *request, const char *str)
 
 void userdb_preinit(struct auth *auth, struct auth_userdb_settings *set)
 {
+       static unsigned int auth_userdb_id = 0;
        struct userdb_module_interface *iface;
         struct auth_userdb *auth_userdb, **dest;
 
        auth_userdb = p_new(auth->pool, struct auth_userdb, 1);
        auth_userdb->pool = auth->pool;
-       auth_userdb->args = set->args == NULL ? "" :
-               p_strdup(auth->pool, set->args);
+       auth_userdb->set = set;
 
-       for (dest = &auth->userdbs; *dest != NULL; dest = &(*dest)->next)
-               auth_userdb->num++;
+       for (dest = &auth->userdbs; *dest != NULL; dest = &(*dest)->next) ;
        *dest = auth_userdb;
 
        iface = userdb_interface_find(set->driver);
@@ -129,9 +128,9 @@ void userdb_preinit(struct auth *auth, struct auth_userdb_settings *set)
        }
 
        if (iface->preinit == NULL && iface->init == NULL &&
-           *auth_userdb->args != '\0') {
+           *auth_userdb->set->args != '\0') {
                i_fatal("userdb %s: No args are supported: %s",
-                       set->driver, auth_userdb->args);
+                       set->driver, auth_userdb->set->args);
        }
 
        if (iface->preinit == NULL) {
@@ -139,15 +138,16 @@ void userdb_preinit(struct auth *auth, struct auth_userdb_settings *set)
                        p_new(auth->pool, struct userdb_module, 1);
        } else {
                auth_userdb->userdb =
-                       iface->preinit(auth_userdb, auth_userdb->args);
+                       iface->preinit(auth_userdb, auth_userdb->set->args);
        }
+       auth_userdb->userdb->id = ++auth_userdb_id;
        auth_userdb->userdb->iface = iface;
 }
 
 void userdb_init(struct auth_userdb *userdb)
 {
        if (userdb->userdb->iface->init != NULL)
-               userdb->userdb->iface->init(userdb->userdb, userdb->args);
+               userdb->userdb->iface->init(userdb->userdb, userdb->set->args);
 }
 
 void userdb_deinit(struct auth_userdb *userdb)
index b6ebf4a3064f43c447dc61663281a28cc2d1975a..5aaf65d941883f26aa1449358f2e30e053fbe931 100644 (file)
@@ -27,6 +27,8 @@ struct userdb_module {
        /* If blocking is set to TRUE, use child processes to access
           this userdb. */
        bool blocking;
+        /* id is used by blocking userdb to identify the userdb */
+       unsigned int id;
 
        const struct userdb_module_interface *iface;
 };