mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 17:38:00 +00:00
6d272ee007
This is working towards allowing the subsidiary SSH connection in an SshProxy to share the main user-facing Seat, so as to be able to pass through interactive prompts. This is more difficult than the similar change with LogPolicy, because Seats are stateful. In particular, the trust-sigil status will need to be controlled by the SshProxy until it's ready to pass over control to the main SSH (or whatever) connection. To make this work, I've introduced a thing called a TempSeat, which is (yet) another Seat implementation. When a backend hands its Seat to new_connection(), it does it in a way that allows new_connection() to borrow it completely, and replace it in the main backend structure with a TempSeat, which acts as a temporary placeholder. If the main backend tries to do things like changing trust status or sending output, the TempSeat will buffer them; later on, when the connection is established, TempSeat will replay the changes into the real Seat. So, in each backend, I've made the following changes: - pass &foo->seat to new_connection, which may overwrite it with a TempSeat. - if it has done so (which we can tell via the is_tempseat() query function), then we have to free the TempSeat and reinstate our main Seat. The signal that we can do so is the PLUGLOG_CONNECT_SUCCESS notification, which indicates that SshProxy has finished all its connection setup work. - we also have to remember to free the TempSeat if our backend is disposed of without that having happened (e.g. because the connection _doesn't_ succeed). - in backends which have no local auth phase to worry about, ensure we don't call seat_set_trust_status on the main Seat _before_ it gets potentially replaced with a TempSeat. Moved some calls of seat_set_trust_status to just after new_connection(), so that now the initial trust status setup will go into the TempSeat (if appropriate) and be buffered until that seat is relinquished. In all other uses of new_connection, where we don't have a Seat available at all, we just pass NULL. This is NFC, because neither new_connection() nor any of its delegates will _actually_ do this replacement yet. We're just setting up the framework to enable it to do so in the next commit. |
||
---|---|---|
.. | ||
base64_decode_atom.c | ||
base64_encode_atom.c | ||
bufchain.c | ||
buildinfo.c | ||
burnstr.c | ||
chomp.c | ||
CMakeLists.txt | ||
conf_dest.c | ||
conf_launchable.c | ||
conf.c | ||
ctrlparse.c | ||
debug.c | ||
dupcat.c | ||
dupprintf.c | ||
dupstr.c | ||
encode_utf8.c | ||
fgetline.c | ||
host_strchr_internal.c | ||
host_strchr.c | ||
host_strcspn.c | ||
host_strduptrim.c | ||
host_strrchr.c | ||
ltime.c | ||
marshal.c | ||
memory.c | ||
memxor.c | ||
miscucs.c | ||
null_lp.c | ||
nullseat.c | ||
nullstrcmp.c | ||
out_of_memory.c | ||
parse_blocksize.c | ||
prompts.c | ||
ptrlen.c | ||
read_file_into.c | ||
seat_connection_fatal.c | ||
sessprep.c | ||
sk_free_peer_info.c | ||
smemclr.c | ||
smemeq.c | ||
ssh2_pick_fingerprint.c | ||
sshutils.c | ||
strbuf.c | ||
string_length_for_printf.c | ||
stripctrl.c | ||
tempseat.c | ||
tree234.c | ||
utils.h | ||
validate_manual_hostkey.c | ||
version.c | ||
wcwidth.c | ||
wildcard.c | ||
write_c_string_literal.c | ||
x11_dehexify.c | ||
x11_identify_auth_proto.c | ||
x11_make_greeting.c | ||
x11_parse_ip.c | ||
x11authfile.c | ||
x11authnames.c |