mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-02 03:52:49 -05:00
Implement `portfwd-loopback-choice'. Works on local side in Unix as
well, though it's a lot less useful since you still can't bind to low-numbered ports of odd loopback IPs. Should work in principle for SSH2 remote forwardings as well as local ones, but OpenSSH seems unwilling to cooperate. [originally from svn r2344]
This commit is contained in:
21
cmdline.c
21
cmdline.c
@ -160,7 +160,7 @@ int cmdline_process_param(char *p, char *value, int need_save)
|
||||
cfg.username[sizeof(cfg.username) - 1] = '\0';
|
||||
}
|
||||
if ((!strcmp(p, "-L") || !strcmp(p, "-R"))) {
|
||||
char *fwd, *ptr, *q;
|
||||
char *fwd, *ptr, *q, *qq;
|
||||
int i=0;
|
||||
RETURN(2);
|
||||
UNAVAILABLE_IN(TOOLTYPE_FILETRANSFER);
|
||||
@ -180,8 +180,23 @@ int cmdline_process_param(char *p, char *value, int need_save)
|
||||
return ret;
|
||||
}
|
||||
strncpy(ptr+1, fwd, sizeof(cfg.portfwd) - i);
|
||||
q = strchr(ptr, ':');
|
||||
if (q) *q = '\t'; /* replace first : with \t */
|
||||
/*
|
||||
* We expect _at least_ two colons in this string. The
|
||||
* possible formats are `sourceport:desthost:destport', or
|
||||
* `sourceip:sourceport:desthost:destport' if you're
|
||||
* specifying a particular loopback address. We need to
|
||||
* replace the one between source and dest with a \t; this
|
||||
* means we must find the second-to-last colon in the
|
||||
* string.
|
||||
*/
|
||||
q = qq = strchr(ptr, ':');
|
||||
while (qq) {
|
||||
char *qqq = strchr(qq+1, ':');
|
||||
if (qqq)
|
||||
q = qq;
|
||||
qq = qqq;
|
||||
}
|
||||
if (q) *q = '\t'; /* replace second-last colon with \t */
|
||||
cfg.portfwd[sizeof(cfg.portfwd) - 1] = '\0';
|
||||
cfg.portfwd[sizeof(cfg.portfwd) - 2] = '\0';
|
||||
ptr[strlen(ptr)+1] = '\000'; /* append two '\000' */
|
||||
|
Reference in New Issue
Block a user