diff options
author | Greg Hudson <ghudson@mit.edu> | 2018-08-01 15:53:12 -0400 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2019-01-06 20:06:38 -0500 |
commit | 51246e3c5b1f7650660d562669228d5b6fe26796 (patch) | |
tree | 62093cf161f58fe0675dc2af11e714544cc60dcc | |
parent | 35a964aa8390dcc427cd5610335895aec41e4b2e (diff) | |
download | krb5-51246e3c5b1f7650660d562669228d5b6fe26796.zip krb5-51246e3c5b1f7650660d562669228d5b6fe26796.tar.gz krb5-51246e3c5b1f7650660d562669228d5b6fe26796.tar.bz2 |
Don't include all MEMORY ccaches in collection
In the MEMORY ccache implementation, only yield a cache in the
per-type cursor if it is the context default cache, matching the
behavior of FILE after commit 45360c9688ca963f75a2480f2cf818424fc3dc7b
(ticket 6955).
(cherry picked from commit 49bb627fed70c5258c151c5135ac3d95ed1ee55d)
ticket: 8720
version_fixed: 1.15.5
-rw-r--r-- | src/lib/krb5/ccache/cc_memory.c | 23 | ||||
-rwxr-xr-x | src/lib/krb5/ccache/t_cccol.py | 7 |
2 files changed, 13 insertions, 17 deletions
diff --git a/src/lib/krb5/ccache/cc_memory.c b/src/lib/krb5/ccache/cc_memory.c index 0cd79e8..c925b5b 100644 --- a/src/lib/krb5/ccache/cc_memory.c +++ b/src/lib/krb5/ccache/cc_memory.c @@ -132,7 +132,7 @@ struct mcc_cursor { /* Iterator over memory caches. */ struct krb5_mcc_ptcursor_data { - struct krb5_mcc_list_node *cur; + krb5_boolean first; }; k5_cc_mutex krb5int_mcc_mutex = K5_CC_MUTEX_PARTIAL_INITIALIZER; @@ -693,9 +693,7 @@ krb5_mcc_ptcursor_new( return ENOMEM; } n->data = cdata; - k5_cc_mutex_lock(context, &krb5int_mcc_mutex); - cdata->cur = mcc_head; - k5_cc_mutex_unlock(context, &krb5int_mcc_mutex); + cdata->first = TRUE; *cursor = n; return 0; } @@ -707,22 +705,19 @@ krb5_mcc_ptcursor_next( krb5_ccache *ccache) { struct krb5_mcc_ptcursor_data *cdata = NULL; + const char *defname; *ccache = NULL; cdata = cursor->data; - if (cdata->cur == NULL) + if (!cdata->first) return 0; + cdata->first = FALSE; - *ccache = malloc(sizeof(**ccache)); - if (*ccache == NULL) - return ENOMEM; + defname = krb5_cc_default_name(context); + if (defname == NULL || strncmp(defname, "MEMORY:", 7) != 0) + return 0; - (*ccache)->ops = &krb5_mcc_ops; - (*ccache)->data = cdata->cur->cache; - k5_cc_mutex_lock(context, &krb5int_mcc_mutex); - cdata->cur = cdata->cur->next; - k5_cc_mutex_unlock(context, &krb5int_mcc_mutex); - return 0; + return krb5_cc_resolve(context, defname, ccache); } static krb5_error_code KRB5_CALLCONV diff --git a/src/lib/krb5/ccache/t_cccol.py b/src/lib/krb5/ccache/t_cccol.py index f7f1785..c6d5f51 100755 --- a/src/lib/krb5/ccache/t_cccol.py +++ b/src/lib/krb5/ccache/t_cccol.py @@ -97,10 +97,11 @@ if test_keyring: mfoo = 'MEMORY:foo' mbar = 'MEMORY:bar' -cursor_test('filemem', [fccname, mfoo, mbar], [fccname, mfoo, mbar]) -cursor_test('dirmem', [dccname, mfoo], [duser, dalice, dbob, mfoo]) +cursor_test('filemem', [fccname, mfoo], [fccname]) +cursor_test('dirmem', [dccname, mfoo], [duser, dalice, dbob]) +cursor_test('mem', [mfoo, mbar], [mfoo]) if test_keyring: - cursor_test('keyringmem', [krccname, mfoo], [kruser, kralice, krbob, mfoo]) + cursor_test('keyringmem', [krccname, mfoo], [kruser, kralice, krbob]) # Test krb5_cccol_have_content. realm.run(['./t_cccursor', dccname, 'CONTENT']) |