It is very likely that auth packets and channel request packets get handled by separate poll calls, causing to disconnect the client if he has authenticated
on the 3rd attempt, but has not yet had a channel allocated.

Signed-off-by: Audrius Butkevicius <[email protected]>
---
 examples/ssh_server_fork.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/examples/ssh_server_fork.c b/examples/ssh_server_fork.c
index 837db6f..70adaf8 100644
--- a/examples/ssh_server_fork.c
+++ b/examples/ssh_server_fork.c
@@ -534,7 +534,7 @@ static void handle_session(ssh_event event, ssh_session session) {
     while (sdata.authenticated == 0 || sdata.channel == NULL) {
/* If the user has used up all attempts, or if he hasn't been able to
          * authenticate in 10 seconds (n * 100ms), disconnect. */
-        if (sdata.auth_attempts >= 3 || n >= 100) {
+ if ((sdata.authenticated == 0 && sdata.auth_attempts >= 3) || n > 100) {
             return;
         }

--
1.7.2.5







Reply via email to