diff options
Diffstat (limited to 'servers/auth_server_lin/src/auth_conn.cpp')
| -rw-r--r-- | servers/auth_server_lin/src/auth_conn.cpp | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/servers/auth_server_lin/src/auth_conn.cpp b/servers/auth_server_lin/src/auth_conn.cpp index 451b8d9..87eb314 100644 --- a/servers/auth_server_lin/src/auth_conn.cpp +++ b/servers/auth_server_lin/src/auth_conn.cpp @@ -125,6 +125,7 @@ void AuthSocket::servLoop() { if (m_servActive) { TQString command; TQDataStream ds(this); + TDEKerberosClientSocket::KerberosStatus krbstat; switch (m_servState) { case 0: @@ -153,14 +154,7 @@ void AuthSocket::servLoop() { break; case 1: if (m_servClientSocket->state() == TQSocket::Connected) { - if (m_servClientSocket->setUsingKerberos(true) != 0) { - m_servClientSocket->close(); - ds << TQString("ERRNOTAVL"); - printf("[DEBUG] Connection failed to %s:%d for user %s@%s due to Kerberos failure\n\r", m_srvServiceHostName.ascii(), m_srvServicePort, m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout); - m_servActive = false; - delete m_servClientTimeout; - m_servClientTimeout = NULL; - } + m_servClientSocket->setUsingKerberos(true); m_servState = 2; } else { @@ -173,6 +167,22 @@ void AuthSocket::servLoop() { } break; case 2: + krbstat = m_servClientSocket->kerberosStatus(); + if ((krbstat == TDEKerberosClientSocket::KerberosInitializing) || (krbstat == TDEKerberosClientSocket::KerberosInUse)) { + if (krbstat == TDEKerberosClientSocket::KerberosInUse) { + m_servState = 3; + } + } + else { + m_servClientSocket->close(); + ds << TQString("ERRNOTAVL"); + printf("[DEBUG] Connection failed to %s:%d for user %s@%s due to Kerberos failure\n\r", m_srvServiceHostName.ascii(), m_srvServicePort, m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout); + m_servActive = false; + delete m_servClientTimeout; + m_servClientTimeout = NULL; + } + break; + case 3: if (!m_servClientTimeout) { m_servClientTimeout = new TQTimer(); m_servClientTimeout->start(5000, TRUE); @@ -185,7 +195,7 @@ void AuthSocket::servLoop() { clientDS >> server_reply; if (server_reply == "OK") { ds << TQString("OK"); - m_servState = 3; + m_servState = 4; } else { m_servClientSocket->close(); @@ -217,7 +227,7 @@ void AuthSocket::servLoop() { m_servClientTimeout = NULL; } break; - case 3: + case 4: if (m_servClientSocket->state() == TQSocket::Connected) { TQByteArray ba(8192); TQ_ULONG reclen; |
