]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: oauth2 - make it easier to see where db_oauth2_callback() is called
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 15 Mar 2017 22:51:15 +0000 (00:51 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 15 Mar 2017 23:38:22 +0000 (01:38 +0200)
Doesn't fix anything, but places the db_oauth2_callback() calls into the end
of _continue() calls so it's clearer that they're always being called
exactly once.

src/auth/db-oauth2.c

index 0a3d4ee8f9a1bf156f87a2c0cffabb72249406f2..4a43401b9f964d4337622be379856844e48f7c82 100644 (file)
@@ -505,35 +505,40 @@ db_oauth2_token_in_scope(struct db_oauth2_request *req,
        return TRUE;
 }
 
-static void db_oauth2_process_fields(struct db_oauth2_request *req)
+static void db_oauth2_process_fields(struct db_oauth2_request *req,
+                                    enum passdb_result *result_r,
+                                    const char **error_r)
 {
-       enum passdb_result result;
-       const char *error = NULL;
-       if (db_oauth2_validate_username(req, &result, &error) &&
-           db_oauth2_user_is_enabled(req, &result, &error) &&
-           db_oauth2_token_in_scope(req, &result, &error) &&
-           db_oauth2_template_export(req, &result, &error)) {
-               result = PASSDB_RESULT_OK;
+       *error_r = NULL;
+
+       if (db_oauth2_validate_username(req, result_r, error_r) &&
+           db_oauth2_user_is_enabled(req, result_r, error_r) &&
+           db_oauth2_token_in_scope(req, result_r, error_r) &&
+           db_oauth2_template_export(req, result_r, error_r)) {
+               *result_r = PASSDB_RESULT_OK;
        } else {
-               i_assert(result != PASSDB_RESULT_OK && error != NULL);
+               i_assert(*result_r != PASSDB_RESULT_OK && *error_r != NULL);
        }
-
-       db_oauth2_callback(req, result, error);
 }
 
 static void
 db_oauth2_introspect_continue(struct oauth2_introspection_result *result,
                              struct db_oauth2_request *req)
 {
+       enum passdb_result passdb_result;
+       const char *error;
+
        req->req = NULL;
 
        if (!result->success) {
                /* fail here */
-               db_oauth2_callback(req, PASSDB_RESULT_INTERNAL_FAILURE, result->error);
-               return;
+               passdb_result = PASSDB_RESULT_INTERNAL_FAILURE;
+               error = result->error;
+       } else {
+               db_oauth2_fields_merge(req, result->fields);
+               db_oauth2_process_fields(req, &passdb_result, &error);
        }
-       db_oauth2_fields_merge(req, result->fields);
-       db_oauth2_process_fields(req);
+       db_oauth2_callback(req, passdb_result, error);
 }
 
 static void db_oauth2_lookup_introspect(struct db_oauth2_request *req)
@@ -560,27 +565,28 @@ static void
 db_oauth2_lookup_continue(struct oauth2_token_validation_result *result,
                          struct db_oauth2_request *req)
 {
+       enum passdb_result passdb_result;
+       const char *error;
+
        req->req = NULL;
 
        if (!result->success) {
-               db_oauth2_callback(req, PASSDB_RESULT_INTERNAL_FAILURE,
-                                  result->error);
-               return;
+               passdb_result = PASSDB_RESULT_INTERNAL_FAILURE;
+               error = result->error;
        } else if (!result->valid) {
-               db_oauth2_callback(req, PASSDB_RESULT_PASSWORD_MISMATCH,
-                                  "Invalid token");
-               return;
-       }
-
-       db_oauth2_fields_merge(req, result->fields);
-
-       if (*req->db->set.introspection_url != '\0' &&
-           (req->db->set.force_introspection ||
-            !db_oauth2_have_all_fields(req))) {
-               db_oauth2_lookup_introspect(req);
+               passdb_result = PASSDB_RESULT_PASSWORD_MISMATCH;
+               error = "Invalid token";
        } else {
-               db_oauth2_process_fields(req);
+               db_oauth2_fields_merge(req, result->fields);
+               if (*req->db->set.introspection_url != '\0' &&
+                   (req->db->set.force_introspection ||
+                    !db_oauth2_have_all_fields(req))) {
+                       db_oauth2_lookup_introspect(req);
+                       return;
+               }
+               db_oauth2_process_fields(req, &passdb_result, &error);
        }
+       db_oauth2_callback(req, passdb_result, error);
 }
 
 #undef db_oauth2_lookup