network: add support for NTLM Session Security

tested manually with internal proxy.

Patch-by: Jonathan Lauvernier <Jonathan.Lauvernier@gmail.com>

Change-Id: Ief5b4579b3444ce70eb99637edf771d37d3971fb
Reviewed-by: Peter Hartmann <phartmann@blackberry.com>
bb10
Peter Hartmann 2014-03-07 14:49:34 +01:00 committed by The Qt Project
parent 53f81ac946
commit d9f5200fb8
2 changed files with 10 additions and 3 deletions

View File

@ -981,7 +981,7 @@ public:
QNtlmPhase1Block() {
qstrncpy(magic, "NTLMSSP", 8);
type = 1;
flags = NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_NTLM | NTLMSSP_REQUEST_TARGET;
flags = NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_NTLM | NTLMSSP_REQUEST_TARGET | NTLMSSP_NEGOTIATE_ALWAYS_SIGN | NTLMSSP_NEGOTIATE_NTLM2;
}
// extracted
@ -1423,9 +1423,16 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas
ds.setByteOrder(QDataStream::LittleEndian);
QNtlmPhase3Block pb;
// set NTLMv2
if (ch.flags & NTLMSSP_NEGOTIATE_NTLM2)
pb.flags |= NTLMSSP_NEGOTIATE_NTLM2;
// set Always Sign
if (ch.flags & NTLMSSP_NEGOTIATE_ALWAYS_SIGN)
pb.flags |= NTLMSSP_NEGOTIATE_ALWAYS_SIGN;
bool unicode = ch.flags & NTLMSSP_NEGOTIATE_UNICODE;
pb.flags = NTLMSSP_NEGOTIATE_NTLM;
if (unicode)
pb.flags |= NTLMSSP_NEGOTIATE_UNICODE;
else

View File

@ -146,7 +146,7 @@ void tst_QAuthenticator::ntlmAuth()
if (sso)
QVERIFY(priv->calculateResponse("GET", "/").startsWith("NTLM "));
else
QCOMPARE(priv->calculateResponse("GET", "/").constData(), "NTLM TlRMTVNTUAABAAAABQIAAAAAAAAAAAAAAAAAAAAAAAA=");
QCOMPARE(priv->calculateResponse("GET", "/").constData(), "NTLM TlRMTVNTUAABAAAABYIIAAAAAAAAAAAAAAAAAAAAAAA=");
// NTLM phase 2: challenge
headers.clear();