| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | 
							- /*
 
-  * Packet-censoring code for SSH-2, used to identify sensitive fields
 
-  * like passwords so that the logging system can avoid writing them
 
-  * into log files.
 
-  */
 
- #include <assert.h>
 
- #include "putty.h"
 
- #include "ssh.h"
 
- int ssh2_censor_packet(
 
-     const PacketLogSettings *pls, int type, bool sender_is_client,
 
-     ptrlen pkt, logblank_t *blanks)
 
- {
 
-     int nblanks = 0;
 
-     ptrlen str;
 
-     BinarySource src[1];
 
-     BinarySource_BARE_INIT(src, pkt.ptr, pkt.len);
 
-     if (pls->omit_data &&
 
-         (type == SSH2_MSG_CHANNEL_DATA ||
 
-          type == SSH2_MSG_CHANNEL_EXTENDED_DATA)) {
 
-         /* "Session data" packets - omit the data string. */
 
-         get_uint32(src);              /* skip channel id */
 
-         if (type == SSH2_MSG_CHANNEL_EXTENDED_DATA)
 
-             get_uint32(src);          /* skip extended data type */
 
-         str = get_string(src);
 
-         if (!get_err(src)) {
 
-             assert(nblanks < MAX_BLANKS);
 
-             blanks[nblanks].offset = src->pos - str.len;
 
-             blanks[nblanks].type = PKTLOG_OMIT;
 
-             blanks[nblanks].len = str.len;
 
-             nblanks++;
 
-         }
 
-     }
 
-     if (sender_is_client && pls->omit_passwords) {
 
-         if (type == SSH2_MSG_USERAUTH_REQUEST) {
 
-             /* If this is a password packet, blank the password(s). */
 
-             get_string(src);              /* username */
 
-             get_string(src);              /* service name */
 
-             str = get_string(src);        /* auth method */
 
-             if (ptrlen_eq_string(str, "password")) {
 
-                 get_bool(src);
 
-                 /* Blank the password field. */
 
-                 str = get_string(src);
 
-                 if (!get_err(src)) {
 
-                     assert(nblanks < MAX_BLANKS);
 
-                     blanks[nblanks].offset = src->pos - str.len;
 
-                     blanks[nblanks].type = PKTLOG_BLANK;
 
-                     blanks[nblanks].len = str.len;
 
-                     nblanks++;
 
-                     /* If there's another password field beyond it
 
-                      * (change of password), blank that too. */
 
-                     str = get_string(src);
 
-                     if (!get_err(src))
 
-                         blanks[nblanks-1].len =
 
-                             src->pos - blanks[nblanks].offset;
 
-                 }
 
-             }
 
-         } else if (pls->actx == SSH2_PKTCTX_KBDINTER &&
 
-                    type == SSH2_MSG_USERAUTH_INFO_RESPONSE) {
 
-             /* If this is a keyboard-interactive response packet,
 
-              * blank the responses. */
 
-             get_uint32(src);
 
-             assert(nblanks < MAX_BLANKS);
 
-             blanks[nblanks].offset = src->pos;
 
-             blanks[nblanks].type = PKTLOG_BLANK;
 
-             do {
 
-                 str = get_string(src);
 
-             } while (!get_err(src));
 
-             blanks[nblanks].len = src->pos - blanks[nblanks].offset;
 
-             nblanks++;
 
-         } else if (type == SSH2_MSG_CHANNEL_REQUEST) {
 
-             /*
 
-              * If this is an X forwarding request packet, blank the
 
-              * fake auth data.
 
-              *
 
-              * Note that while we blank the X authentication data
 
-              * here, we don't take any special action to blank the
 
-              * start of an X11 channel, so using MIT-MAGIC-COOKIE-1
 
-              * and actually opening an X connection without having
 
-              * session blanking enabled is likely to leak your cookie
 
-              * into the log.
 
-              */
 
-             get_uint32(src);
 
-             str = get_string(src);
 
-             if (ptrlen_eq_string(str, "x11-req")) {
 
-                 get_bool(src);
 
-                 get_bool(src);
 
-                 get_string(src);
 
-                 str = get_string(src);
 
-                 if (!get_err(src)) {
 
-                     assert(nblanks < MAX_BLANKS);
 
-                     blanks[nblanks].offset = src->pos - str.len;
 
-                     blanks[nblanks].type = PKTLOG_BLANK;
 
-                     blanks[nblanks].len = str.len;
 
-                     nblanks++;
 
-                 }
 
-             }
 
-         }
 
-     }
 
-     return nblanks;
 
- }
 
 
  |