|
|
|
@ -100,7 +100,7 @@ static int logSASLMessages(void *context __attribute__((unused)), int priority,
|
|
|
|
|
return SASL_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TDEKerberosServerSocket::TDEKerberosServerSocket(TQObject *parent, const char *name) : TQSocket(parent, name), m_kerberosRequested(false), m_criticalSection(0), m_bufferLength(0), m_krbInitRunning(false), m_krbInitState(-1), m_dataTimeout(-1), kerberosInitLoopTimer(NULL), m_canary(NULL), m_negotiatedMaxBufferSize(NET_SEC_BUF_SIZE) {
|
|
|
|
|
TDEKerberosServerSocket::TDEKerberosServerSocket(TQObject *parent, const char *name) : TQSocket(parent, name), m_kerberosRequested(false), m_criticalSection(0), m_bufferLength(0), m_bufferReadPointer(0), m_krbInitRunning(false), m_krbInitState(-1), m_dataTimeout(-1), kerberosInitLoopTimer(NULL), m_canary(NULL), m_negotiatedMaxBufferSize(NET_SEC_BUF_SIZE) {
|
|
|
|
|
saslData = new SASLDataPrivate;
|
|
|
|
|
saslData->m_krbConnection = NULL;
|
|
|
|
|
m_buffer = new TQBuffer();
|
|
|
|
@ -182,14 +182,12 @@ bool TDEKerberosServerSocket::at(TQIODevice::Offset off, int hidebasehack) {
|
|
|
|
|
|
|
|
|
|
// Remove the specified bytes from the buffer
|
|
|
|
|
m_bufferLength = m_bufferLength-off;
|
|
|
|
|
TQByteArray ba = m_buffer->buffer();
|
|
|
|
|
for (i=0; i<m_bufferLength;i++) {
|
|
|
|
|
ba[i] = ba[i+off];
|
|
|
|
|
}
|
|
|
|
|
m_bufferReadPointer = m_bufferReadPointer+off;
|
|
|
|
|
if (m_bufferLength < 1) {
|
|
|
|
|
// Clear the buffer from memory
|
|
|
|
|
m_buffer->close();
|
|
|
|
|
m_buffer->open(IO_ReadWrite|IO_Truncate);
|
|
|
|
|
m_bufferReadPointer = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
@ -257,10 +255,11 @@ int TDEKerberosServerSocket::ungetch(int ch) {
|
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
|
|
if (kerberosStatus() == KerberosInUse) {
|
|
|
|
|
ret = m_buffer->ungetch(ch);
|
|
|
|
|
if (ret >= 0) {
|
|
|
|
|
m_bufferLength++;
|
|
|
|
|
}
|
|
|
|
|
// FIXME
|
|
|
|
|
// UNIMPLEMENTED
|
|
|
|
|
// This feature, if supported, will be very expensive, requiring a full allocation+copy/shift+deallocation of the buffer array,
|
|
|
|
|
// followed by insertion of the new character to the head of the array
|
|
|
|
|
ret = -1;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
ret = TQSocket::ungetch(ch);
|
|
|
|
@ -294,7 +293,7 @@ int TDEKerberosServerSocket::processPendingData() {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if (reclen > 0) {
|
|
|
|
|
m_buffer->at(m_bufferLength);
|
|
|
|
|
m_buffer->at(m_bufferLength+m_bufferReadPointer);
|
|
|
|
|
wrlen = m_buffer->writeBlock(buf, reclen);
|
|
|
|
|
if (wrlen > 0) {
|
|
|
|
|
m_bufferLength = m_bufferLength + wrlen;
|
|
|
|
@ -363,7 +362,7 @@ TQ_LONG TDEKerberosServerSocket::readBlock(char *data, TQ_ULONG maxlen) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if (reclen > 0) {
|
|
|
|
|
m_buffer->at(m_bufferLength);
|
|
|
|
|
m_buffer->at(m_bufferLength+m_bufferReadPointer);
|
|
|
|
|
wrlen = m_buffer->writeBlock(buf, reclen);
|
|
|
|
|
if (wrlen > 0) {
|
|
|
|
|
m_bufferLength = m_bufferLength + wrlen;
|
|
|
|
@ -376,19 +375,17 @@ TQ_LONG TDEKerberosServerSocket::readBlock(char *data, TQ_ULONG maxlen) {
|
|
|
|
|
if (maxlen > (unsigned int)m_bufferLength) {
|
|
|
|
|
maxlen = m_bufferLength;
|
|
|
|
|
}
|
|
|
|
|
m_buffer->at(0);
|
|
|
|
|
m_buffer->at(m_bufferReadPointer);
|
|
|
|
|
ret = m_buffer->readBlock(data, maxlen);
|
|
|
|
|
if (ret > 0) {
|
|
|
|
|
// Remove the read bytes from the buffer
|
|
|
|
|
m_bufferLength = m_bufferLength-ret;
|
|
|
|
|
TQByteArray ba = m_buffer->buffer();
|
|
|
|
|
for (i=0; i<m_bufferLength;i++) {
|
|
|
|
|
ba[i] = ba[i+ret];
|
|
|
|
|
}
|
|
|
|
|
m_bufferReadPointer = m_bufferReadPointer+ret;
|
|
|
|
|
if (m_bufferLength < 1) {
|
|
|
|
|
// Clear the buffer from memory
|
|
|
|
|
m_buffer->close();
|
|
|
|
|
m_buffer->open(IO_ReadWrite|IO_Truncate);
|
|
|
|
|
m_bufferReadPointer = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -427,7 +424,7 @@ TQ_LONG TDEKerberosServerSocket::readLine(char *data, TQ_ULONG maxlen) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
if (reclen > 0) {
|
|
|
|
|
m_buffer->at(m_bufferLength);
|
|
|
|
|
m_buffer->at(m_bufferLength+m_bufferReadPointer);
|
|
|
|
|
wrlen = m_buffer->writeBlock(buf, reclen);
|
|
|
|
|
if (wrlen > 0) {
|
|
|
|
|
m_bufferLength = m_bufferLength + wrlen;
|
|
|
|
@ -440,19 +437,17 @@ TQ_LONG TDEKerberosServerSocket::readLine(char *data, TQ_ULONG maxlen) {
|
|
|
|
|
if (maxlen > (unsigned int)m_bufferLength) {
|
|
|
|
|
maxlen = m_bufferLength;
|
|
|
|
|
}
|
|
|
|
|
m_buffer->at(0);
|
|
|
|
|
m_buffer->at(m_bufferReadPointer);
|
|
|
|
|
ret = m_buffer->readLine(data, maxlen);
|
|
|
|
|
if (ret > 0) {
|
|
|
|
|
// Remove the read bytes from the buffer
|
|
|
|
|
m_bufferLength = m_bufferLength-ret;
|
|
|
|
|
TQByteArray ba = m_buffer->buffer();
|
|
|
|
|
for (i=0; i<m_bufferLength;i++) {
|
|
|
|
|
ba[i] = ba[i+ret];
|
|
|
|
|
}
|
|
|
|
|
m_bufferReadPointer = m_bufferReadPointer+ret;
|
|
|
|
|
if (m_bufferLength < 1) {
|
|
|
|
|
// Clear the buffer from memory
|
|
|
|
|
m_buffer->close();
|
|
|
|
|
m_buffer->open(IO_ReadWrite|IO_Truncate);
|
|
|
|
|
m_bufferReadPointer = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -482,7 +477,7 @@ TQString TDEKerberosServerSocket::readLine() {
|
|
|
|
|
return TQString::null;
|
|
|
|
|
}
|
|
|
|
|
if (reclen > 0) {
|
|
|
|
|
m_buffer->at(m_bufferLength);
|
|
|
|
|
m_buffer->at(m_bufferLength+m_bufferReadPointer);
|
|
|
|
|
wrlen = m_buffer->writeBlock(buf, reclen);
|
|
|
|
|
if (wrlen > 0) {
|
|
|
|
|
m_bufferLength = m_bufferLength + wrlen;
|
|
|
|
@ -495,20 +490,18 @@ TQString TDEKerberosServerSocket::readLine() {
|
|
|
|
|
if (maxlen > m_bufferLength) {
|
|
|
|
|
maxlen = m_bufferLength;
|
|
|
|
|
}
|
|
|
|
|
m_buffer->at(0);
|
|
|
|
|
m_buffer->at(m_bufferReadPointer);
|
|
|
|
|
buf = (char*)malloc(maxlen);
|
|
|
|
|
readlen = m_buffer->readLine(buf, maxlen);
|
|
|
|
|
if (readlen > 0) {
|
|
|
|
|
// Remove the read bytes from the buffer
|
|
|
|
|
m_bufferLength = m_bufferLength-readlen;
|
|
|
|
|
TQByteArray ba = m_buffer->buffer();
|
|
|
|
|
for (i=0; i<m_bufferLength;i++) {
|
|
|
|
|
ba[i] = ba[i+readlen];
|
|
|
|
|
}
|
|
|
|
|
m_bufferReadPointer = m_bufferReadPointer+readlen;
|
|
|
|
|
if (m_bufferLength < 1) {
|
|
|
|
|
// Clear the buffer from memory
|
|
|
|
|
m_buffer->close();
|
|
|
|
|
m_buffer->open(IO_ReadWrite|IO_Truncate);
|
|
|
|
|
m_bufferReadPointer = 0;
|
|
|
|
|
}
|
|
|
|
|
ret = TQString(buf);
|
|
|
|
|
}
|
|
|
|
@ -735,8 +728,13 @@ int TDEKerberosServerSocket::writeEndOfFrame() {
|
|
|
|
|
|
|
|
|
|
bool TDEKerberosServerSocket::canReadFrame() {
|
|
|
|
|
processPendingData();
|
|
|
|
|
if (m_buffer->buffer().contains(255) > 0) {
|
|
|
|
|
return true;
|
|
|
|
|
if (m_bufferLength > 0) {
|
|
|
|
|
if (m_buffer->buffer().find(255, m_bufferReadPointer) >= 0) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
return false;
|
|
|
|
@ -747,18 +745,16 @@ void TDEKerberosServerSocket::clearFrameTail() {
|
|
|
|
|
int i;
|
|
|
|
|
int eofLoc;
|
|
|
|
|
if (m_bufferLength > 0) {
|
|
|
|
|
eofLoc = m_buffer->buffer().find(255, 0) + 1;
|
|
|
|
|
if ((eofLoc > 0) && (eofLoc <= m_bufferLength)) {
|
|
|
|
|
eofLoc = m_buffer->buffer().find(255, m_bufferReadPointer) + 1;
|
|
|
|
|
if ((eofLoc > 0) && (eofLoc <= (m_bufferLength+m_bufferReadPointer))) {
|
|
|
|
|
// Remove the remaining frame bytes (including the End of Frame marker) from the buffer
|
|
|
|
|
m_bufferLength = m_bufferLength-eofLoc;
|
|
|
|
|
TQByteArray ba = m_buffer->buffer();
|
|
|
|
|
for (i=0; i<m_bufferLength;i++) {
|
|
|
|
|
ba[i] = ba[i+eofLoc];
|
|
|
|
|
}
|
|
|
|
|
m_bufferLength = m_bufferLength-(eofLoc-m_bufferReadPointer);
|
|
|
|
|
m_bufferReadPointer = m_bufferReadPointer+(eofLoc-m_bufferReadPointer);
|
|
|
|
|
if (m_bufferLength < 1) {
|
|
|
|
|
// Clear the buffer from memory
|
|
|
|
|
m_buffer->close();
|
|
|
|
|
m_buffer->open(IO_ReadWrite|IO_Truncate);
|
|
|
|
|
m_bufferReadPointer = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|