summaryrefslogtreecommitdiffstats
path: root/servers
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-06-28 22:30:14 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-06-28 22:30:14 -0500
commite89735d72ae3b320c33f7ad95c3cbc9ea6d42f6c (patch)
tree082b8c247ba91b735394a9ba8d4f87bf416a389f /servers
parent65ea633f475c7ab2b524dc1ffb369f6607df3e6b (diff)
downloadulab-e89735d72ae3b320c33f7ad95c3cbc9ea6d42f6c.tar.gz
ulab-e89735d72ae3b320c33f7ad95c3cbc9ea6d42f6c.zip
Convert krb client socket to stateful init
Diffstat (limited to 'servers')
-rw-r--r--servers/auth_server_lin/src/auth_conn.cpp30
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;