summaryrefslogtreecommitdiffstats
path: root/src/network
diff options
context:
space:
mode:
Diffstat (limited to 'src/network')
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp4
-rw-r--r--src/network/access/qnetworkreplyimpl.cpp1
-rw-r--r--src/network/bearer/qbearerengine.cpp3
-rw-r--r--src/network/kernel/qauthenticator.cpp39
-rw-r--r--src/network/kernel/qauthenticator_p.h1
5 files changed, 37 insertions, 11 deletions
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index 95ccb77c16..2ab28c7178 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -746,7 +746,7 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest()
return;
// try to get a free AND connected socket
for (int i = 0; i < channelCount; ++i) {
- if (!channels[i].isSocketBusy() && channels[i].socket->state() == QAbstractSocket::ConnectedState) {
+ if (!channels[i].reply && !channels[i].isSocketBusy() && channels[i].socket->state() == QAbstractSocket::ConnectedState) {
dequeueAndSendRequest(channels[i].socket);
}
}
@@ -756,7 +756,7 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest()
return;
// try to get a free unconnected socket
for (int i = 0; i < channelCount; ++i) {
- if (!channels[i].isSocketBusy()) {
+ if (!channels[i].reply && !channels[i].isSocketBusy()) {
dequeueAndSendRequest(channels[i].socket);
}
}
diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp
index 70418e9115..3a629cf575 100644
--- a/src/network/access/qnetworkreplyimpl.cpp
+++ b/src/network/access/qnetworkreplyimpl.cpp
@@ -595,6 +595,7 @@ void QNetworkReplyImplPrivate::appendDownstreamData(QIODevice *data)
void QNetworkReplyImplPrivate::appendDownstreamData(const QByteArray &data)
{
+ Q_UNUSED(data)
// TODO implement
// TODO call
diff --git a/src/network/bearer/qbearerengine.cpp b/src/network/bearer/qbearerengine.cpp
index 2f8624a0d0..b07492484e 100644
--- a/src/network/bearer/qbearerengine.cpp
+++ b/src/network/bearer/qbearerengine.cpp
@@ -58,18 +58,21 @@ QBearerEngine::~QBearerEngine()
it.value()->isValid = false;
it.value()->id.clear();
}
+ snapConfigurations.clear();
for (it = accessPointConfigurations.begin(), end = accessPointConfigurations.end();
it != end; ++it) {
it.value()->isValid = false;
it.value()->id.clear();
}
+ accessPointConfigurations.clear();
for (it = userChoiceConfigurations.begin(), end = userChoiceConfigurations.end();
it != end; ++it) {
it.value()->isValid = false;
it.value()->id.clear();
}
+ userChoiceConfigurations.clear();
}
bool QBearerEngine::requiresPolling() const
diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp
index 18cc14e207..f97d833bd5 100644
--- a/src/network/kernel/qauthenticator.cpp
+++ b/src/network/kernel/qauthenticator.cpp
@@ -210,19 +210,38 @@ void QAuthenticator::setUser(const QString &user)
switch(d->method) {
case QAuthenticatorPrivate::DigestMd5:
- case QAuthenticatorPrivate::Ntlm:
- if((separatorPosn = user.indexOf(QLatin1String("\\"))) != -1)
- {
+ if((separatorPosn = user.indexOf(QLatin1String("\\"))) != -1) {
//domain name is present
+ d->userDomain.clear();
d->realm = user.left(separatorPosn);
d->user = user.mid(separatorPosn + 1);
} else if((separatorPosn = user.indexOf(QLatin1String("@"))) != -1) {
//domain name is present
+ d->userDomain.clear();
d->realm = user.mid(separatorPosn + 1);
d->user = user.left(separatorPosn);
} else {
d->user = user;
d->realm.clear();
+ d->userDomain.clear();
+ }
+ break;
+
+ case QAuthenticatorPrivate::Ntlm:
+ if((separatorPosn = user.indexOf(QLatin1String("\\"))) != -1) {
+ //domain name is present
+ d->realm.clear();
+ d->userDomain = user.left(separatorPosn);
+ d->user = user.mid(separatorPosn + 1);
+ } else if((separatorPosn = user.indexOf(QLatin1String("@"))) != -1) {
+ //domain name is present
+ d->realm.clear();
+ d->userDomain = user.left(separatorPosn);
+ d->user = user.left(separatorPosn);
+ } else {
+ d->user = user;
+ d->realm.clear();
+ d->userDomain.clear();
}
break;
// For other auth mechanisms, domain name will be part of username
@@ -1178,7 +1197,7 @@ static QByteArray qCreatev2Hash(const QAuthenticatorPrivate *ctx,
// Assuming the user and domain is always unicode in challenge
QByteArray message =
qStringAsUcs2Le(ctx->user.toUpper()) +
- qStringAsUcs2Le(ctx->realm);
+ qStringAsUcs2Le(phase3->domainStr);
phase3->v2Hash = qEncodeHmacMd5(hashKey, message);
}
@@ -1364,9 +1383,6 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas
bool unicode = ch.flags & NTLMSSP_NEGOTIATE_UNICODE;
- if(ctx->realm.isEmpty())
- ctx->realm = ch.targetNameStr;
-
pb.flags = NTLMSSP_NEGOTIATE_NTLM;
if (unicode)
pb.flags |= NTLMSSP_NEGOTIATE_UNICODE;
@@ -1377,8 +1393,13 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas
int offset = QNtlmPhase3BlockBase::Size;
Q_ASSERT(QNtlmPhase3BlockBase::Size == sizeof(QNtlmPhase3BlockBase));
- offset = qEncodeNtlmString(pb.domain, offset, ctx->realm, unicode);
- pb.domainStr = ctx->realm;
+ if(ctx->userDomain.isEmpty()) {
+ offset = qEncodeNtlmString(pb.domain, offset, ch.targetNameStr, unicode);
+ pb.domainStr = ch.targetNameStr;
+ } else {
+ offset = qEncodeNtlmString(pb.domain, offset, ctx->userDomain, unicode);
+ pb.domainStr = ctx->userDomain;
+ }
offset = qEncodeNtlmString(pb.user, offset, ctx->user, unicode);
pb.userStr = ctx->user;
diff --git a/src/network/kernel/qauthenticator_p.h b/src/network/kernel/qauthenticator_p.h
index 10966014b9..4e09360d2a 100644
--- a/src/network/kernel/qauthenticator_p.h
+++ b/src/network/kernel/qauthenticator_p.h
@@ -91,6 +91,7 @@ public:
// ntlm specific
QString workstation;
+ QString userDomain;
QByteArray calculateResponse(const QByteArray &method, const QByteArray &path);