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 "kuser_locl.h"
#include "rtbl.h"
RCSID("$Id$"); RCSID("$Id$");
@@ -53,8 +54,13 @@ printable_time_long(time_t t)
return s; return s;
} }
#define COL_ISSUED " Issued"
#define COL_EXPIRES " Expires"
#define COL_FLAGS "Flags"
#define COL_PRINCIPAL " Principal"
static void 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; char *str;
krb5_error_code ret; krb5_error_code ret;
@@ -62,20 +68,47 @@ print_cred(krb5_context context, krb5_creds *cred)
krb5_timeofday (context, &sec); krb5_timeofday (context, &sec);
if(cred->times.starttime) if(cred->times.starttime)
printf ("%s ", printable_time(cred->times.starttime)); rtbl_add_column_entry(ct, COL_ISSUED,
printable_time(cred->times.starttime));
else 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) 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 else
printf ("%-15s ", ">>>Expired<<<"); rtbl_add_column_entry(ct, COL_EXPIRES, ">>>Expired<<<");
ret = krb5_unparse_name (context, cred->server, &str); ret = krb5_unparse_name (context, cred->server, &str);
if (ret) if (ret)
krb5_err(context, 1, ret, "krb5_unparse_name"); krb5_err(context, 1, ret, "krb5_unparse_name");
printf ("%s\n", str); rtbl_add_column_entry(ct, COL_PRINCIPAL, str);
free (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 static void
@@ -175,13 +208,16 @@ static void
print_tickets (krb5_context context, print_tickets (krb5_context context,
krb5_ccache ccache, krb5_ccache ccache,
krb5_principal principal, krb5_principal principal,
int do_verbose) int do_verbose,
int do_flags)
{ {
krb5_error_code ret; krb5_error_code ret;
char *str; char *str;
krb5_cc_cursor cursor; krb5_cc_cursor cursor;
krb5_creds creds; krb5_creds creds;
rtbl_t ct;
ret = krb5_unparse_name (context, principal, &str); ret = krb5_unparse_name (context, principal, &str);
if (ret) if (ret)
krb5_err (context, 1, ret, "krb5_unparse_name"); krb5_err (context, 1, ret, "krb5_unparse_name");
@@ -208,7 +244,7 @@ print_tickets (krb5_context context,
sig = -1; sig = -1;
val = -val; val = -val;
} }
unparse_time (val, buf, sizeof(buf)); unparse_time (val, buf, sizeof(buf));
printf ("%17s: %s%s\n", "KDC time offset", printf ("%17s: %s%s\n", "KDC time offset",
@@ -221,9 +257,16 @@ print_tickets (krb5_context context,
if (ret) if (ret)
krb5_err(context, 1, ret, "krb5_cc_start_seq_get"); krb5_err(context, 1, ret, "krb5_cc_start_seq_get");
if(!do_verbose) if(!do_verbose) {
printf(" %-15s %-15s %s\n", "Issued", "Expires", "Principal"); 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, while (krb5_cc_next_cred (context,
ccache, ccache,
&creds, &creds,
@@ -231,13 +274,17 @@ print_tickets (krb5_context context,
if(do_verbose){ if(do_verbose){
print_cred_verbose(context, &creds); print_cred_verbose(context, &creds);
}else{ }else{
print_cred(context, &creds); print_cred(context, &creds, ct, do_flags);
} }
krb5_free_creds_contents (context, &creds); krb5_free_creds_contents (context, &creds);
} }
ret = krb5_cc_end_seq_get (context, ccache, &cursor); ret = krb5_cc_end_seq_get (context, ccache, &cursor);
if (ret) if (ret)
krb5_err (context, 1, ret, "krb5_cc_end_seq_get"); 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; int ret;
krb_principal princ; krb_principal princ;
CREDENTIALS cred; CREDENTIALS cred;
int header = 1; int found = 0;
rtbl_t ct;
file = getenv ("KRBTKFILE"); file = getenv ("KRBTKFILE");
if (file == NULL) if (file == NULL)
@@ -355,16 +404,18 @@ display_v4_tickets (int do_verbose)
print_time_diff(do_verbose); print_time_diff(do_verbose);
printf("\n"); 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) { while ((ret = tf_get_cred(&cred)) == KSUCCESS) {
struct timeval tv; struct timeval tv;
char buf1[20], buf2[20]; char buf1[20], buf2[20];
found++;
if (header) {
printf("%-15s %-15s %s%s\n",
" Issued", " Expires", " Principal",
do_verbose ? " (kvno)" : "");
header = 0;
}
strlcpy(buf1, strlcpy(buf1,
short_date(cred.issue_date), short_date(cred.issue_date),
sizeof(buf1)); sizeof(buf1));
@@ -378,18 +429,19 @@ display_v4_tickets (int do_verbose)
strlcpy(buf2, strlcpy(buf2,
">>> Expired <<<", ">>> Expired <<<",
sizeof(buf2)); sizeof(buf2));
printf("%s %s ", buf1, buf2); rtbl_add_column_entry(ct, COL_ISSUED, buf1);
printf("%s", krb_unparse_name_long(cred.service, rtbl_add_column_entry(ct, COL_EXPIRES, buf2);
cred.instance, rtbl_add_column_entry(ct, COL_PRINCIPAL,
cred.realm)); krb_unparse_name_long(cred.service,
if(do_verbose) cred.instance,
printf(" (%d)", cred.kvno); cred.realm));
printf("\n");
} }
if (header && ret == EOF) rtbl_format(ct, stdout);
rtbl_destroy(ct);
if (!found && ret == EOF)
printf("No tickets in file.\n"); printf("No tickets in file.\n");
tf_close(); tf_close();
/* /*
* should do NAT stuff here * should do NAT stuff here
*/ */
@@ -458,7 +510,8 @@ display_tokens(int do_verbose)
*/ */
static int 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_error_code ret;
krb5_context context; krb5_context context;
@@ -493,7 +546,7 @@ display_v5_ccache (const char *cred_cache, int do_test, int do_verbose)
if (do_test) if (do_test)
exit_status = check_for_tgt (context, ccache, principal); exit_status = check_for_tgt (context, ccache, principal);
else else
print_tickets (context, ccache, principal, do_verbose); print_tickets (context, ccache, principal, do_verbose, do_flags);
ret = krb5_cc_close (context, ccache); ret = krb5_cc_close (context, ccache);
if (ret) if (ret)
@@ -514,12 +567,15 @@ static int do_tokens = 0;
#endif #endif
static int do_v5 = 1; static int do_v5 = 1;
static char *cred_cache; static char *cred_cache;
static int do_flags = 0;
static struct getargs args[] = { static struct getargs args[] = {
{ NULL, 'f', arg_flag, &do_flags },
{ "cache", 'c', arg_string, &cred_cache, { "cache", 'c', arg_string, &cred_cache,
"credentials cache to list", "cache" }, "credentials cache to list", "cache" },
{ "test", 't', arg_flag, &do_test, { "test", 't', arg_flag, &do_test,
"test for having tickets", NULL }, "test for having tickets", NULL },
{ NULL, 's', arg_flag, &do_test },
#ifdef KRB4 #ifdef KRB4
{ "v4", '4', arg_flag, &do_v4, { "v4", '4', arg_flag, &do_v4,
"display v4 tickets", NULL }, "display v4 tickets", NULL },
@@ -572,7 +628,8 @@ main (int argc, char **argv)
usage (1); usage (1);
if (do_v5) 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 #ifdef KRB4
if (!do_test) { if (!do_test) {