Debugging improvements. Started using Dave Hinton's dmemdump
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 28 Apr 2001 17:35:18 +0000 (17:35 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 28 Apr 2001 17:35:18 +0000 (17:35 +0000)
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
pageant.c
ssh.c

diff --git a/misc.c b/misc.c
index 8968fc2..c398c21 100644 (file)
--- 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);
     }
 }
 
index 2d0b15e..50ac337 100644 (file)
--- 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 f48d142..b3be8e4 100644 (file)
--- 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);