]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: db-oauth2 - Refactor "OAuth2 token missing from reply" code path
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 26 May 2020 21:44:16 +0000 (00:44 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Mon, 7 Dec 2020 08:59:28 +0000 (08:59 +0000)
It can be NULL only when coming from db_oauth2_lookup_passwd_grant(),
so handle it there.

src/auth/db-oauth2.c

index 511be05a8760d7341c881c50ea8d455d37a68c26..5f9e3a2b2d03b517f3336eb64405c7e53b5b6040 100644 (file)
@@ -681,6 +681,7 @@ db_oauth2_lookup_continue(struct oauth2_request_result *result,
        enum passdb_result passdb_result;
        const char *error;
 
+       i_assert(req->token != NULL);
        req->req = NULL;
 
        if (result->error != NULL) {
@@ -691,12 +692,8 @@ db_oauth2_lookup_continue(struct oauth2_request_result *result,
                error = "Invalid token";
        } else {
                db_oauth2_fields_merge(req, result->fields);
-               if (req->token == NULL) {
-                       db_oauth2_callback(req, PASSDB_RESULT_INTERNAL_FAILURE,
-                                          "OAuth2 token missing from reply");
-                       return;
-               } else if (db_oauth2_have_all_fields(req) &&
-                          !req->db->set.force_introspection) {
+               if (db_oauth2_have_all_fields(req) &&
+                   !req->db->set.force_introspection) {
                        /* pass */
                } else if (req->db->oauth2_set.introspection_mode == INTROSPECTION_MODE_LOCAL) {
                        db_oauth2_local_validation(req, req->token);
@@ -747,7 +744,12 @@ db_oauth2_lookup_passwd_grant(struct oauth2_request_result *result,
                array_foreach(result->fields, f)
                        if (strcmp(f->name, "access_token") == 0)
                                req->token = p_strdup(req->pool, f->value);
-               db_oauth2_lookup_continue(result, req);
+               if (req->token == NULL) {
+                       db_oauth2_callback(req, PASSDB_RESULT_INTERNAL_FAILURE,
+                                          "OAuth2 token missing from reply");
+               } else {
+                       db_oauth2_lookup_continue(result, req);
+               }
        }
 }