mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-02 03:52:49 -05:00
Malcolm Smith's patch to support CHAP (digest-based) authentication
when talking to SOCKS 5 proxies. Configures itself transparently (if the proxy offers CHAP it will use it, otherwise it falls back to ordinary cleartext passwords). [originally from svn r4517]
This commit is contained in:
24
proxy.c
24
proxy.c
@ -859,15 +859,16 @@ int proxy_socks5_negotiate (Proxy_Socket p, int change)
|
||||
* 0x03 = CHAP
|
||||
*/
|
||||
|
||||
char command[4];
|
||||
char command[5];
|
||||
int len;
|
||||
|
||||
command[0] = 5; /* version 5 */
|
||||
if (p->cfg.proxy_username[0] || p->cfg.proxy_password[0]) {
|
||||
command[1] = 2; /* two methods supported: */
|
||||
command[2] = 0x00; /* no authentication */
|
||||
command[3] = 0x02; /* username/password */
|
||||
len = 4;
|
||||
len = 3;
|
||||
proxy_socks5_offerencryptedauth (command, &len);
|
||||
command[len++] = 0x02; /* username/password */
|
||||
command[1] = len - 2; /* Number of methods supported */
|
||||
} else {
|
||||
command[1] = 1; /* one methods supported: */
|
||||
command[2] = 0x00; /* no authentication */
|
||||
@ -923,7 +924,7 @@ int proxy_socks5_negotiate (Proxy_Socket p, int change)
|
||||
* authentication methods:
|
||||
* 0x00 = no authentication
|
||||
* 0x01 = GSSAPI
|
||||
* 0x02 = username/password
|
||||
* 0x02 = username/password
|
||||
* 0x03 = CHAP
|
||||
* 0xff = no acceptable methods
|
||||
*/
|
||||
@ -988,6 +989,12 @@ int proxy_socks5_negotiate (Proxy_Socket p, int change)
|
||||
p->state = 2; /* now proceed as authenticated */
|
||||
}
|
||||
|
||||
if (p->state == 8) {
|
||||
int ret;
|
||||
ret = proxy_socks5_handlechap(p);
|
||||
if (ret) return ret;
|
||||
}
|
||||
|
||||
if (p->state == 2) {
|
||||
|
||||
/* request format:
|
||||
@ -1156,10 +1163,9 @@ int proxy_socks5_negotiate (Proxy_Socket p, int change)
|
||||
}
|
||||
|
||||
if (p->state == 6) {
|
||||
/* TODO: Handle CHAP authentication */
|
||||
plug_closing(p->plug, "Proxy error: We don't support CHAP authentication",
|
||||
PROXY_ERROR_GENERAL, 0);
|
||||
return 1;
|
||||
int ret;
|
||||
ret = proxy_socks5_selectchap(p);
|
||||
if (ret) return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user