From be815535d48f63146b5520aeea9a0ce786ab53d6 Mon Sep 17 00:00:00 2001 From: deuce <> Date: Sat, 22 May 2010 01:48:27 +0000 Subject: [PATCH] Work around CRYPT_SESSINFO_AUTHRESPONSE being set before setting session active not behaving corretly... assume new behaviour. --- src/sbbs3/main.cpp | 58 ++++++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index f7daeb7618..ae1160d253 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -5028,6 +5028,7 @@ NO_SSH: /* Do SSH stuff here */ if(ssh) { + int ssh_failed=0; if(!cryptStatusOK(i=cryptCreateSession(&sbbs->ssh_session, CRYPT_UNUSED, CRYPT_SESSION_SSH_SERVER))) { lprintf(LOG_WARNING,"%04d SSH Cryptlib error %d creating session", client_socket, i); close_socket(client_socket); @@ -5039,34 +5040,51 @@ NO_SSH: close_socket(client_socket); continue; } - /* Accept any credentials */ - if(!cryptStatusOK(i=cryptSetAttribute(sbbs->ssh_session, CRYPT_SESSINFO_AUTHRESPONSE, 1))) { - lprintf(LOG_WARNING,"%04d SSH Cryptlib error %d setting AUTHRESPONSE",client_socket, i); - cryptDestroySession(sbbs->ssh_session); - close_socket(client_socket); - continue; - } if(!cryptStatusOK(i=cryptSetAttribute(sbbs->ssh_session, CRYPT_SESSINFO_NETWORKSOCKET, client_socket))) { lprintf(LOG_WARNING,"%04d SSH Cryptlib error %d setting socket",client_socket, i); cryptDestroySession(sbbs->ssh_session); close_socket(client_socket); continue; } - if(!cryptStatusOK(i=cryptSetAttribute(sbbs->ssh_session, CRYPT_SESSINFO_ACTIVE, 1))) { - switch(i) { - case CRYPT_ERROR_BADDATA: - lprintf(LOG_NOTICE,"%04d SSH Bad/unrecognized data format", client_socket); - break; - case CRYPT_ERROR_READ: - lprintf(LOG_WARNING,"%04d SSH Read failure", client_socket); - break; - case CRYPT_ERROR_WRITE: - lprintf(LOG_WARNING,"%04d SSH Write failure", client_socket); - break; - default: - lprintf(LOG_WARNING,"%04d SSH Cryptlib error %d setting session active",client_socket, i); + for(ssh_failed=0; ssh_failed < 2; ssh_failed++) { + /* Accept any credentials */ + if(!cryptStatusOK(i=cryptSetAttribute(sbbs->ssh_session, CRYPT_SESSINFO_AUTHRESPONSE, 1))) { + ssh_failed=1; + break; + } + if(!cryptStatusOK(i=cryptSetAttribute(sbbs->ssh_session, CRYPT_SESSINFO_ACTIVE, 1))) { + if(i != CRYPT_ENVELOPE_RESOURCE) { + ssh_failed=2; break; + } } + else { + ssh_failed=0; + break; + } + } + switch(ssh_failed) { + case 1: + lprintf(LOG_WARNING,"%04d SSH Cryptlib error %d setting AUTHRESPONSE",client_socket, i); + break; + case 2: + switch(i) { + case CRYPT_ERROR_BADDATA: + lprintf(LOG_NOTICE,"%04d SSH Bad/unrecognized data format", client_socket); + break; + case CRYPT_ERROR_READ: + lprintf(LOG_WARNING,"%04d SSH Read failure", client_socket); + break; + case CRYPT_ERROR_WRITE: + lprintf(LOG_WARNING,"%04d SSH Write failure", client_socket); + break; + default: + lprintf(LOG_WARNING,"%04d SSH Cryptlib error %d setting session active",client_socket, i); + break; + } + break; + } + if(ssh_failed) { cryptDestroySession(sbbs->ssh_session); close_socket(client_socket); continue; -- GitLab