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:
Johan Danielsson
2000-07-08 18:02:40 +00:00
parent 97aa8026cf
commit 68e64d204c

View File

@@ -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) {