X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/0cd494d7d4f569472b00ba83150bf6094a342a59..211d84da9aff9c324b12f274d82cf2dc35348750:/ssh.c diff --git a/ssh.c b/ssh.c index 3616d211..8ae552f3 100644 --- a/ssh.c +++ b/ssh.c @@ -4610,7 +4610,7 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) int num_prompts, curr_prompt, echo; char username[100]; int got_username; - char pwprompt[200]; + char pwprompt[512]; char password[100]; void *publickey_blob; int publickey_bloblen; @@ -5189,9 +5189,16 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) ssh_pkt_getstring(ssh, &prompt, &prompt_len); if (prompt_len > 0) { - strncpy(s->pwprompt, prompt, sizeof(s->pwprompt)); - s->pwprompt[prompt_len < sizeof(s->pwprompt) ? - prompt_len : sizeof(s->pwprompt)-1] = '\0'; + static const char trunc[] = ": "; + static const int prlen = sizeof(s->pwprompt) - + lenof(trunc); + if (prompt_len > prlen) { + memcpy(s->pwprompt, prompt, prlen); + strcpy(s->pwprompt + prlen, trunc); + } else { + memcpy(s->pwprompt, prompt, prompt_len); + s->pwprompt[prompt_len] = '\0'; + } } else { strcpy(s->pwprompt, ": "); @@ -6160,9 +6167,12 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) ssh_pkt_getstring(ssh, &peeraddr, &peeraddrlen); addrstr = snewn(peeraddrlen+1, char); memcpy(addrstr, peeraddr, peeraddrlen); - peeraddr[peeraddrlen] = '\0'; + addrstr[peeraddrlen] = '\0'; peerport = ssh_pkt_getuint32(ssh); + logeventf(ssh, "Received X11 connect request from %s:%d", + addrstr, peerport); + if (!ssh->X11_fwd_enabled) error = "X11 forwarding is not enabled"; else if (x11_init(&c->u.x11.s, ssh->cfg.x11_display, c, @@ -6170,6 +6180,7 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) &ssh->cfg) != NULL) { error = "Unable to open an X11 connection"; } else { + logevent("Opening X11 forward connection succeeded"); c->type = CHAN_X11; } @@ -6184,6 +6195,8 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) ssh_pkt_getstring(ssh, &peeraddr, &peeraddrlen); peerport = ssh_pkt_getuint32(ssh); realpf = find234(ssh->rportfwds, &pf, NULL); + logeventf(ssh, "Received remote port %d open request " + "from %s:%d", pf.sport, peeraddr, peerport); if (realpf == NULL) { error = "Remote port is not recognised"; } else { @@ -6191,8 +6204,8 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) realpf->dhost, realpf->dport, c, &ssh->cfg); - logeventf(ssh, "Received remote port open request" - " for %s:%d", realpf->dhost, realpf->dport); + logeventf(ssh, "Attempting to forward remote port to " + "%s:%d", realpf->dhost, realpf->dport); if (e != NULL) { logeventf(ssh, "Port open failed: %s", e); error = "Port open failed"; @@ -6221,6 +6234,7 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) ssh2_pkt_addstring(ssh, error); ssh2_pkt_addstring(ssh, "en"); /* language tag */ ssh2_pkt_send(ssh); + logeventf(ssh, "Rejected channel open: %s", error); sfree(c); } else { c->localid = alloc_channel_id(ssh); @@ -6466,10 +6480,6 @@ static void ssh_free(void *handle) crcda_free_context(ssh->crcda_ctx); ssh->crcda_ctx = NULL; } - if (ssh->logctx) { - log_free(ssh->logctx); - ssh->logctx = NULL; - } if (ssh->s) ssh_do_close(ssh); sfree(ssh);