use rtbl to format cred listing
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@8625 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
113
kuser/klist.c
113
kuser/klist.c
@@ -32,6 +32,7 @@
|
||||
*/
|
||||
|
||||
#include "kuser_locl.h"
|
||||
#include "rtbl.h"
|
||||
|
||||
RCSID("$Id$");
|
||||
|
||||
@@ -53,8 +54,13 @@ printable_time_long(time_t t)
|
||||
return s;
|
||||
}
|
||||
|
||||
#define COL_ISSUED " Issued"
|
||||
#define COL_EXPIRES " Expires"
|
||||
#define COL_FLAGS "Flags"
|
||||
#define COL_PRINCIPAL " Principal"
|
||||
|
||||
static void
|
||||
print_cred(krb5_context context, krb5_creds *cred)
|
||||
print_cred(krb5_context context, krb5_creds *cred, rtbl_t ct, int do_flags)
|
||||
{
|
||||
char *str;
|
||||
krb5_error_code ret;
|
||||
@@ -62,20 +68,47 @@ print_cred(krb5_context context, krb5_creds *cred)
|
||||
|
||||
krb5_timeofday (context, &sec);
|
||||
|
||||
|
||||
if(cred->times.starttime)
|
||||
printf ("%s ", printable_time(cred->times.starttime));
|
||||
rtbl_add_column_entry(ct, COL_ISSUED,
|
||||
printable_time(cred->times.starttime));
|
||||
else
|
||||
printf ("%s ", printable_time(cred->times.authtime));
|
||||
rtbl_add_column_entry(ct, COL_ISSUED,
|
||||
printable_time(cred->times.authtime));
|
||||
|
||||
if(cred->times.endtime > sec)
|
||||
printf ("%s ", printable_time(cred->times.endtime));
|
||||
rtbl_add_column_entry(ct, COL_EXPIRES,
|
||||
printable_time(cred->times.endtime));
|
||||
else
|
||||
printf ("%-15s ", ">>>Expired<<<");
|
||||
rtbl_add_column_entry(ct, COL_EXPIRES, ">>>Expired<<<");
|
||||
ret = krb5_unparse_name (context, cred->server, &str);
|
||||
if (ret)
|
||||
krb5_err(context, 1, ret, "krb5_unparse_name");
|
||||
printf ("%s\n", str);
|
||||
free (str);
|
||||
rtbl_add_column_entry(ct, COL_PRINCIPAL, str);
|
||||
if(do_flags) {
|
||||
char s[16], *sp = s;
|
||||
if(cred->flags.b.forwardable)
|
||||
*sp++ = 'F';
|
||||
if(cred->flags.b.forwarded)
|
||||
*sp++ = 'f';
|
||||
if(cred->flags.b.proxiable)
|
||||
*sp++ = 'P';
|
||||
if(cred->flags.b.proxy)
|
||||
*sp++ = 'p';
|
||||
if(cred->flags.b.may_postdate)
|
||||
*sp++ = 'D';
|
||||
if(cred->flags.b.postdated)
|
||||
*sp++ = 'd';
|
||||
if(cred->flags.b.renewable)
|
||||
*sp++ = 'R';
|
||||
if(cred->flags.b.initial)
|
||||
*sp++ = 'I';
|
||||
if(cred->flags.b.invalid)
|
||||
*sp++ = 'i';
|
||||
*sp++ = '\0';
|
||||
rtbl_add_column_entry(ct, COL_FLAGS, s);
|
||||
}
|
||||
free(str);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -175,13 +208,16 @@ static void
|
||||
print_tickets (krb5_context context,
|
||||
krb5_ccache ccache,
|
||||
krb5_principal principal,
|
||||
int do_verbose)
|
||||
int do_verbose,
|
||||
int do_flags)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
char *str;
|
||||
krb5_cc_cursor cursor;
|
||||
krb5_creds creds;
|
||||
|
||||
rtbl_t ct;
|
||||
|
||||
ret = krb5_unparse_name (context, principal, &str);
|
||||
if (ret)
|
||||
krb5_err (context, 1, ret, "krb5_unparse_name");
|
||||
@@ -221,9 +257,16 @@ print_tickets (krb5_context context,
|
||||
if (ret)
|
||||
krb5_err(context, 1, ret, "krb5_cc_start_seq_get");
|
||||
|
||||
if(!do_verbose)
|
||||
printf(" %-15s %-15s %s\n", "Issued", "Expires", "Principal");
|
||||
|
||||
if(!do_verbose) {
|
||||
ct = rtbl_create();
|
||||
rtbl_add_column(ct, COL_ISSUED, 0);
|
||||
rtbl_add_column(ct, COL_EXPIRES, 0);
|
||||
if(do_flags)
|
||||
rtbl_add_column(ct, COL_FLAGS, 0);
|
||||
rtbl_add_column(ct, COL_PRINCIPAL, 0);
|
||||
rtbl_set_prefix(ct, " ");
|
||||
rtbl_set_column_prefix(ct, COL_ISSUED, "");
|
||||
}
|
||||
while (krb5_cc_next_cred (context,
|
||||
ccache,
|
||||
&creds,
|
||||
@@ -231,13 +274,17 @@ print_tickets (krb5_context context,
|
||||
if(do_verbose){
|
||||
print_cred_verbose(context, &creds);
|
||||
}else{
|
||||
print_cred(context, &creds);
|
||||
print_cred(context, &creds, ct, do_flags);
|
||||
}
|
||||
krb5_free_creds_contents (context, &creds);
|
||||
}
|
||||
ret = krb5_cc_end_seq_get (context, ccache, &cursor);
|
||||
if (ret)
|
||||
krb5_err (context, 1, ret, "krb5_cc_end_seq_get");
|
||||
if(!do_verbose) {
|
||||
rtbl_format(ct, stdout);
|
||||
rtbl_destroy(ct);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -319,7 +366,9 @@ display_v4_tickets (int do_verbose)
|
||||
int ret;
|
||||
krb_principal princ;
|
||||
CREDENTIALS cred;
|
||||
int header = 1;
|
||||
int found = 0;
|
||||
|
||||
rtbl_t ct;
|
||||
|
||||
file = getenv ("KRBTKFILE");
|
||||
if (file == NULL)
|
||||
@@ -355,16 +404,18 @@ display_v4_tickets (int do_verbose)
|
||||
print_time_diff(do_verbose);
|
||||
printf("\n");
|
||||
|
||||
ct = rtbl_create();
|
||||
rtbl_add_column(ct, COL_ISSUED, 0);
|
||||
rtbl_add_column(ct, COL_EXPIRES, 0);
|
||||
rtbl_add_column(ct, COL_PRINCIPAL, 0);
|
||||
rtbl_set_prefix(ct, " ");
|
||||
rtbl_set_column_prefix(ct, COL_ISSUED, "");
|
||||
|
||||
while ((ret = tf_get_cred(&cred)) == KSUCCESS) {
|
||||
struct timeval tv;
|
||||
char buf1[20], buf2[20];
|
||||
found++;
|
||||
|
||||
if (header) {
|
||||
printf("%-15s %-15s %s%s\n",
|
||||
" Issued", " Expires", " Principal",
|
||||
do_verbose ? " (kvno)" : "");
|
||||
header = 0;
|
||||
}
|
||||
strlcpy(buf1,
|
||||
short_date(cred.issue_date),
|
||||
sizeof(buf1));
|
||||
@@ -378,15 +429,16 @@ display_v4_tickets (int do_verbose)
|
||||
strlcpy(buf2,
|
||||
">>> Expired <<<",
|
||||
sizeof(buf2));
|
||||
printf("%s %s ", buf1, buf2);
|
||||
printf("%s", krb_unparse_name_long(cred.service,
|
||||
rtbl_add_column_entry(ct, COL_ISSUED, buf1);
|
||||
rtbl_add_column_entry(ct, COL_EXPIRES, buf2);
|
||||
rtbl_add_column_entry(ct, COL_PRINCIPAL,
|
||||
krb_unparse_name_long(cred.service,
|
||||
cred.instance,
|
||||
cred.realm));
|
||||
if(do_verbose)
|
||||
printf(" (%d)", cred.kvno);
|
||||
printf("\n");
|
||||
}
|
||||
if (header && ret == EOF)
|
||||
rtbl_format(ct, stdout);
|
||||
rtbl_destroy(ct);
|
||||
if (!found && ret == EOF)
|
||||
printf("No tickets in file.\n");
|
||||
tf_close();
|
||||
|
||||
@@ -458,7 +510,8 @@ display_tokens(int do_verbose)
|
||||
*/
|
||||
|
||||
static int
|
||||
display_v5_ccache (const char *cred_cache, int do_test, int do_verbose)
|
||||
display_v5_ccache (const char *cred_cache, int do_test, int do_verbose,
|
||||
int do_flags)
|
||||
{
|
||||
krb5_error_code ret;
|
||||
krb5_context context;
|
||||
@@ -493,7 +546,7 @@ display_v5_ccache (const char *cred_cache, int do_test, int do_verbose)
|
||||
if (do_test)
|
||||
exit_status = check_for_tgt (context, ccache, principal);
|
||||
else
|
||||
print_tickets (context, ccache, principal, do_verbose);
|
||||
print_tickets (context, ccache, principal, do_verbose, do_flags);
|
||||
|
||||
ret = krb5_cc_close (context, ccache);
|
||||
if (ret)
|
||||
@@ -514,12 +567,15 @@ static int do_tokens = 0;
|
||||
#endif
|
||||
static int do_v5 = 1;
|
||||
static char *cred_cache;
|
||||
static int do_flags = 0;
|
||||
|
||||
static struct getargs args[] = {
|
||||
{ NULL, 'f', arg_flag, &do_flags },
|
||||
{ "cache", 'c', arg_string, &cred_cache,
|
||||
"credentials cache to list", "cache" },
|
||||
{ "test", 't', arg_flag, &do_test,
|
||||
"test for having tickets", NULL },
|
||||
{ NULL, 's', arg_flag, &do_test },
|
||||
#ifdef KRB4
|
||||
{ "v4", '4', arg_flag, &do_v4,
|
||||
"display v4 tickets", NULL },
|
||||
@@ -572,7 +628,8 @@ main (int argc, char **argv)
|
||||
usage (1);
|
||||
|
||||
if (do_v5)
|
||||
exit_status = display_v5_ccache (cred_cache, do_test, do_verbose);
|
||||
exit_status = display_v5_ccache (cred_cache, do_test,
|
||||
do_verbose, do_flags);
|
||||
|
||||
#ifdef KRB4
|
||||
if (!do_test) {
|
||||
|
Reference in New Issue
Block a user