]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: mech_gssapi_unwrap() - Release gss_release_buffe(outbuf) before returning
authorMarco Bettini <marco.bettini@open-xchange.com>
Fri, 5 May 2023 15:20:34 +0000 (15:20 +0000)
committerDovecot Automation <automation@dovecot.org>
Fri, 12 May 2023 09:16:02 +0000 (09:16 +0000)
src/auth/mech-gssapi.c

index e9f2af2f2bc7bd4369adf352f9ceaa9465efde46..5ed8edbde18e6e77ba9baad624bf25f97af78aa7 100644 (file)
@@ -602,6 +602,7 @@ mech_gssapi_unwrap(struct gssapi_auth_request *request, gss_buffer_desc inbuf)
        if (outbuf.length < 4) {
                e_error(auth_request->mech_event,
                        "Invalid response length");
+               (void)gss_release_buffer(&minor_status, &outbuf);
                return -1;
        }
 
@@ -612,6 +613,7 @@ mech_gssapi_unwrap(struct gssapi_auth_request *request, gss_buffer_desc inbuf)
                if (data_has_nuls(name, name_len)) {
                        e_info(auth_request->mech_event,
                               "authz_name has NULs");
+                       (void)gss_release_buffer(&minor_status, &outbuf);
                        return -1;
                }
 
@@ -621,13 +623,16 @@ mech_gssapi_unwrap(struct gssapi_auth_request *request, gss_buffer_desc inbuf)
                request->authz_name = duplicate_name(auth_request,
                                                     request->authn_name);
                if (get_display_name(auth_request, request->authz_name,
-                                    NULL, &login_user) < 0)
+                                    NULL, &login_user) < 0) {
+                       (void)gss_release_buffer(&minor_status, &outbuf);
                        return -1;
+               }
        }
 
        if (request->authz_name == GSS_C_NO_NAME) {
                e_info(auth_request->mech_event,
                       "no authz_name");
+               (void)gss_release_buffer(&minor_status, &outbuf);
                return -1;
        }
 
@@ -639,6 +644,7 @@ mech_gssapi_unwrap(struct gssapi_auth_request *request, gss_buffer_desc inbuf)
        if (!auth_request_set_username(auth_request, login_user, &error)) {
                e_info(auth_request->mech_event,
                       "authz_name: %s", error);
+               (void)gss_release_buffer(&minor_status, &outbuf);
                return -1;
        }
 
@@ -647,6 +653,7 @@ mech_gssapi_unwrap(struct gssapi_auth_request *request, gss_buffer_desc inbuf)
        auth_request->passdb_success = TRUE; /* default to success */
        auth_request_lookup_credentials(&request->auth_request, "",
                                        gssapi_credentials_callback);
+       (void)gss_release_buffer(&minor_status, &outbuf);
        return 0;
 }