projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add input-focus support for System 7, where the Control Manager can't do
[u/mdw/putty]
/
ssh.c
diff --git
a/ssh.c
b/ssh.c
index
662d521
..
25dee28
100644
(file)
--- a/
ssh.c
+++ b/
ssh.c
@@
-292,7
+292,7
@@
enum { PKT_END, PKT_INT, PKT_CHAR, PKT_DATA, PKT_STR, PKT_BIGNUM };
#define crBegin(v) { int *crLine = &v; switch(v) { case 0:;
#define crState(t) \
struct t *s; \
#define crBegin(v) { int *crLine = &v; switch(v) { case 0:;
#define crState(t) \
struct t *s; \
- if (!ssh->t) ssh->t = s
malloc(sizeof(struct t)
); \
+ if (!ssh->t) ssh->t = s
new(struct t
); \
s = ssh->t;
#define crFinish(z) } *crLine = 0; return (z); }
#define crFinishV } *crLine = 0; return; }
s = ssh->t;
#define crFinish(z) } *crLine = 0; return (z); }
#define crFinishV } *crLine = 0; return; }
@@
-814,7
+814,8
@@
static int ssh1_rdpkt(Ssh ssh, unsigned char **data, int *datalen)
if (ssh->pktin.maxlen < st->biglen) {
ssh->pktin.maxlen = st->biglen;
if (ssh->pktin.maxlen < st->biglen) {
ssh->pktin.maxlen = st->biglen;
- ssh->pktin.data = srealloc(ssh->pktin.data, st->biglen + APIEXTRA);
+ ssh->pktin.data = sresize(ssh->pktin.data, st->biglen + APIEXTRA,
+ unsigned char);
}
st->to_read = st->biglen;
}
st->to_read = st->biglen;
@@
-859,8
+860,9
@@
static int ssh1_rdpkt(Ssh ssh, unsigned char **data, int *datalen)
if (ssh->pktin.maxlen < st->pad + decomplen) {
ssh->pktin.maxlen = st->pad + decomplen;
if (ssh->pktin.maxlen < st->pad + decomplen) {
ssh->pktin.maxlen = st->pad + decomplen;
- ssh->pktin.data = srealloc(ssh->pktin.data,
- ssh->pktin.maxlen + APIEXTRA);
+ ssh->pktin.data = sresize(ssh->pktin.data,
+ ssh->pktin.maxlen + APIEXTRA,
+ unsigned char);
ssh->pktin.body = ssh->pktin.data + st->pad + 1;
}
ssh->pktin.body = ssh->pktin.data + st->pad + 1;
}
@@
-942,7
+944,8
@@
static int ssh2_rdpkt(Ssh ssh, unsigned char **data, int *datalen)
if (ssh->pktin.maxlen < st->cipherblk) {
ssh->pktin.maxlen = st->cipherblk;
if (ssh->pktin.maxlen < st->cipherblk) {
ssh->pktin.maxlen = st->cipherblk;
- ssh->pktin.data = srealloc(ssh->pktin.data, st->cipherblk + APIEXTRA);
+ ssh->pktin.data = sresize(ssh->pktin.data, st->cipherblk + APIEXTRA,
+ unsigned char);
}
/*
}
/*
@@
-993,8
+996,9
@@
static int ssh2_rdpkt(Ssh ssh, unsigned char **data, int *datalen)
*/
if (ssh->pktin.maxlen < st->packetlen + st->maclen) {
ssh->pktin.maxlen = st->packetlen + st->maclen;
*/
if (ssh->pktin.maxlen < st->packetlen + st->maclen) {
ssh->pktin.maxlen = st->packetlen + st->maclen;
- ssh->pktin.data = srealloc(ssh->pktin.data,
- ssh->pktin.maxlen + APIEXTRA);
+ ssh->pktin.data = sresize(ssh->pktin.data,
+ ssh->pktin.maxlen + APIEXTRA,
+ unsigned char);
}
/*
}
/*
@@
-1036,8
+1040,9
@@
static int ssh2_rdpkt(Ssh ssh, unsigned char **data, int *datalen)
&newpayload, &newlen)) {
if (ssh->pktin.maxlen < newlen + 5) {
ssh->pktin.maxlen = newlen + 5;
&newpayload, &newlen)) {
if (ssh->pktin.maxlen < newlen + 5) {
ssh->pktin.maxlen = newlen + 5;
- ssh->pktin.data = srealloc(ssh->pktin.data,
- ssh->pktin.maxlen + APIEXTRA);
+ ssh->pktin.data = sresize(ssh->pktin.data,
+ ssh->pktin.maxlen + APIEXTRA,
+ unsigned char);
}
ssh->pktin.length = 5 + newlen;
memcpy(ssh->pktin.data + 5, newpayload, newlen);
}
ssh->pktin.length = 5 + newlen;
memcpy(ssh->pktin.data + 5, newpayload, newlen);
@@
-1170,9
+1175,11
@@
static void ssh1_pktout_size(Ssh ssh, int len)
#ifdef MSCRYPTOAPI
/* Allocate enough buffer space for extra block
* for MS CryptEncrypt() */
#ifdef MSCRYPTOAPI
/* Allocate enough buffer space for extra block
* for MS CryptEncrypt() */
- ssh->pktout.data = srealloc(ssh->pktout.data, biglen + 12);
+ ssh->pktout.data = sresize(ssh->pktout.data, biglen + 12,
+ unsigned char);
#else
#else
- ssh->pktout.data = srealloc(ssh->pktout.data, biglen + 4);
+ ssh->pktout.data = sresize(ssh->pktout.data, biglen + 4,
+ unsigned char);
#endif
}
ssh->pktout.body = ssh->pktout.data + 4 + pad + 1;
#endif
}
ssh->pktout.body = ssh->pktout.data + 4 + pad + 1;
@@
-1248,8
+1255,9
@@
static void s_wrpkt_defer(Ssh ssh)
len = s_wrpkt_prepare(ssh);
if (ssh->deferred_len + len > ssh->deferred_size) {
ssh->deferred_size = ssh->deferred_len + len + 128;
len = s_wrpkt_prepare(ssh);
if (ssh->deferred_len + len > ssh->deferred_size) {
ssh->deferred_size = ssh->deferred_len + len + 128;
- ssh->deferred_send_data = srealloc(ssh->deferred_send_data,
- ssh->deferred_size);
+ ssh->deferred_send_data = sresize(ssh->deferred_send_data,
+ ssh->deferred_size,
+ unsigned char);
}
memcpy(ssh->deferred_send_data + ssh->deferred_len, ssh->pktout.data, len);
ssh->deferred_len += len;
}
memcpy(ssh->deferred_send_data + ssh->deferred_len, ssh->pktout.data, len);
ssh->deferred_len += len;
@@
-1396,8
+1404,9
@@
static void ssh2_pkt_ensure(Ssh ssh, int length)
{
if (ssh->pktout.maxlen < length) {
ssh->pktout.maxlen = length + 256;
{
if (ssh->pktout.maxlen < length) {
ssh->pktout.maxlen = length + 256;
- ssh->pktout.data = srealloc(ssh->pktout.data,
- ssh->pktout.maxlen + APIEXTRA);
+ ssh->pktout.data = sresize(ssh->pktout.data,
+ ssh->pktout.maxlen + APIEXTRA,
+ unsigned char);
if (!ssh->pktout.data)
fatalbox("Out of memory");
}
if (!ssh->pktout.data)
fatalbox("Out of memory");
}
@@
-1453,7
+1462,7
@@
static unsigned char *ssh2_mpint_fmt(Bignum b, int *len)
{
unsigned char *p;
int i, n = (bignum_bitcount(b) + 7) / 8;
{
unsigned char *p;
int i, n = (bignum_bitcount(b) + 7) / 8;
- p = s
malloc(n + 1
);
+ p = s
newn(n + 1, unsigned char
);
if (!p)
fatalbox("out of memory");
p[0] = 0;
if (!p)
fatalbox("out of memory");
p[0] = 0;
@@
-1564,8
+1573,9
@@
static void ssh2_pkt_defer(Ssh ssh)
int len = ssh2_pkt_construct(ssh);
if (ssh->deferred_len + len > ssh->deferred_size) {
ssh->deferred_size = ssh->deferred_len + len + 128;
int len = ssh2_pkt_construct(ssh);
if (ssh->deferred_len + len > ssh->deferred_size) {
ssh->deferred_size = ssh->deferred_len + len + 128;
- ssh->deferred_send_data = srealloc(ssh->deferred_send_data,
- ssh->deferred_size);
+ ssh->deferred_send_data = sresize(ssh->deferred_send_data,
+ ssh->deferred_size,
+ unsigned char);
}
memcpy(ssh->deferred_send_data + ssh->deferred_len, ssh->pktout.data, len);
ssh->deferred_len += len;
}
memcpy(ssh->deferred_send_data + ssh->deferred_len, ssh->pktout.data, len);
ssh->deferred_len += len;
@@
-1876,7
+1886,7
@@
static int do_ssh_init(Ssh ssh, unsigned char c)
}
s->vstrsize = 16;
}
s->vstrsize = 16;
- s->vstring = s
malloc(s->vstrsize
);
+ s->vstring = s
newn(s->vstrsize, char
);
strcpy(s->vstring, "SSH-");
s->vslen = 4;
s->i = 0;
strcpy(s->vstring, "SSH-");
s->vslen = 4;
s->i = 0;
@@
-1884,7
+1894,7
@@
static int do_ssh_init(Ssh ssh, unsigned char c)
crReturn(1); /* get another char */
if (s->vslen >= s->vstrsize - 1) {
s->vstrsize += 16;
crReturn(1); /* get another char */
if (s->vslen >= s->vstrsize - 1) {
s->vstrsize += 16;
- s->vstring = sre
alloc(s->vstring, s->vstrsize
);
+ s->vstring = sre
size(s->vstring, s->vstrsize, char
);
}
s->vstring[s->vslen++] = c;
if (s->i >= 0) {
}
s->vstring[s->vslen++] = c;
if (s->i >= 0) {
@@
-1904,7
+1914,7
@@
static int do_ssh_init(Ssh ssh, unsigned char c)
s->vstring[strcspn(s->vstring, "\r\n")] = '\0';/* remove EOL chars */
{
char *vlog;
s->vstring[strcspn(s->vstring, "\r\n")] = '\0';/* remove EOL chars */
{
char *vlog;
- vlog = s
malloc(20 + s->vslen
);
+ vlog = s
newn(20 + s->vslen, char
);
sprintf(vlog, "Server version: %s", s->vstring);
logevent(vlog);
sfree(vlog);
sprintf(vlog, "Server version: %s", s->vstring);
logevent(vlog);
sfree(vlog);
@@
-2083,7
+2093,7
@@
static char *connect_to_host(Ssh ssh, char *host, int port,
SockAddr addr;
char *err;
SockAddr addr;
char *err;
- ssh->savedhost = s
malloc(1 + strlen(host)
);
+ ssh->savedhost = s
newn(1 + strlen(host), char
);
if (!ssh->savedhost)
fatalbox("Out of memory");
strcpy(ssh->savedhost, host);
if (!ssh->savedhost)
fatalbox("Out of memory");
strcpy(ssh->savedhost, host);
@@
-2326,7
+2336,7
@@
static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt)
s->len = (hostkey.bytes > servkey.bytes ? hostkey.bytes : servkey.bytes);
s->len = (hostkey.bytes > servkey.bytes ? hostkey.bytes : servkey.bytes);
- s->rsabuf = s
malloc(s->len
);
+ s->rsabuf = s
newn(s->len, unsigned char
);
if (!s->rsabuf)
fatalbox("Out of memory");
if (!s->rsabuf)
fatalbox("Out of memory");
@@
-2339,7
+2349,7
@@
static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt)
*/
int len = rsastr_len(&hostkey);
char fingerprint[100];
*/
int len = rsastr_len(&hostkey);
char fingerprint[100];
- char *keystr = s
malloc(len
);
+ char *keystr = s
newn(len, char
);
if (!keystr)
fatalbox("Out of memory");
rsastr_fmt(keystr, &hostkey);
if (!keystr)
fatalbox("Out of memory");
rsastr_fmt(keystr, &hostkey);
@@
-2577,7
+2587,7
@@
static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt)
len += ssh1_bignum_length(s->challenge);
len += 16; /* session id */
len += 4; /* response format */
len += ssh1_bignum_length(s->challenge);
len += 16; /* session id */
len += 4; /* response format */
- agentreq = s
malloc(4 + len
);
+ agentreq = s
newn(4 + len, char
);
PUT_32BIT(agentreq, len);
q = agentreq + 4;
*q++ = SSH1_AGENTC_RSA_CHALLENGE;
PUT_32BIT(agentreq, len);
q = agentreq + 4;
*q++ = SSH1_AGENTC_RSA_CHALLENGE;
@@
-2892,7
+2902,7
@@
static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt)
assert(pwlen >= bottom && pwlen <= top);
assert(pwlen >= bottom && pwlen <= top);
- randomstr = s
malloc(top + 1
);
+ randomstr = s
newn(top + 1, char
);
for (i = bottom; i <= top; i++) {
if (i == pwlen)
for (i = bottom; i <= top; i++) {
if (i == pwlen)
@@
-3182,7
+3192,7
@@
static void ssh1_protocol(Ssh ssh, unsigned char *in, int inlen, int ispkt)
dserv, "(", dport, dserv, ")");
} else {
struct ssh_rportfwd *pf;
dserv, "(", dport, dserv, ")");
} else {
struct ssh_rportfwd *pf;
- pf = s
malloc(sizeof(*pf)
);
+ pf = s
new(struct ssh_rportfwd
);
strcpy(pf->dhost, host);
pf->dport = dport;
if (saddr) {
strcpy(pf->dhost, host);
pf->dport = dport;
if (saddr) {
@@
-3330,7
+3340,7
@@
static void ssh1_protocol(Ssh ssh, unsigned char *in, int inlen, int ispkt)
PKT_INT, GET_32BIT(ssh->pktin.body), PKT_END);
logevent("Rejected X11 connect request");
} else {
PKT_INT, GET_32BIT(ssh->pktin.body), PKT_END);
logevent("Rejected X11 connect request");
} else {
- c = s
malloc(sizeof(struct ssh_channel)
);
+ c = s
new(struct ssh_channel
);
c->ssh = ssh;
if (x11_init(&c->u.x11.s, ssh->cfg.x11_display, c,
c->ssh = ssh;
if (x11_init(&c->u.x11.s, ssh->cfg.x11_display, c,
@@
-3365,7
+3375,7
@@
static void ssh1_protocol(Ssh ssh, unsigned char *in, int inlen, int ispkt)
send_packet(ssh, SSH1_MSG_CHANNEL_OPEN_FAILURE,
PKT_INT, GET_32BIT(ssh->pktin.body), PKT_END);
} else {
send_packet(ssh, SSH1_MSG_CHANNEL_OPEN_FAILURE,
PKT_INT, GET_32BIT(ssh->pktin.body), PKT_END);
} else {
- c = s
malloc(sizeof(struct ssh_channel)
);
+ c = s
new(struct ssh_channel
);
c->ssh = ssh;
c->remoteid = GET_32BIT(ssh->pktin.body);
c->localid = alloc_channel_id(ssh);
c->ssh = ssh;
c->remoteid = GET_32BIT(ssh->pktin.body);
c->localid = alloc_channel_id(ssh);
@@
-3386,7
+3396,7
@@
static void ssh1_protocol(Ssh ssh, unsigned char *in, int inlen, int ispkt)
int hostsize, port;
char host[256], buf[1024];
char *p, *h, *e;
int hostsize, port;
char host[256], buf[1024];
char *p, *h, *e;
- c = s
malloc(sizeof(struct ssh_channel)
);
+ c = s
new(struct ssh_channel
);
c->ssh = ssh;
hostsize = GET_32BIT(ssh->pktin.body+4);
c->ssh = ssh;
hostsize = GET_32BIT(ssh->pktin.body+4);
@@
-3542,7
+3552,8
@@
static void ssh1_protocol(Ssh ssh, unsigned char *in, int inlen, int ispkt)
if (c->u.a.lensofar == 4) {
c->u.a.totallen =
4 + GET_32BIT(c->u.a.msglen);
if (c->u.a.lensofar == 4) {
c->u.a.totallen =
4 + GET_32BIT(c->u.a.msglen);
- c->u.a.message = smalloc(c->u.a.totallen);
+ c->u.a.message = snewn(c->u.a.totallen,
+ unsigned char);
memcpy(c->u.a.message, c->u.a.msglen, 4);
}
if (c->u.a.lensofar >= 4 && len > 0) {
memcpy(c->u.a.message, c->u.a.msglen, 4);
}
if (c->u.a.lensofar >= 4 && len > 0) {
@@
-4682,7
+4693,7
@@
static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt)
s->len += 4 + s->pklen; /* key blob */
s->len += 4 + s->siglen; /* data to sign */
s->len += 4; /* flags */
s->len += 4 + s->pklen; /* key blob */
s->len += 4 + s->siglen; /* data to sign */
s->len += 4; /* flags */
- s->agentreq = s
malloc(4 + s->len
);
+ s->agentreq = s
newn(4 + s->len, char
);
PUT_32BIT(s->agentreq, s->len);
s->q = s->agentreq + 4;
*s->q++ = SSH2_AGENTC_SIGN_REQUEST;
PUT_32BIT(s->agentreq, s->len);
s->q = s->agentreq + 4;
*s->q++ = SSH2_AGENTC_SIGN_REQUEST;
@@
-4973,7
+4984,7
@@
static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt)
sigdata_len = ssh->pktout.length - 5 + 4 + 20;
if (ssh->remote_bugs & BUG_SSH2_PK_SESSIONID)
sigdata_len -= 4;
sigdata_len = ssh->pktout.length - 5 + 4 + 20;
if (ssh->remote_bugs & BUG_SSH2_PK_SESSIONID)
sigdata_len -= 4;
- sigdata = s
malloc(sigdata_len
);
+ sigdata = s
newn(sigdata_len, char
);
p = 0;
if (!(ssh->remote_bugs & BUG_SSH2_PK_SESSIONID)) {
PUT_32BIT(sigdata+p, 20);
p = 0;
if (!(ssh->remote_bugs & BUG_SSH2_PK_SESSIONID)) {
PUT_32BIT(sigdata+p, 20);
@@
-5105,7
+5116,7
@@
static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt)
* So now create a channel with a session in it.
*/
ssh->channels = newtree234(ssh_channelcmp);
* So now create a channel with a session in it.
*/
ssh->channels = newtree234(ssh_channelcmp);
- ssh->mainchan = s
malloc(sizeof(struct ssh_channel)
);
+ ssh->mainchan = s
new(struct ssh_channel
);
ssh->mainchan->ssh = ssh;
ssh->mainchan->localid = alloc_channel_id(ssh);
ssh2_pkt_init(ssh, SSH2_MSG_CHANNEL_OPEN);
ssh->mainchan->ssh = ssh;
ssh->mainchan->localid = alloc_channel_id(ssh);
ssh2_pkt_init(ssh, SSH2_MSG_CHANNEL_OPEN);
@@
-5262,7
+5273,7
@@
static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt)
dserv, "(", dport, dserv, ")");
} else {
struct ssh_rportfwd *pf;
dserv, "(", dport, dserv, ")");
} else {
struct ssh_rportfwd *pf;
- pf = s
malloc(sizeof(*pf)
);
+ pf = s
new(struct ssh_rportfwd
);
strcpy(pf->dhost, host);
pf->dport = dport;
pf->sport = sport;
strcpy(pf->dhost, host);
pf->dport = dport;
pf->sport = sport;
@@
-5530,7
+5541,8
@@
static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt)
if (c->u.a.lensofar == 4) {
c->u.a.totallen =
4 + GET_32BIT(c->u.a.msglen);
if (c->u.a.lensofar == 4) {
c->u.a.totallen =
4 + GET_32BIT(c->u.a.msglen);
- c->u.a.message = smalloc(c->u.a.totallen);
+ c->u.a.message = snewn(c->u.a.totallen,
+ unsigned char);
memcpy(c->u.a.message, c->u.a.msglen, 4);
}
if (c->u.a.lensofar >= 4 && length > 0) {
memcpy(c->u.a.message, c->u.a.msglen, 4);
}
if (c->u.a.lensofar >= 4 && length > 0) {
@@
-5794,7
+5806,7
@@
static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt)
struct ssh_channel *c;
unsigned remid, winsize, pktsize;
ssh2_pkt_getstring(ssh, &type, &typelen);
struct ssh_channel *c;
unsigned remid, winsize, pktsize;
ssh2_pkt_getstring(ssh, &type, &typelen);
- c = s
malloc(sizeof(struct ssh_channel)
);
+ c = s
new(struct ssh_channel
);
c->ssh = ssh;
remid = ssh2_pkt_getuint32(ssh);
c->ssh = ssh;
remid = ssh2_pkt_getuint32(ssh);
@@
-5804,7
+5816,7
@@
static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt)
port = ssh2_pkt_getuint32(ssh);
if (typelen == 3 && !memcmp(type, "x11", 3)) {
port = ssh2_pkt_getuint32(ssh);
if (typelen == 3 && !memcmp(type, "x11", 3)) {
- char *addrstr = s
malloc(peeraddrlen+1
);
+ char *addrstr = s
newn(peeraddrlen+1, char
);
memcpy(addrstr, peeraddr, peeraddrlen);
peeraddr[peeraddrlen] = '\0';
memcpy(addrstr, peeraddr, peeraddrlen);
peeraddr[peeraddrlen] = '\0';
@@
-5947,7
+5959,7
@@
static char *ssh_init(void *frontend_handle, void **backend_handle,
char *p;
Ssh ssh;
char *p;
Ssh ssh;
- ssh = s
malloc(sizeof(*ssh)
);
+ ssh = s
new(struct ssh_tag
);
ssh->cfg = *cfg; /* STRUCTURE COPY */
ssh->s = NULL;
ssh->cipher = NULL;
ssh->cfg = *cfg; /* STRUCTURE COPY */
ssh->s = NULL;
ssh->cipher = NULL;
@@
-6241,7
+6253,7
@@
void *new_sock_channel(void *handle, Socket s)
{
Ssh ssh = (Ssh) handle;
struct ssh_channel *c;
{
Ssh ssh = (Ssh) handle;
struct ssh_channel *c;
- c = s
malloc(sizeof(struct ssh_channel)
);
+ c = s
new(struct ssh_channel
);
c->ssh = ssh;
if (c) {
c->ssh = ssh;
if (c) {