]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Revisit inquire_attrs_for_mech on old mechs 426/head
authorGreg Hudson <ghudson@mit.edu>
Tue, 15 Mar 2016 21:45:26 +0000 (17:45 -0400)
committerGreg Hudson <ghudson@mit.edu>
Thu, 17 Mar 2016 00:43:08 +0000 (20:43 -0400)
In gss_inquire_attrs_for_mech(), if the mech does not implement RFC
5587, return success with empty mech_attrs and known_mech_attrs sets
to indicate a lack of knowledge for all attributes.  The previous
behavior of returning an error caused gss_indicate_mechs_by_attr() to
fail out in the presence of an old mechanism, in turn causing
gss_acquire_cred() and SPNEGO to break.

ticket: 8358

src/lib/gssapi/mechglue/g_mechattr.c

index 08a60086cea52b18c4aa13e8eb43c6531f6af830..e49651eb6ade429172284b833f51cea4755649d1 100644 (file)
@@ -181,8 +181,12 @@ gss_inquire_attrs_for_mech(
     mech = gssint_get_mechanism(selected_mech);
     if (mech == NULL)
         return GSS_S_BAD_MECH;
-    else if (mech->gss_inquire_attrs_for_mech == NULL)
-        return GSS_S_UNAVAILABLE;
+
+    /* If the mech does not implement RFC 5587, return success with an empty
+     * mech_attrs and known_mech_attrs. */
+    if (mech->gss_inquire_attrs_for_mech == NULL)
+        return GSS_S_COMPLETE;
+
     public_mech = gssint_get_public_oid(selected_mech);
     status = mech->gss_inquire_attrs_for_mech(minor, public_mech, mech_attrs,
                                               known_mech_attrs);