mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-01 19:42:48 -05:00
Rewrite local-proxy system to allow interactive prompts.
This fills in the remaining gap in the interactive prompt rework of the proxy system in general. If you used the Telnet proxy with a command containing %user or %pass, and hadn't filled in those variables in the PuTTY config, then proxy/telnet.c would prompt you at run time to enter the proxy auth details. But the local proxy command, which uses the same format_telnet_command function, would not do that. Now it does! I've implemented this by moving the formatting of the proxy command into a new module proxy/local.c, shared between both the Unix and Windows local-proxy implementations. That module implements a DeferredSocketOpener, which constructs the proxy command (prompting first if necessary), and once it's constructed, hands it to a per-platform function platform_setup_local_proxy(). So each platform-specific proxy function, instead of starting a subprocess there and then and passing its details to make_fd_socket or make_handle_socket, now returns a _deferred_ version of one of those sockets, with the DeferredSocketOpener being the thing in proxy/local.c. When that calls back to platform_setup_local_proxy(), we actually start the subprocess and pass the resulting fds/handles to the deferred socket to un-defer it. A side effect of the rewrite is that when proxy commands are logged in the Event Log, they now get the same amenities as in the Telnet proxy type: the proxy password is sanitised out, and any difficult characters are escaped.
This commit is contained in:
@ -105,6 +105,12 @@ prompts_t *proxy_new_prompts(ProxySocket *ps);
|
||||
char *format_telnet_command(SockAddr *addr, int port, Conf *conf,
|
||||
unsigned *flags_out);
|
||||
|
||||
DeferredSocketOpener *local_proxy_opener(
|
||||
SockAddr *addr, int port, Plug *plug, Conf *conf, Interactor *itr);
|
||||
void local_proxy_opener_set_socket(DeferredSocketOpener *opener,
|
||||
Socket *socket);
|
||||
char *platform_setup_local_proxy(Socket *socket, const char *cmd);
|
||||
|
||||
#include "cproxy.h"
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user