]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Continue after KRB5_CC_END in KCM cache iteration
authorFabiano FidĂȘncio <fidencio@redhat.com>
Wed, 28 Mar 2018 16:27:06 +0000 (18:27 +0200)
committerGreg Hudson <ghudson@mit.edu>
Wed, 2 May 2018 01:20:40 +0000 (21:20 -0400)
The KCM server returns KRB5_CC_END in response to a GET_CACHE_BY_UUID
request to indicate that the specified ccache uuid no longer exists.
In krb5_ptcursor_next(), ignore this error and continue the iteration,
as the Heimdal KCM client code does.

In addition to addressing the case where a third party deletes a cache
between the GET_CACHE_UUID_LIST request and when we reach that uuid in
the iteration, this change also fixes a bug in kdestroy -A where the
caller deletes the primary cache and we later request it by uuid when
iterating over the list.

[ghudson@mit.edu: rewrote commit message; edited comment]

(cherry picked from commit 49087f5e6309f298f8898c35af6f4ade418ced60)

ticket: 8658
version_fixed: 1.15.3

src/lib/krb5/ccache/cc_kcm.c

index a889e67b44926e555ba0c7d1c53be4fc69858964..a3afd7056bff3aa0cecf71ff3483fce8cab7b9ad 100644 (file)
@@ -966,6 +966,9 @@ kcm_ptcursor_next(krb5_context context, krb5_cc_ptcursor cursor,
         kcmreq_init(&req, KCM_OP_GET_CACHE_BY_UUID, NULL);
         k5_buf_add_len(&req.reqbuf, id, KCM_UUID_LEN);
         ret = kcmio_call(context, data->io, &req);
+        /* Continue if the cache has been deleted. */
+        if (ret == KRB5_CC_END)
+            continue;
         if (ret)
             goto cleanup;
         ret = kcmreq_get_name(&req, &name);