--- lib/krb5/fcache.c 2004-03-10 14:30:59.000000000 +0100 +++ lib/krb5/fcache.c 2004-04-14 16:59:56.581797648 +0200 @@ -618,7 +618,45 @@ krb5_flags which, krb5_creds *cred) { - return 0; /* XXX */ + int i=0; + int c=0; + int ret=0; + + krb5_cc_cursor cursor; + krb5_creds current_cred; + krb5_creds *buffer=NULL; + krb5_principal principal; + + fcc_get_first(context, id, &cursor); + do { + if( (ret=fcc_get_next(context, id, &cursor, ¤t_cred)) == 0 ) { + if(!krb5_compare_creds(context, which, cred, ¤t_cred)) { + buffer = (krb5_creds *) realloc(buffer,sizeof(current_cred)*(c+1)); + if (buffer==NULL) goto cleanup; + memcpy(&buffer[c++],¤t_cred,sizeof(current_cred)); + } + } else { + if ( ret != KRB5_CC_END ) goto cleanup; + } + } while (ret != KRB5_CC_END); + + fcc_end_get(context, id, &cursor); + fcc_get_principal(context, id, &principal); + + fcc_destroy(context, id); + + fcc_initialize(context, id, principal); + + for(i=0;i