diff options
author | Kevin Wasserman <kevin.wasserman@painless-security.com> | 2012-05-21 07:39:33 -0400 |
---|---|---|
committer | Sam Hartman <hartmans@mit.edu> | 2012-07-16 09:32:32 -0400 |
commit | 218193bb93d8cf9fd82087533c45602b6a8c5151 (patch) | |
tree | ac62f020df280f1ba84921b82963f8bf458a82c2 /src | |
parent | 7acb524f5aa00274771dbbfac19d2dd779aad409 (diff) | |
download | krb5-218193bb93d8cf9fd82087533c45602b6a8c5151.tar.gz krb5-218193bb93d8cf9fd82087533c45602b6a8c5151.tar.xz krb5-218193bb93d8cf9fd82087533c45602b6a8c5151.zip |
Implement cccol iterators for mslsa
Also implement switch_to stub
Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
ticket: 7213 (new)
tags: pullup
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/krb5/ccache/cc_mslsa.c | 68 |
1 files changed, 61 insertions, 7 deletions
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 */ |