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:
		
							
								
								
									
										111
									
								
								kuser/klist.c
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								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,19 +68,46 @@ 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);
 | 
			
		||||
    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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -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