st->biglen = st->len + st->pad;
ssh->pktin.length = st->len - 5;
+ if (st->biglen < 0) {
+ bombout(("Extremely large packet length from server suggests"
+ " data stream corruption"));
+ crStop(0);
+ }
+
if (ssh->pktin.maxlen < st->biglen) {
ssh->pktin.maxlen = st->biglen;
ssh->pktin.data = sresize(ssh->pktin.data, st->biglen + APIEXTRA,
if (!ssh1_pkt_getrsakey(ssh, &servkey, &s->keystr1) ||
!ssh1_pkt_getrsakey(ssh, &hostkey, &s->keystr2)) {
- bombout(("SSH1 public key packet stopped before public keys"));
+ bombout(("Failed to read SSH1 public keys from public key packet"));
crStop(0);
}
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;
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[] = "<prompt truncated>: ";
+ 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,
"<server failed to send prompt>: ");
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,
&ssh->cfg) != NULL) {
error = "Unable to open an X11 connection";
} else {
+ logevent("Opening X11 forward connection succeeded");
c->type = CHAN_X11;
}
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 {
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";
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);
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);