From 765c42008aab65bf1b3c2ba7d0eb156ab447386f Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 28 Apr 2001 17:35:18 +0000 Subject: [PATCH] Debugging improvements. Started using Dave Hinton's dmemdump function (woohoo!), improved that function so it provides an ASCII dump as well as hex (whee!), removed all remaining spurious \r in debug statements (ooh!), and made enabling of packet debugging in SSH a matter of one ifdef rather than lots (phew!). git-svn-id: svn://svn.tartarus.org/sgt/putty@1091 cda61777-01e9-0310-a592-d414129be87e --- misc.c | 12 ++++++--- pageant.c | 20 +++++++------- ssh.c | 93 +++++++++++++++++++++++---------------------------------------- 3 files changed, 53 insertions(+), 72 deletions(-) diff --git a/misc.c b/misc.c index 8968fc22..c398c213 100644 --- a/misc.c +++ b/misc.c @@ -334,6 +334,7 @@ void dprintf(char *fmt, ...) { void debug_memdump (void *buf, int len, int L) { int i; unsigned char *p = buf; + char foo[17]; if (L) { int delta; dprintf ("\t%d (0x%x) bytes:\n", len, len); @@ -342,20 +343,25 @@ void debug_memdump (void *buf, int len, int L) { len += delta; } for (; 0 < len; p += 16, len -= 16) { - dputs ("\t"); - if (L) dprintf ("%p: ", p); + dputs (" "); + if (L) dprintf ("%p: ", p); + strcpy(foo, "................"); /* sixteen dots */ for (i = 0; i < 16 && i < len; ++i) { if (&p[i] < (unsigned char *) buf) { dputs (" "); /* 3 spaces */ + foo[i] = ' '; } else { dprintf ( "%c%02.2x", &p[i] != (unsigned char *) buf && i % 4 ? '.' : ' ', p[i] ); + if (p[i] >= ' ' && p[i] <= '~') + foo[i] = (char)p[i]; } } - dputs ("\n"); + foo[i] = '\0'; + dprintf("%*s%s\n", (16-i)*3+2, "", foo); } } diff --git a/pageant.c b/pageant.c index 2d0b15ee..50ac337d 100644 --- a/pageant.c +++ b/pageant.c @@ -1095,11 +1095,11 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, if (mapname[cds->cbData - 1] != '\0') return 0; /* failure to be ASCIZ! */ #ifdef DEBUG_IPC - debug(("mapname is :%s:\r\n", mapname)); + debug(("mapname is :%s:\n", mapname)); #endif filemap = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, mapname); #ifdef DEBUG_IPC - debug(("filemap is %p\r\n", filemap)); + debug(("filemap is %p\n", filemap)); #endif if (filemap != NULL && filemap != INVALID_HANDLE_VALUE) { int rc; @@ -1108,7 +1108,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, if ((proc = OpenProcess(MAXIMUM_ALLOWED, FALSE, GetCurrentProcessId())) == NULL) { #ifdef DEBUG_IPC - debug(("couldn't get handle for process\r\n")); + debug(("couldn't get handle for process\n")); #endif return 0; } @@ -1117,7 +1117,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, &procowner, NULL, NULL, NULL, &psd2) != ERROR_SUCCESS) { #ifdef DEBUG_IPC - debug(("couldn't get owner info for process\r\n")); + debug(("couldn't get owner info for process\n")); #endif CloseHandle(proc); return 0; /* unable to get security info */ @@ -1128,30 +1128,30 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, &mapowner, NULL, NULL, NULL, &psd1) != ERROR_SUCCESS)) { #ifdef DEBUG_IPC - debug(("couldn't get owner info for filemap: %d\r\n", rc)); + debug(("couldn't get owner info for filemap: %d\n", rc)); #endif return 0; } #ifdef DEBUG_IPC - debug(("got security stuff\r\n")); + debug(("got security stuff\n")); #endif if (!EqualSid(mapowner, procowner)) return 0; /* security ID mismatch! */ #ifdef DEBUG_IPC - debug(("security stuff matched\r\n")); + debug(("security stuff matched\n")); #endif LocalFree(psd1); LocalFree(psd2); } else { #ifdef DEBUG_IPC - debug(("security APIs not present\r\n")); + debug(("security APIs not present\n")); #endif } #endif p = MapViewOfFile(filemap, FILE_MAP_WRITE, 0, 0, 0); #ifdef DEBUG_IPC - debug(("p is %p\r\n", p)); - {int i; for(i=0;i<5;i++)debug(("p[%d]=%02x\r\n", i, ((unsigned char *)p)[i]));} + debug(("p is %p\n", p)); + {int i; for(i=0;i<5;i++)debug(("p[%d]=%02x\n", i, ((unsigned char *)p)[i]));} #endif answer_msg(p); ret = 1; diff --git a/ssh.c b/ssh.c index f48d1426..b3be8e46 100644 --- a/ssh.c +++ b/ssh.c @@ -15,6 +15,9 @@ #define TRUE 1 #endif +/* uncomment this for packet level debugging */ +/* #define DUMP_PACKETS */ + #define logevent(s) { logevent(s); \ if ((flags & FLAG_STDERR) && (flags & FLAG_VERBOSE)) \ { fprintf(stderr, "%s\n", s); fflush(stderr); } } @@ -487,11 +490,9 @@ next_packet: if (cipher) cipher->decrypt(pktin.data, st->biglen); -#if 0 - debug(("Got packet len=%d pad=%d\r\n", st->len, st->pad)); - for (st->i = 0; st->i < st->biglen; st->i++) - debug((" %02x", (unsigned char)pktin.data[st->i])); - debug(("\r\n")); +#ifdef DUMP_PACKETS + debug(("Got packet len=%d pad=%d\n", st->len, st->pad)); + dmemdump(pktin.data, st->biglen); #endif st->realcrc = crc32(pktin.data, st->biglen-4); @@ -506,14 +507,9 @@ next_packet: if (ssh1_compressing) { unsigned char *decompblk; int decomplen; -#if 0 - { - int i; - debug(("Packet payload pre-decompression:\n")); - for (i = -1; i < pktin.length; i++) - debug((" %02x", (unsigned char)pktin.body[i])); - debug(("\r\n")); - } +#ifdef DUMP_PACKETS + debug(("Packet payload pre-decompression:\n")); + dmemdump(pktin.body-1, pktin.length+1); #endif zlib_decompress_block(pktin.body-1, pktin.length+1, &decompblk, &decomplen); @@ -529,14 +525,9 @@ next_packet: memcpy(pktin.body-1, decompblk, decomplen); sfree(decompblk); pktin.length = decomplen-1; -#if 0 - { - int i; - debug(("Packet payload post-decompression:\n")); - for (i = -1; i < pktin.length; i++) - debug((" %02x", (unsigned char)pktin.body[i])); - debug(("\r\n")); - } +#ifdef DUMP_PACKETS + debug(("Packet payload post-decompression:\n")); + dmemdump(pktin.body-1, pktin.length+1); #endif } @@ -672,11 +663,9 @@ next_packet: sccipher->decrypt(pktin.data + st->cipherblk, st->packetlen - st->cipherblk); -#if 0 - debug(("Got packet len=%d pad=%d\r\n", st->len, st->pad)); - for (st->i = 0; st->i < st->packetlen; st->i++) - debug((" %02x", (unsigned char)pktin.data[st->i])); - debug(("\r\n")); +#ifdef DUMP_PACKETS + debug(("Got packet len=%d pad=%d\n", st->len, st->pad)); + dmemdump(pktin.data, st->packetlen); #endif /* @@ -705,11 +694,9 @@ next_packet: } pktin.length = 5 + newlen; memcpy(pktin.data+5, newpayload, newlen); -#if 0 - debug(("Post-decompression payload:\r\n")); - for (st->i = 0; st->i < newlen; st->i++) - debug((" %02x", (unsigned char)pktin.data[5+st->i])); - debug(("\r\n")); +#ifdef DUMP_PACKETS + debug(("Post-decompression payload:\n")); + dmemdump(pktin.data+5, newlen); #endif sfree(newpayload); @@ -783,11 +770,9 @@ static int s_wrpkt_prepare(void) { pktout.body[-1] = pktout.type; -#if 0 +#ifdef DUMP_PACKETS debug(("Packet payload pre-compression:\n")); - for (i = -1; i < pktout.length; i++) - debug((" %02x", (unsigned char)pktout.body[i])); - debug(("\r\n")); + dmemdump(pktout.body-1, pktout.length+1); #endif if (ssh1_compressing) { @@ -798,11 +783,9 @@ static int s_wrpkt_prepare(void) { ssh1_pktout_size(complen-1); memcpy(pktout.body-1, compblk, complen); sfree(compblk); -#if 0 +#ifdef DUMP_PACKETS debug(("Packet payload post-compression:\n")); - for (i = -1; i < pktout.length; i++) - debug((" %02x", (unsigned char)pktout.body[i])); - debug(("\r\n")); + dmemdump(pktout.body-1, pktout.length+1); #endif } @@ -816,11 +799,9 @@ static int s_wrpkt_prepare(void) { PUT_32BIT(pktout.data+biglen, crc); PUT_32BIT(pktout.data, len); -#if 0 - debug(("Sending packet len=%d\r\n", biglen+4)); - for (i = 0; i < biglen+4; i++) - debug((" %02x", (unsigned char)pktout.data[i])); - debug(("\r\n")); +#ifdef DUMP_PACKETS + debug(("Sending packet len=%d\n", biglen+4)); + dmemdump(pktout.data, biglen+4); #endif if (cipher) cipher->encrypt(pktout.data+4, biglen); @@ -1058,11 +1039,9 @@ static int ssh2_pkt_construct(void) { /* * Compress packet payload. */ -#if 0 - debug(("Pre-compression payload:\r\n")); - for (i = 5; i < pktout.length; i++) - debug((" %02x", (unsigned char)pktout.data[i])); - debug(("\r\n")); +#ifdef DUMP_PACKETS + debug(("Pre-compression payload:\n")); + dmemdump(pktout.data+5, pktout.length-5); #endif { unsigned char *newpayload; @@ -1094,11 +1073,9 @@ static int ssh2_pkt_construct(void) { outgoing_sequence); outgoing_sequence++; /* whether or not we MACed */ -#if 0 - debug(("Sending packet len=%d\r\n", pktout.length+padding)); - for (i = 0; i < pktout.length+padding; i++) - debug((" %02x", (unsigned char)pktout.data[i])); - debug(("\r\n")); +#ifdef DUMP_PACKETS + debug(("Sending packet len=%d\n", pktout.length+padding)); + dmemdump(pktout.data, pktout.length+padding); #endif if (cscipher) @@ -1156,7 +1133,7 @@ void bndebug(char *string, Bignum b) { debug(("%s", string)); for (i = 0; i < len; i++) debug((" %02x", p[i])); - debug(("\r\n")); + debug(("\n")); sfree(p); } #endif @@ -2782,10 +2759,8 @@ static int do_ssh2_transport(unsigned char *in, int inlen, int ispkt) dh_cleanup(); #if 0 - debug(("Exchange hash is:\r\n")); - for (i = 0; i < 20; i++) - debug((" %02x", exchange_hash[i])); - debug(("\r\n")); + debug(("Exchange hash is:\n")); + dmemdump(exchange_hash, 20); #endif hkey = hostkey->newkey(hostkeydata, hostkeylen); -- 2.11.0