]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Fix SPNEGO fallback context handling
authorGreg Hudson <ghudson@mit.edu>
Mon, 11 Nov 2019 17:25:41 +0000 (12:25 -0500)
committerGreg Hudson <ghudson@mit.edu>
Mon, 9 Dec 2019 22:02:52 +0000 (17:02 -0500)
In init_ctx_call_init(), if gss_init_sec_context() fails while
producing the first SPNEGO initiator token, we remove the first
candidate mechanism from sc->mech_set and try again.  If
sc->ctx_handle is present after the error (more likely after commit
56f7b1bc95a2a3eeb420e069e7655fb181ade5cf), we must clear it before
falling back or it will cause subsequent attempts to fail.

(cherry picked from commit 40ecfad10dd36700028ff0f3d0d79ce7925fe545)

ticket: 8846
version_fixed: 1.17.1

src/lib/gssapi/spnego/spnego_mech.c

index 9d6027ce8058de79d0af45911797a4643fd6d5d3..efcec2dda2ddc12ed0ac8df919efa61d053ed95e 100644 (file)
@@ -982,6 +982,7 @@ init_ctx_call_init(OM_uint32 *minor_status,
        gss_release_buffer(&tmpmin, &sc->DER_mechTypes);
        if (put_mech_set(sc->mech_set, &sc->DER_mechTypes) < 0)
                goto fail;
+       gss_delete_sec_context(&tmpmin, &sc->ctx_handle, GSS_C_NO_BUFFER);
        tmpret = init_ctx_call_init(&tmpmin, sc, spcred, target_name,
                                    req_flags, time_req, mechtok_in,
                                    actual_mech, mechtok_out, ret_flags,