From e625e30ea9bc9afead861579832c4001f46dba58 Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Sat, 12 Jul 1997 13:56:15 +0000 Subject: [PATCH] Add verbose flag, and split main into smaller pieces. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2171 ec53bebd-3082-4978-b11e-865c3cabbd6b --- kuser/klist.c | 165 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 129 insertions(+), 36 deletions(-) diff --git a/kuser/klist.c b/kuser/klist.c index 761f314f5..5de11802a 100644 --- a/kuser/klist.c +++ b/kuser/klist.c @@ -9,69 +9,162 @@ printable_time(time_t t) return s; } +void usage() +{ + fprintf(stderr, "Usage: %s [-v]\n", __progname); + exit(1); +} + +void +print_cred(krb5_context context, krb5_creds *cred) +{ + char *str; + struct timeval now; + krb5_error_code ret; + + gettimeofday(&now, NULL); + + printf ("%s ", printable_time(cred->times.authtime)); + if(cred->times.endtime > now.tv_sec) + printf ("%s ", printable_time(cred->times.endtime)); + else + printf ("%-15s ", ">>>Expired<<<"); + ret = krb5_unparse_name (context, cred->server, &str); + if (ret) + errx (1, "krb5_unparse_name: %s", + krb5_get_err_text(context,ret)); + printf ("%s\n", str); + free (str); +} + +void +print_cred_verbose(krb5_context context, krb5_creds *cred) +{ + int j; + char *str; + krb5_error_code ret; + int first_flag; + struct timeval now; + + gettimeofday(&now, NULL); + + ret = krb5_unparse_name(context, cred->server, &str); + if(ret) + exit(1); + printf("Server: %s\n", str); + printf("Session key: type = %d, length = %d\n", + cred->session.keytype, + cred->session.keyvalue.length); + printf("Auth time: %s\n", printable_time(cred->times.authtime)); + if(cred->times.authtime != cred->times.starttime) + printf("Start time: %s\n", printable_time(cred->times.starttime)); + printf("End time: %s", printable_time(cred->times.endtime)); + if(now.tv_sec > cred->times.endtime) + printf(" (expired)"); + printf("\n"); + if(cred->flags.b.renewable) + printf("Renew till: %s\n", + printable_time(cred->times.renew_till)); + printf("Ticket flags: "); +#define PRINT_FLAG(f) if(cred->flags.b. ##f) { if(!first_flag) printf(", "); printf("%s", #f); first_flag = 0; } + first_flag = 1; + PRINT_FLAG(forwardable); + PRINT_FLAG(forwarded); + PRINT_FLAG(proxiable); + PRINT_FLAG(proxy); + PRINT_FLAG(may_postdate); + PRINT_FLAG(postdated); + PRINT_FLAG(invalid); + PRINT_FLAG(renewable); + PRINT_FLAG(initial); + PRINT_FLAG(pre_authent); + PRINT_FLAG(hw_authent); + printf("\n"); + printf("Addresses: "); + for(j = 0; j < cred->addresses.len; j++){ + if(j) printf(", "); + switch(cred->addresses.val[j].addr_type){ + case AF_INET: + printf("%s", inet_ntoa(*(struct in_addr*)cred->addresses.val[j].address.data)); + break; + default: + printf("{ %d %d }", cred->addresses.val[j].addr_type, + cred->addresses.val[j].address.length); + } + } + printf("\n\n"); +} int main (int argc, char **argv) { - krb5_error_code err; + krb5_error_code ret; krb5_context context; krb5_ccache ccache; krb5_principal principal; krb5_cc_cursor cursor; krb5_creds creds; char *str; - struct timeval now; + int verbose = 0; + int c; - err = krb5_init_context (&context); - if (err) - errx (1, "krb5_init_context: %s", krb5_get_err_text(context,err)); + while((c = getopt(argc, argv, "v")) != -1){ + switch(c){ + case 'v': + verbose = 1; + break; + default: + usage(); + } + } + argc -= optind; + argv += optind; + - err = krb5_cc_default (context, &ccache); - if (err) - errx (1, "krb5_cc_default: %s", krb5_get_err_text(context,err)); + ret = krb5_init_context (&context); + if (ret) + errx (1, "krb5_init_context: %s", krb5_get_err_text(context,ret)); - err = krb5_cc_get_principal (context, ccache, &principal); - if (err) - errx (1, "krb5_cc_get_principal: %s", krb5_get_err_text(context,err)); + ret = krb5_cc_default (context, &ccache); + if (ret) + errx (1, "krb5_cc_default: %s", krb5_get_err_text(context,ret)); - err = krb5_unparse_name (context, principal, &str); - if (err) - errx (1, "krb5_unparse_name: %s", krb5_get_err_text(context,err)); + ret = krb5_cc_get_principal (context, ccache, &principal); + if (ret) + errx (1, "krb5_cc_get_principal: %s", krb5_get_err_text(context,ret)); + + ret = krb5_unparse_name (context, principal, &str); + if (ret) + errx (1, "krb5_unparse_name: %s", krb5_get_err_text(context,ret)); printf ("Credentials cache: %s\n", krb5_cc_get_name(context, ccache)); printf ("\tPrincipal: %s\n\n", str); free (str); - err = krb5_cc_start_seq_get (context, ccache, &cursor); - if (err) - errx (1, "krb5_cc_start_seq_get: %s", krb5_get_err_text(context,err)); + ret = krb5_cc_start_seq_get (context, ccache, &cursor); + if (ret) + errx (1, "krb5_cc_start_seq_get: %s", krb5_get_err_text(context,ret)); - printf(" %-15s %-15s %s\n", "Issued", "Expires", "Principal"); - - gettimeofday(&now, NULL); + if(!verbose) + printf(" %-15s %-15s %s\n", "Issued", "Expires", "Principal"); while (krb5_cc_next_cred (context, ccache, &creds, &cursor) == 0) { - printf ("%s ", printable_time(creds.times.authtime)); - if(creds.times.endtime > now.tv_sec) - printf ("%s ", printable_time(creds.times.endtime)); - else - printf ("%-15s ", ">>>Expired<<<"); - err = krb5_unparse_name (context, creds.server, &str); - if (err) - errx (1, "krb5_unparse_name: %s", krb5_get_err_text(context,err)); - printf ("%s\n", str); - free (str); + if(verbose){ + print_cred_verbose(context, &creds); + }else{ + print_cred(context, &creds); + } } - err = krb5_cc_end_seq_get (context, ccache, &cursor); - if (err) - errx (1, "krb5_cc_end_seq_get: %s", krb5_get_err_text(context,err)); + ret = krb5_cc_end_seq_get (context, ccache, &cursor); + if (ret) + errx (1, "krb5_cc_end_seq_get: %s", krb5_get_err_text(context,ret)); - err = krb5_cc_close (context, ccache); - if (err) - errx (1, "krb5_cc_close: %s", krb5_get_err_text(context,err)); + ret = krb5_cc_close (context, ccache); + if (ret) + errx (1, "krb5_cc_close: %s", krb5_get_err_text(context,ret)); krb5_free_principal (context, principal);