1 /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2 #include "k5-int.h"
3 
4 krb5_error_code KRB5_CALLCONV
krb5_cc_copy_creds(krb5_context context,krb5_ccache incc,krb5_ccache outcc)5 krb5_cc_copy_creds(krb5_context context, krb5_ccache incc, krb5_ccache outcc)
6 {
7     krb5_error_code code;
8     krb5_cc_cursor cur = 0;
9     krb5_creds creds;
10 
11     if ((code = krb5_cc_start_seq_get(context, incc, &cur)))
12         goto cleanup;
13 
14     while (!(code = krb5_cc_next_cred(context, incc, &cur, &creds))) {
15         code = krb5_cc_store_cred(context, outcc, &creds);
16         krb5_free_cred_contents(context, &creds);
17         if (code)
18             goto cleanup;
19     }
20 
21     if (code != KRB5_CC_END)
22         goto cleanup;
23 
24     code = krb5_cc_end_seq_get(context, incc, &cur);
25     cur = 0;
26     if (code)
27         goto cleanup;
28 
29     code = 0;
30 
31 cleanup:
32     /* If set then we are in an error pathway */
33     if (cur)
34         krb5_cc_end_seq_get(context, incc, &cur);
35 
36     return(code);
37 }
38