BBS:      TELESC.NET.BR
Assunto:  src/ssh/NOTES.mdsrc/ssh/TODO.md ssh-auth.c ssh-conn.c ssh-internal.h s
De:       Deuc¨
Data:     Mon, 23 Mar 2026 20:49:18 -0700
-----------------------------------------------------------
https://gitlab.synchro.net/main/sbbs/-/commit/bebeb7b0feaf3126bfa46bc9
Added Files:
	src/ssh/NOTES.md
Modified Files:
	src/ssh/TODO.md ssh-auth.c ssh-conn.c ssh-internal.h ssh-trans.c ssh.c src/ssh/test/mock_io.c test_alloc.c test_conn.c
Log Message:
Fix session termination: signal waiters, promote fatal auth errors

Previously, setting sess->terminate did not wake threads blocked on
library condvars or I/O callbacks, causing deadlocks when one side
of a connection failed internally.

Changes:

- dssh_session_set_terminate(): new internal helper that sets the
  terminate flag AND broadcasts rekey_cnd, accept_cnd, and all
  per-channel poll_cnd.  All code that previously set sess->terminate
  directly now calls this function.

- send_packet sets terminate on fatal errors (not TOOLONG/REKEY_NEEDED).
  recv_packet_raw sets terminate on all errors (all are fatal).
  handshake() and rekey() set terminate on failure.

- Auth functions (server, password, get_methods, keyboard_interactive,
  publickey) wrap their implementations with auth_check_terminated(),
  which promotes any negative return to DSSH_ERROR_TERMINATED when
  sess->terminate is set.  Auth rejection (USERAUTH_FAILURE) does
  NOT set terminate, so callers can distinguish recoverable rejection
  from fatal connection loss.

- Mock I/O uses 50ms timed waits instead of indefinite cnd_wait so
  the terminate flag check runs promptly.

- conn_cleanup no longer needs to close pipes before session_stop
  since the terminate signal now propagates through timed waits.

Co-Authored-By: Claude Opus 4.6 (1M context) 
n
---
  mSynchronetn  hgVertrauen n hHome of Synchronet n gh[vert/cvs/bbs].synchro.net

-----------------------------------------------------------
[Voltar]