Branch: master

c6d4bab1 2015-09-10 00:12:31 Timothy Pearson
Fix incorrect SASL property fetch calls
This resolves the long-standing incorrect buffer size issues
M lib/libtdekrb/src/tdekrbclientsocket.cpp
M lib/libtdekrb/src/tdekrbserversocket.cpp
diff --git a/lib/libtdekrb/src/tdekrbclientsocket.cpp b/lib/libtdekrb/src/tdekrbclientsocket.cpp
index 15ca9ea..4bf840b 100644
--- a/lib/libtdekrb/src/tdekrbclientsocket.cpp
+++ b/lib/libtdekrb/src/tdekrbclientsocket.cpp
@@ -810,6 +810,7 @@
 	const char *data = 0;
 	const char *chosenmech = 0;
 	sasl_ssf_t *ssf = 0;
+	const void *sasl_prop_ptr;
 
 	if (m_krbInitRunning) {
 		switch (m_krbInitState) {
@@ -957,7 +958,8 @@
 				break;
 			case 2:
 				if (state() == TQSocket::Connected) {
-					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_USERNAME, (const void **)&data);
+					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_USERNAME, &sasl_prop_ptr);
+					data = (const char *)sasl_prop_ptr;
 					if (m_krbInitResult != SASL_OK) {
 						printf("[WARNING] Unable to determine authenticated username!\n\r");
 					}
@@ -966,7 +968,8 @@
 					}
 
 #if 0
-					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_DEFUSERREALM, (const void **)&data);
+					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_DEFUSERREALM, &sasl_prop_ptr);
+					data = (const char *)sasl_prop_ptr;
 					if (m_krbInitResult != SASL_OK) {
 						printf("[WARNING] Unable to determine authenticated realm!\n\r");
 					}
@@ -975,7 +978,8 @@
 					}
 #endif
 				
-					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_SSF, (const void **)&ssf);
+					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_SSF, &sasl_prop_ptr);
+					ssf = (sasl_ssf_t *)sasl_prop_ptr;
 					if (m_krbInitResult != SASL_OK) {
 						printf("[WARNING] Unable to determine SSF!\n\r");
 					}
@@ -983,7 +987,8 @@
 						printf("[DEBUG] Authenticated SSF: %d\n", *ssf);
 					}
 
-					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_MAXOUTBUF, (const void **)&m_negotiatedMaxBufferSize);
+					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_MAXOUTBUF, &sasl_prop_ptr);
+					m_negotiatedMaxBufferSize = *((unsigned*)sasl_prop_ptr);
 					if (m_krbInitResult != SASL_OK) {
 						printf("[WARNING] Unable to determine maximum buffer size!\n\r");
 						m_negotiatedMaxBufferSize = NET_SEC_BUF_SIZE;
diff --git a/lib/libtdekrb/src/tdekrbserversocket.cpp b/lib/libtdekrb/src/tdekrbserversocket.cpp
index a924236..2c21517 100644
--- a/lib/libtdekrb/src/tdekrbserversocket.cpp
+++ b/lib/libtdekrb/src/tdekrbserversocket.cpp
@@ -804,6 +804,7 @@
 	int slen;
 	char buf[NET_SEC_BUF_SIZE];
 	sasl_ssf_t *ssf;
+	const void *sasl_prop_ptr;
 
 	if (m_krbInitRunning) {
 		switch (m_krbInitState) {
@@ -916,7 +917,8 @@
 						sendSASLDataToNetwork(m_krbInitData, m_krbInitLastLen);
 					}
 
-					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_USERNAME, (const void **)&m_krbInitData);
+					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_USERNAME, &sasl_prop_ptr);
+					m_krbInitData = (const char *)sasl_prop_ptr;
 					if (m_krbInitResult != SASL_OK) {
 						printf("[WARNING] Unable to determine authenticated username!\n\r");
 					}
@@ -926,7 +928,8 @@
 					}
 
 #if 0
-					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_DEFUSERREALM, (const void **)&m_krbInitData);
+					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_DEFUSERREALM, (const void **)&sasl_prop_ptr);
+					m_krbInitData = (const char *)sasl_prop_ptr;
 					if (m_krbInitResult != SASL_OK) {
 						printf("[WARNING] Unable to determine authenticated realm!\n\r");
 					}
@@ -938,7 +941,8 @@
 					m_authenticatedRealmName = "(NULL)";
 #endif
 
-					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_SSF, (const void **)&ssf);
+					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_SSF, &sasl_prop_ptr);
+					ssf = (sasl_ssf_t *)sasl_prop_ptr;
 					if (m_krbInitResult != SASL_OK) {
 						printf("[WARNING] Unable to determine SSF!\n\r");
 					}
@@ -946,7 +950,8 @@
 						printf("[DEBUG] Authenticated SSF: %d\n", *ssf);
 					}
 
-					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_MAXOUTBUF, (const void **)&m_negotiatedMaxBufferSize);
+					m_krbInitResult = sasl_getprop(saslData->m_krbConnection, SASL_MAXOUTBUF, &sasl_prop_ptr);
+					m_negotiatedMaxBufferSize = *((unsigned*)sasl_prop_ptr);
 					if (m_krbInitResult != SASL_OK) {
 						printf("[WARNING] Unable to determine maximum buffer size!\n\r");
 						m_negotiatedMaxBufferSize = NET_SEC_BUF_SIZE;