Add option --list-caches that lists the avaible caches and their status.
$ klist --list-caches Principal Cache name Status lha@E.KTH.SE 2 Valid lha@SU.SE 1 Expired lha/root@SU.SE 0 Expired lha@N.L.NXS.SE Initial default ccache Expired git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16114 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -59,6 +59,8 @@ printable_time_long(time_t t)
|
|||||||
#define COL_FLAGS "Flags"
|
#define COL_FLAGS "Flags"
|
||||||
#define COL_PRINCIPAL " Principal"
|
#define COL_PRINCIPAL " Principal"
|
||||||
#define COL_PRINCIPAL_KVNO " Principal (kvno)"
|
#define COL_PRINCIPAL_KVNO " Principal (kvno)"
|
||||||
|
#define COL_CACHENAME " Cache name"
|
||||||
|
#define COL_STATUS " Status"
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_cred(krb5_context context, krb5_creds *cred, rtbl_t ct, int do_flags)
|
print_cred(krb5_context context, krb5_creds *cred, rtbl_t ct, int do_flags)
|
||||||
@@ -596,17 +598,82 @@ display_v5_ccache (const char *cred_cache, int do_test, int do_verbose,
|
|||||||
return exit_status;
|
return exit_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int version_flag = 0;
|
/*
|
||||||
static int help_flag = 0;
|
*
|
||||||
static int do_verbose = 0;
|
*/
|
||||||
static int do_test = 0;
|
|
||||||
|
static int
|
||||||
|
list_caches(void)
|
||||||
|
{
|
||||||
|
krb5_cc_cache_cursor cursor;
|
||||||
|
krb5_context context;
|
||||||
|
krb5_error_code ret;
|
||||||
|
krb5_ccache id;
|
||||||
|
rtbl_t ct;
|
||||||
|
|
||||||
|
ret = krb5_init_context (&context);
|
||||||
|
if (ret)
|
||||||
|
errx (1, "krb5_init_context failed: %d", ret);
|
||||||
|
|
||||||
|
ret = krb5_cc_cache_get_first (context, NULL, &cursor);
|
||||||
|
if (ret == KRB5_CC_NOSUPP)
|
||||||
|
return 0;
|
||||||
|
else if (ret)
|
||||||
|
krb5_err (context, 1, ret, "krb5_cc_cache_get_first");
|
||||||
|
|
||||||
|
ct = rtbl_create();
|
||||||
|
rtbl_add_column(ct, COL_PRINCIPAL, 0);
|
||||||
|
rtbl_add_column(ct, COL_CACHENAME, 0);
|
||||||
|
rtbl_add_column(ct, COL_STATUS, 0);
|
||||||
|
rtbl_set_prefix(ct, " ");
|
||||||
|
rtbl_set_column_prefix(ct, COL_PRINCIPAL, "");
|
||||||
|
|
||||||
|
while ((ret = krb5_cc_cache_next (context, cursor, &id)) == 0) {
|
||||||
|
krb5_principal principal;
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
ret = krb5_cc_get_principal(context, id, &principal);
|
||||||
|
if (ret == 0) {
|
||||||
|
int expired = check_for_tgt (context, id, principal);
|
||||||
|
|
||||||
|
ret = krb5_unparse_name(context, principal, &name);
|
||||||
|
if (ret == 0) {
|
||||||
|
rtbl_add_column_entry(ct, COL_PRINCIPAL, name);
|
||||||
|
rtbl_add_column_entry(ct, COL_CACHENAME,
|
||||||
|
krb5_cc_get_name(context, id));
|
||||||
|
rtbl_add_column_entry(ct, COL_STATUS,
|
||||||
|
expired ? "Expired" : "Valid");
|
||||||
|
free(name);
|
||||||
|
krb5_free_principal(context, principal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
krb5_cc_close(context, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
krb5_cc_cache_end_seq_get(context, cursor);
|
||||||
|
|
||||||
|
rtbl_format(ct, stdout);
|
||||||
|
rtbl_destroy(ct);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int version_flag = 0;
|
||||||
|
static int help_flag = 0;
|
||||||
|
static int do_verbose = 0;
|
||||||
|
static int do_list_caches = 0;
|
||||||
|
static int do_test = 0;
|
||||||
#ifdef KRB4
|
#ifdef KRB4
|
||||||
static int do_v4 = 1;
|
static int do_v4 = 1;
|
||||||
#endif
|
#endif
|
||||||
static int do_tokens = 0;
|
static int do_tokens = 0;
|
||||||
static int do_v5 = 1;
|
static int do_v5 = 1;
|
||||||
static char *cred_cache;
|
static char *cred_cache;
|
||||||
static int do_flags = 0;
|
static int do_flags = 0;
|
||||||
|
|
||||||
static struct getargs args[] = {
|
static struct getargs args[] = {
|
||||||
{ NULL, 'f', arg_flag, &do_flags },
|
{ NULL, 'f', arg_flag, &do_flags },
|
||||||
@@ -623,6 +690,8 @@ static struct getargs args[] = {
|
|||||||
"display AFS tokens", NULL },
|
"display AFS tokens", NULL },
|
||||||
{ "v5", '5', arg_flag, &do_v5,
|
{ "v5", '5', arg_flag, &do_v5,
|
||||||
"display v5 cred cache", NULL},
|
"display v5 cred cache", NULL},
|
||||||
|
{ "list-caches", 'v', arg_flag, &do_list_caches,
|
||||||
|
"verbose output", NULL },
|
||||||
{ "verbose", 'v', arg_flag, &do_verbose,
|
{ "verbose", 'v', arg_flag, &do_verbose,
|
||||||
"verbose output", NULL },
|
"verbose output", NULL },
|
||||||
{ NULL, 'a', arg_flag, &do_verbose },
|
{ NULL, 'a', arg_flag, &do_verbose },
|
||||||
@@ -668,6 +737,11 @@ main (int argc, char **argv)
|
|||||||
if (argc != 0)
|
if (argc != 0)
|
||||||
usage (1);
|
usage (1);
|
||||||
|
|
||||||
|
if (do_list_caches) {
|
||||||
|
exit_status = list_caches();
|
||||||
|
return exit_status;
|
||||||
|
}
|
||||||
|
|
||||||
if (do_v5)
|
if (do_v5)
|
||||||
exit_status = display_v5_ccache (cred_cache, do_test,
|
exit_status = display_v5_ccache (cred_cache, do_test,
|
||||||
do_verbose, do_flags);
|
do_verbose, do_flags);
|
||||||
|
Reference in New Issue
Block a user