* we can also use them as a buffer and pointer for reading
* data from the SOCKS client.
*/
- char hostname[256];
+ char hostname[256+8];
int port;
/*
* When doing dynamic port forwarding, we can receive
int len;
if (pr->dynamic == 0x4000) {
pr->dynamic = 0x4001;
+ pr->port = 8; /* reset buffer to overwrite name */
continue;
}
pr->hostname[0] = 0; /* reply version code */
pr->hostname[1] = 90; /* request granted */
sk_write(pr->s, pr->hostname, 8);
+ len= pr->port;
pr->port = GET_16BIT_MSB_FIRST(pr->hostname+2);
- len = strlen(pr->hostname+8);
- memmove(pr->hostname, pr->hostname + 8 + len + 1,
- lenof(pr->hostname) - (8 + len + 1));
+ memmove(pr->hostname, pr->hostname + 8, len);
goto connect;
} else {
/*
}
if (pr->dynamic == 0x5001) {
- int atype, alen;
+ int atype, alen = 0;
if (pr->port < 6) continue;
atype = (unsigned char)pr->hostname[3];
if (atype == 1) /* IPv4 address */
pr->ready = 1;
pr->c = c;
pr->backhandle = NULL; /* we shouldn't need this */
+ pr->dynamic = 0;
pr->s = *s = new_connection(addr, dummy_realhost, port,
0, 1, 0, (Plug) pr, cfg);
pr->port = 0; /* hostname buffer is so far empty */
sk_set_frozen(s, 0); /* we want to receive SOCKS _now_! */
} else {
+ pr->dynamic = 0;
strcpy(pr->hostname, org->hostname);
pr->port = org->port;
pr->c = new_sock_channel(org->backhandle, s);