summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/kuser/klist.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal/kuser/klist.c')
-rw-r--r--crypto/heimdal/kuser/klist.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/crypto/heimdal/kuser/klist.c b/crypto/heimdal/kuser/klist.c
index ebeebad..639b3fd 100644
--- a/crypto/heimdal/kuser/klist.c
+++ b/crypto/heimdal/kuser/klist.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997-2001 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997-2002 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -34,7 +34,7 @@
#include "kuser_locl.h"
#include "rtbl.h"
-RCSID("$Id: klist.c,v 1.64 2001/05/11 19:55:13 assar Exp $");
+RCSID("$Id: klist.c,v 1.67 2002/08/20 09:05:18 joda Exp $");
static char*
printable_time(time_t t)
@@ -380,7 +380,7 @@ display_v4_tickets (int do_verbose)
if (file == NULL)
file = TKT_FILE;
- printf("v4-ticket file: %s\n", file);
+ printf("%17s: %s\n", "V4-ticket file", file);
ret = krb_get_tf_realm (file, princ.realm);
if (ret) {
@@ -406,7 +406,7 @@ display_v4_tickets (int do_verbose)
return 1;
}
- printf("Principal:\t%s\n", krb_unparse_name (&princ));
+ printf ("%17s: %s\n", "Principal", krb_unparse_name(&princ));
print_time_diff(do_verbose);
printf("\n");
@@ -475,7 +475,7 @@ static void
display_tokens(int do_verbose)
{
u_int32_t i;
- unsigned char t[128];
+ unsigned char t[4096];
struct ViceIoctl parms;
parms.in = (void *)&i;
@@ -483,7 +483,7 @@ display_tokens(int do_verbose)
parms.out = (void *)t;
parms.out_size = sizeof(t);
- for (i = 0; k_pioctl(NULL, VIOCGETTOK, &parms, 0) == 0; i++) {
+ for (i = 0;; i++) {
int32_t size_secret_tok, size_public_tok;
unsigned char *cell;
struct ClearToken ct;
@@ -491,11 +491,25 @@ display_tokens(int do_verbose)
struct timeval tv;
char buf1[20], buf2[20];
+ if(k_pioctl(NULL, VIOCGETTOK, &parms, 0) < 0) {
+ if(errno == EDOM)
+ break;
+ continue;
+ }
+ if(parms.out_size >= sizeof(t))
+ continue;
+ if(parms.out_size < sizeof(size_secret_tok))
+ continue;
+ t[parms.out_size] = 0;
memcpy(&size_secret_tok, r, sizeof(size_secret_tok));
/* dont bother about the secret token */
r += size_secret_tok + sizeof(size_secret_tok);
+ if (parms.out_size < (r - t) + sizeof(size_public_tok))
+ continue;
memcpy(&size_public_tok, r, sizeof(size_public_tok));
r += sizeof(size_public_tok);
+ if (parms.out_size < (r - t) + size_public_tok + sizeof(int32_t))
+ continue;
memcpy(&ct, r, size_public_tok);
r += size_public_tok;
/* there is a int32_t with length of cellname, but we dont read it */
@@ -504,19 +518,19 @@ display_tokens(int do_verbose)
gettimeofday (&tv, NULL);
strlcpy (buf1, printable_time(ct.BeginTimestamp),
- sizeof(buf1));
+ sizeof(buf1));
if (do_verbose || tv.tv_sec < ct.EndTimestamp)
strlcpy (buf2, printable_time(ct.EndTimestamp),
- sizeof(buf2));
+ sizeof(buf2));
else
strlcpy (buf2, ">>> Expired <<<", sizeof(buf2));
printf("%s %s ", buf1, buf2);
if ((ct.EndTimestamp - ct.BeginTimestamp) & 1)
- printf("User's (AFS ID %d) tokens for %s", ct.ViceId, cell);
+ printf("User's (AFS ID %d) tokens for %s", ct.ViceId, cell);
else
- printf("Tokens for %s", cell);
+ printf("Tokens for %s", cell);
if (do_verbose)
printf(" (%d)", ct.AuthHandle);
putchar('\n');
OpenPOWER on IntegriCloud