summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/admin/list.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal/admin/list.c')
-rw-r--r--crypto/heimdal/admin/list.c68
1 files changed, 51 insertions, 17 deletions
diff --git a/crypto/heimdal/admin/list.c b/crypto/heimdal/admin/list.c
index 04c1d78..3640e4f 100644
--- a/crypto/heimdal/admin/list.c
+++ b/crypto/heimdal/admin/list.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997 - 2001 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -33,7 +33,7 @@
#include "ktutil_locl.h"
-RCSID("$Id: list.c,v 1.3 2000/06/29 08:21:40 joda Exp $");
+RCSID("$Id: list.c,v 1.8 2001/05/11 00:54:01 assar Exp $");
static int help_flag;
static int list_keys;
@@ -56,13 +56,13 @@ struct key_info {
struct key_info *next;
};
-int
-kt_list(int argc, char **argv)
+static int
+do_list(const char *keytab_string)
{
krb5_error_code ret;
- krb5_kt_cursor cursor;
+ krb5_keytab keytab;
krb5_keytab_entry entry;
- int optind = 0;
+ krb5_kt_cursor cursor;
struct key_info *ki, **kie = &ki, *kp;
int max_version = sizeof("Vno") - 1;
@@ -71,27 +71,30 @@ kt_list(int argc, char **argv)
int max_timestamp = sizeof("Date") - 1;
int max_key = sizeof("Key") - 1;
- if(verbose_flag)
- list_timestamp = 1;
-
- if(getarg(args, num_args, argc, argv, &optind)){
- arg_printusage(args, num_args, "ktutil list", "");
- return 1;
- }
- if(help_flag){
- arg_printusage(args, num_args, "ktutil list", "");
+ ret = krb5_kt_resolve(context, keytab_string, &keytab);
+ if (ret) {
+ krb5_warn(context, ret, "resolving keytab %s", keytab_string);
return 0;
}
ret = krb5_kt_start_seq_get(context, keytab, &cursor);
if(ret){
krb5_warn(context, ret, "krb5_kt_start_seq_get %s", keytab_string);
- return 1;
+ goto out;
}
+
+ printf ("%s:\n\n", keytab_string);
+
while((ret = krb5_kt_next_entry(context, keytab, &entry, &cursor)) == 0){
#define CHECK_MAX(F) if(max_##F < strlen(kp->F)) max_##F = strlen(kp->F)
kp = malloc(sizeof(*kp));
+ if (kp == NULL) {
+ krb5_kt_free_entry(context, &entry);
+ krb5_kt_end_seq_get(context, keytab, &cursor);
+ krb5_warn(context, ret, "malloc failed");
+ goto out;
+ }
asprintf(&kp->version, "%d", entry.vno);
CHECK_MAX(version);
@@ -100,7 +103,7 @@ kt_list(int argc, char **argv)
if (ret != 0)
asprintf(&kp->etype, "unknown (%d)", entry.keyblock.keytype);
CHECK_MAX(etype);
- krb5_unparse_name_short(context, entry.principal, &kp->principal);
+ krb5_unparse_name(context, entry.principal, &kp->principal);
CHECK_MAX(principal);
if (list_timestamp) {
char tstamp[256];
@@ -159,5 +162,36 @@ kt_list(int argc, char **argv)
kp = kp->next;
free(ki);
}
+out:
+ krb5_kt_close(context, keytab);
+ return 0;
+}
+
+int
+kt_list(int argc, char **argv)
+{
+ int optind = 0;
+
+ if(verbose_flag)
+ list_timestamp = 1;
+
+ if(getarg(args, num_args, argc, argv, &optind)){
+ arg_printusage(args, num_args, "ktutil list", "");
+ return 1;
+ }
+ if(help_flag){
+ arg_printusage(args, num_args, "ktutil list", "");
+ return 0;
+ }
+
+ if (keytab_string == NULL) {
+ do_list("FILE:/etc/krb5.keytab");
+#ifdef KRB4
+ printf ("\n");
+ do_list("krb4:/etc/srvtab");
+#endif
+ } else {
+ do_list(keytab_string);
+ }
return 0;
}
OpenPOWER on IntegriCloud