From: Kevin Wasserman Date: Mon, 21 May 2012 11:39:33 +0000 (-0400) Subject: Implement cccol iterators for mslsa X-Git-Tag: krb5-1.11-alpha1~404 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=218193bb93d8cf9fd82087533c45602b6a8c5151;p=thirdparty%2Fkrb5.git Implement cccol iterators for mslsa Also implement switch_to stub Signed-off-by: Kevin Wasserman ticket: 7213 (new) tags: pullup --- diff --git a/src/lib/krb5/ccache/cc_mslsa.c b/src/lib/krb5/ccache/cc_mslsa.c index 3d579d6e8e..9c4ec50e83 100644 --- a/src/lib/krb5/ccache/cc_mslsa.c +++ b/src/lib/krb5/ccache/cc_mslsa.c @@ -2735,6 +2735,58 @@ krb5_lcc_get_flags(krb5_context context, krb5_ccache id, krb5_flags *flags) return KRB5_OK; } +struct krb5int_lcc_iterator { + int id; +}; + +static krb5_error_code KRB5_CALLCONV +krb5_lcc_ptcursor_new(krb5_context context, krb5_cc_ptcursor *cursor) +{ + krb5_cc_ptcursor new_cursor = (krb5_cc_ptcursor )malloc(sizeof(*new_cursor)); + if (!new_cursor) + return ENOMEM; + new_cursor->ops = &krb5_lcc_ops; + new_cursor->data = (krb5_pointer)(1); + *cursor = new_cursor; + new_cursor = NULL; + return 0; +} + +static krb5_error_code KRB5_CALLCONV +krb5_lcc_ptcursor_next(krb5_context context, krb5_cc_ptcursor cursor, krb5_ccache *ccache) +{ + krb5_error_code code = 0; + *ccache = 0; + if (cursor->data == NULL) + return 0; + + cursor->data = NULL; + if ((code = krb5_lcc_resolve(context, ccache, ""))) { + if (code != KRB5_FCC_NOFILE) + /* Note that we only want to return serious errors. + * Any non-zero return code will prevent the cccol iterator + * from advancing to the next ccache collection. */ + return code; + } + return 0; +} + +static krb5_error_code KRB5_CALLCONV +krb5_lcc_ptcursor_free(krb5_context context, krb5_cc_ptcursor *cursor) +{ + if (*cursor) { + free(*cursor); + *cursor = NULL; + } + return 0; +} + +static krb5_error_code KRB5_CALLCONV +krb5_lcc_switch_to(krb5_context context, krb5_ccache id) +{ + return 0; +} + const krb5_cc_ops krb5_lcc_ops = { 0, "MSLSA", @@ -2753,12 +2805,14 @@ const krb5_cc_ops krb5_lcc_ops = { krb5_lcc_remove_cred, krb5_lcc_set_flags, krb5_lcc_get_flags, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, + krb5_lcc_ptcursor_new, + krb5_lcc_ptcursor_next, + krb5_lcc_ptcursor_free, + NULL, /* move */ + NULL, /* lastchange */ + NULL, /* wasdefault */ + NULL, /* lock */ + NULL, /* unlock */ + krb5_lcc_switch_to, }; #endif /* _WIN32 */