From 375832128251845fcdbc4fc66ee88e1e355ec2c8 Mon Sep 17 00:00:00 2001 From: Mate Barany Date: Mon, 19 Aug 2024 16:20:37 +0200 Subject: [PATCH] Merge the block and blockbase classes in qauthenticator.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The inheritance is probably unnecessary. As a drive-by, initialize all the members to silence the original Axivion warning. Task-number: QTBUG-127539 Change-Id: Iba9d8f2cba246616dbb6e8e9b7b21e8589af84d9 Reviewed-by: MÃ¥rten Nordheim (cherry picked from commit de3dd3878c2305be81d539e768788e2713c81423) Reviewed-by: Qt Cherry-pick Bot --- src/network/kernel/qauthenticator.cpp | 78 +++++++++++---------------- 1 file changed, 32 insertions(+), 46 deletions(-) diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index e42450d7e5f..cb7e0e0b4cf 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -1013,45 +1013,6 @@ public: enum { Size = 8 }; }; -class QNtlmPhase1BlockBase -{ -public: - char magic[8]; - quint32 type; - quint32 flags; - QNtlmBuffer domain; - QNtlmBuffer workstation; - enum { Size = 32 }; -}; - -// ################# check paddings -class QNtlmPhase2BlockBase -{ -public: - char magic[8]; - quint32 type; - QNtlmBuffer targetName; - quint32 flags; - unsigned char challenge[8]; - quint32 context[2]; - QNtlmBuffer targetInfo; - enum { Size = 48 }; -}; - -class QNtlmPhase3BlockBase { -public: - char magic[8]; - quint32 type; - QNtlmBuffer lmResponse; - QNtlmBuffer ntlmResponse; - QNtlmBuffer domain; - QNtlmBuffer user; - QNtlmBuffer workstation; - QNtlmBuffer sessionKey; - quint32 flags; - enum { Size = 64 }; -}; - static void qStreamNtlmBuffer(QDataStream& ds, const QByteArray& s) { ds.writeRawData(s.constData(), s.size()); @@ -1104,9 +1065,15 @@ static QDataStream& operator>>(QDataStream& s, QNtlmBuffer& b) } -class QNtlmPhase1Block : public QNtlmPhase1BlockBase +class QNtlmPhase1Block { // request public: + char magic[8]; + quint32 type; + quint32 flags; + QNtlmBuffer domain; + QNtlmBuffer workstation; + QNtlmPhase1Block() { qstrncpy(magic, "NTLMSSP", 8); type = 1; @@ -1118,9 +1085,18 @@ public: }; -class QNtlmPhase2Block : public QNtlmPhase2BlockBase +class QNtlmPhase2Block { // challenge public: + char magic[8]; + quint32 type; + QNtlmBuffer targetName; + quint32 flags = 0; + unsigned char challenge[8] = {'\0'}; + quint32 context[2] = {0, 0}; + QNtlmBuffer targetInfo; + enum { Size = 48 }; + QNtlmPhase2Block() { magic[0] = 0; type = 0xffffffff; @@ -1133,8 +1109,20 @@ public: -class QNtlmPhase3Block : public QNtlmPhase3BlockBase { // response +class QNtlmPhase3Block +{ // response public: + char magic[8]; + quint32 type; + QNtlmBuffer lmResponse; + QNtlmBuffer ntlmResponse; + QNtlmBuffer domain; + QNtlmBuffer user; + QNtlmBuffer workstation; + QNtlmBuffer sessionKey; + quint32 flags; + enum { Size = 64 }; + QNtlmPhase3Block() { qstrncpy(magic, "NTLMSSP", 8); type = 3; @@ -1451,8 +1439,7 @@ static QByteArray qEncodeLmv2Response(const QAuthenticatorPrivate *ctx, static bool qNtlmDecodePhase2(const QByteArray& data, QNtlmPhase2Block& ch) { - Q_ASSERT(QNtlmPhase2BlockBase::Size == sizeof(QNtlmPhase2BlockBase)); - if (data.size() < QNtlmPhase2BlockBase::Size) + if (data.size() < QNtlmPhase2Block::Size) return false; @@ -1519,8 +1506,7 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas pb.flags |= NTLMSSP_NEGOTIATE_OEM; - int offset = QNtlmPhase3BlockBase::Size; - Q_ASSERT(QNtlmPhase3BlockBase::Size == sizeof(QNtlmPhase3BlockBase)); + int offset = QNtlmPhase3Block::Size; // for kerberos style user@domain logins, NTLM domain string should be left empty if (ctx->userDomain.isEmpty() && !ctx->extractedUser.contains(u'@')) {