Fix http authentication to a different realm on the same server
This is a regression caused by the NTLMv2 authentication patch. I have manually tested NTLMv2 authentication against MS IIS and reverting these two lines does not break it. Task-number: QT-5209 Change-Id: I64159cbe468e1a7f834f8726fd0c9d4ab4c54b38 Reviewed-by: Peter Hartmann <peter.hartmann@nokia.com>
This commit is contained in:
parent
ee0a997bcd
commit
4954f71648
@ -388,8 +388,7 @@ void QAuthenticatorPrivate::parseHttpResponse(const QList<QPair<QByteArray, QByt
|
||||
|
||||
switch(method) {
|
||||
case Basic:
|
||||
if(realm.isEmpty())
|
||||
this->options[QLatin1String("realm")] = realm = QString::fromLatin1(options.value("realm"));
|
||||
this->options[QLatin1String("realm")] = realm = QString::fromLatin1(options.value("realm"));
|
||||
if (user.isEmpty() && password.isEmpty())
|
||||
phase = Done;
|
||||
break;
|
||||
@ -397,8 +396,7 @@ void QAuthenticatorPrivate::parseHttpResponse(const QList<QPair<QByteArray, QByt
|
||||
// #### extract from header
|
||||
break;
|
||||
case DigestMd5: {
|
||||
if(realm.isEmpty())
|
||||
this->options[QLatin1String("realm")] = realm = QString::fromLatin1(options.value("realm"));
|
||||
this->options[QLatin1String("realm")] = realm = QString::fromLatin1(options.value("realm"));
|
||||
if (options.value("stale").toLower() == "true")
|
||||
phase = Start;
|
||||
if (user.isEmpty() && password.isEmpty())
|
||||
|
@ -382,6 +382,7 @@ private Q_SLOTS:
|
||||
void httpUserAgent();
|
||||
void authenticationCacheAfterCancel_data();
|
||||
void authenticationCacheAfterCancel();
|
||||
void authenticationWithDifferentRealm();
|
||||
void synchronousAuthenticationCache();
|
||||
|
||||
// NOTE: This test must be last!
|
||||
@ -6212,6 +6213,38 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
|
||||
|
||||
}
|
||||
|
||||
void tst_QNetworkReply::authenticationWithDifferentRealm()
|
||||
{
|
||||
AuthenticationCacheHelper helper;
|
||||
QNetworkAccessManager manager;
|
||||
#ifndef QT_NO_OPENSSL
|
||||
connect(&manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
|
||||
SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
|
||||
#endif
|
||||
connect(&manager, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)), &helper, SLOT(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)));
|
||||
connect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), &helper, SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
|
||||
|
||||
helper.httpUserName = "httptest";
|
||||
helper.httpPassword = "httptest";
|
||||
|
||||
QNetworkRequest request(QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/rfcs-auth/rfc3252.txt"));
|
||||
QNetworkReply* reply = manager.get(request);
|
||||
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
|
||||
QTestEventLoop::instance().enterLoop(10);
|
||||
QVERIFY(!QTestEventLoop::instance().timeout());
|
||||
QCOMPARE(reply->error(), QNetworkReply::NoError);
|
||||
|
||||
helper.httpUserName = "httptest";
|
||||
helper.httpPassword = "httptest";
|
||||
|
||||
request.setUrl(QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/auth-digest/"));
|
||||
reply = manager.get(request);
|
||||
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
|
||||
QTestEventLoop::instance().enterLoop(10);
|
||||
QVERIFY(!QTestEventLoop::instance().timeout());
|
||||
QCOMPARE(reply->error(), QNetworkReply::NoError);
|
||||
}
|
||||
|
||||
class QtBug13431Helper : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
Loading…
x
Reference in New Issue
Block a user